1

desktop_starterandroid_starterおよびの3 つのプロジェクトがありplatformます。両方のスターター プロジェクトがプロジェクトを参照し、platformプロジェクトplatformは (99%) プラットフォームに依存しないと想定され、ほとんどすべてのコードが含まれています。

その理由はもちろん、エミュレーターを使用せずにデスクトップで Android アプリを実行できるようにしたいからです。

ただし、少なくとも 1 か所で、プラットフォーム固有のコードを呼び出す必要がありますplatform。具体的にはjavax.ImageIO、デスクトップで使用するかandroid.graphics.Bitmap、画像をピクセル単位で読み取る必要があります。

Java AFAIKにはプリプロセッサまたは同様の構造がないため、私の選択は何ですか?

  • 画像リーダーをオブジェクトとして送信し、platformリフレクションを使用することもできますが、それは汚いです。
  • デスクトップ Java と Android の両方で動作する組み込みのイメージ リーダーを見つけました。何かアイデアはありますか?
  • JNIでlibpngなどを使用すると、もっと簡単な方法があるはずです。
4

1 に答える 1

4

必要なメソッドを定義するインターフェイスでプラットフォーム コードを単純にコーディングし、プラットフォーム固有のプロジェクトからこのインターフェイスのプラットフォーム固有の実装を渡すことができます。

たとえば、画像のすべてのピクセルを含む int 配列が必要な場合 (単なる例)、インターフェイスは次のようになります。

public interface ImageReader {
    int[] getImagePixels(InputStream in) throws IOException;
}

また、インターフェイスの 2 つの実装があります。1 つはデスクトップ プロジェクトで内部的に ImageIO を使用し、もう 1 つは Android プロジェクトで内部的に Bitmap を使用します。これらのクラスの 1 つのインスタンスが、プラットフォームに依存しないコードに渡されます。

于 2012-11-19T21:18:23.140 に答える