1

SOの周りを検索していくつか見つけましたが、まだ完全に理解していないので、説明をお願いします。

これが私が必要とするものです:

  • 特定の機能を持つプロジェクトがあります:Webサービスに問い合わせ、さまざまなビューで結果を表示します

  • 最初のプロジェクトとまったく同じ機能を持つ2番目、3番目、4番目のプロジェクトがありますが、スプラッシュ画面の画像、アイコン、名前、パッケージ名などのグラフィック要素が異なります。

だから、私はProjectCore活動と機能を持っています。スプラッシュスクリーン用の車のアイコンと車の画像を含むProject1。スプラッシュスクリーン用の飛行機アイコンと飛行機画像を含むProject2。そんな感じ。各プロジェクトには、「appId、appName、appServerURL」などの定数を持つクラスがあります...すべてのWebサービス呼び出し、データ表示はすべてのプロジェクトで同じであるためCoreにあり、読み取りのみがConstantsクラスから行われます。

私はこのアプローチを考えていました

  1. ProjectCoreをcom.domain.coreやダミー画像などのパッケージでライブラリプロジェクトにします
  2. Project1を作成し、その中にProjectCoreへの参照を追加し、com.domain.code.project1のようなパッケージを使用して、resourcesフォルダーにコアプロジェクトと同じ名前の画像を配置します
  3. Project1と同じ原則でProject2を作成します

このアプローチは機能しますか?

ありがとう。

後で編集します。私は前に述べたように試しました。たとえば、コアプロジェクトでは、ドローアブルにsplash.pngというファイルがありました。Project1とProject2のドローアブルフォルダに、spash.pngファイルを他の画像と一緒に配置しました。これは正常に機能します。私の携帯電話でProject1とProject2を実行し、それぞれのアプリを独自のイメージで起動しました。ここまでは順調ですね。

次に、アプリで使用する必要のある定数が異なるため、コアライブラリプロジェクトに移動して次のように追加しました。

public class C {
    public static String SomeConstant = "Project core!";
}

ここに問題があります。Project1とProject2で異なる定数値を設定する必要があります。Coreプロジェクトでは、クラスはたとえばcom.domain.core.utilsにあるため...Project1とProject2に同じパッケージを追加することはできません。クラスを追加して、それらの値を更新し、特定の値で各プロジェクトで使用できるようにするにはどうすればよいですか?

public class C {
    public static String SomeConstant = "Project 1 constant!";
}

public class C {
    public static String SomeConstant = "Project 2 constant!";
}

ありがとうございました!

4

3 に答える 3

1

はい。図書館プロジェクトは、特にリソースのみが異なる場合、これに理想的です。私はあなたが成功を収めて概説した正確なアプローチを使用しました...

于 2012-03-22T19:26:35.620 に答える
1

はい、これは正常に機能するはずです。私は少し似たようなことをしましたが、ライブラリプロジェクトからアプリケーションプロジェクトに呼び出したい状況がある場合があります。これらの場合、ライブラリプロジェクトで定義されているが、アプリケーションプロジェクトで実装されているインターフェイス/抽象クラスを使用しました...

于 2012-03-22T19:35:14.270 に答える
1

ライブラリプロジェクトで機能を作成してから、すべてのBranded / OEM / 3rdPartyプロジェクトをこれから拡張し、必要に応じて画像と文字列リソースをオーバーライドする必要があります。

「定数」を使用する必要がある場合は、代わりに、コードの1つの「1回実行」部分(スプラッシュ画面など)で、リソースファイルから次の文字列をロードする必要があります。

public static final String CONSTANT_ONE;

    public void onCreate() { CONSTANT_ONE = getResources().getString(R.String.CONSTANT_ONE); }

編集

の最終値の初期化がどのように実行されるかはわかりませんonCreate()。うまくfinal機能せず、プログラムの実行中に変数を変更する必要がある場合は、変数を作成してprivate(そのクラスのみが変数に割り当てることができるように)、public static String getConstantOne()関数を作成します。

于 2012-03-23T10:40:22.437 に答える