2012-04-23 12 views
9

私はいくつかのAndroidライブラリアプリをプロジェクト用に作っています。このプロジェクトで2つのライブラリ(utilLib,screenLib)があるとします(現在はのアプリケーションとします)。Androidは複数のR.javaをどう扱うのですか?

各プロジェクト内では異なる値を持つ同じ名前のStringリソースがあります。

utilLib

<string name="app_version">1.0</string> 
<string name="hello">UtilLib Hello</string> 

screenLib

<string name="app_version">0.7a</string> 
<string name="hello">ScreenLib Hello</string> 

私は私ができることに気づいたアプリ

<string name="app_version">0.1</string> 

:このようにcom.package.Rを使用して文字列を参照してくださいが、私のコードがこのように表示される場合はどうなりますか?

<!-- language: java --> 
import com.app.R; 
... 

private void checkValue(){ 
    String version = getString(R.app_version); 
    Log.d(TAG, "version: " + version); // 0.1 show be here 
    String hello = getString(R.hello); 
    Log.d(TAG, "Hello: " + hello); // <---- ? ('UtilLib Hello' or 'ScreenLib Hello') 
} 

私はここモジュラービルドを作るしようとしていますが、完全に使用するためにそのR.javaに優先順位をつける方法をアンドロイド理解していません。誰もこれを経験したことがありますか?

答えて

12
Log.d(TAG, "version: " + version); // 0.1 show be here 

公式devのガイドManaging Projects - Library Projectsから引用理由:

ライブラリプロジェクトに依存するアプリケーションをビルドすると、SDKツールは、一時的なJARファイルにライブラリをコンパイルし、メインでそれを使用していますその結果を使用して.apkを生成します。リソースIDがアプリケーションとライブラリの両方で定義されている場合、ツールはアプリケーションで宣言されたリソースが優先され、ライブラリプロジェクトのリソースがアプリケーション.apkにコンパイルされないことを保証します。これにより、任意のライブラリで定義されているリソースの動作や値を柔軟に使用または再定義できるようになります。


Log.d(TAG, "Hello: " + hello); // <---- ? ('UtilLib Hello' or 'ScreenLib Hello') 

これは、ライブラリプロジェクトの優先順位によって決定されます。公式DEVガイドManaging Project -Library Projectsから引用

  • ツールは、依存アプリケーションプロジェクトのものと特定のリソースをライブラリプロジェクトのリソースをマージするので、リソースが

    を競合IDは両方のプロジェクトで定義されている可能性があります。この場合、ツールはアプリケーションまたは最も優先度の高いライブラリからリソースを選択し、他のリソースは破棄します。アプリケーションを開発する際には、共通リソースIDが複数のプロジェクトで定義され、アプリケーションまたは優先順位の高いライブラリのリソースが優先されてマージされる可能性があることに注意してください。公式DEVガイドFrom Eclipse with ADT - Referencing a library projectから引用

あなたはそれらの相対的な優先順位を設定(および順序をマージ)ライブラリを選択し、使用してできることに注意して、複数のライブラリへの参照を追加する場合アップとダウンのコントロール。ツールは参照されたライブラリをアプリケーションとマージし、最も低い優先順位(リストの一番下)から最高(リストの一番上)までマージします。複数のライブラリで同じリソースIDが定義されている場合、ツールはライブラリから優先度の高いリソースを選択します。アプリケーション自体は最高の優先度を持ち、そのリソースは常にライブラリで定義された同一のリソースIDより優先して使用されます。

あなたはそれらの相対的な優先順位を設定(および順序をマージ)手動でproject.propertiesファイルを編集することができることを注意して、複数のライブラリへの参照を追加する場合と:公式DEVガイドFrom the Command Line - Referencing a Library Projectから引用

各参照の.nインデックスを適切に調整します。例えば、これらの参照を前提としています

android.library.reference.1=path/to/library_projectA 
android.library.reference.2=path/to/library_projectB 
android.library.reference.3=path/to/library_projectC 

あなたは、このようにlibrary_projectCに最高の優先度を与えることの参照を並べ替えることができます。

android.library.reference.2=path/to/library_projectA 
android.library.reference.3=path/to/library_projectB 
android.library.reference.1=path/to/library_projectC 

私はこれ以上説明することができる任意の単語を見つけることができません公式の開発者ガイドよりもクリアです。

+1

私はマネージメントプロジェクトに良い読書を与えることは決してありません。愚かな私、私は今夜それをやるつもりだ。ありがとうございました:D – RobGThai

+1

私は多くの書籍/オンラインガイドで、さまざまな出版物によって異なるプログラミング技術をカバーしています。 Androidの公式な開発ガイドIMOはライブのサンプルとコードスニペットでいっぱいの最高の、簡単な英語の単語です。これは、私がCocoa/ObjectiveCと比較して選択する主な理由の1つです:) – yorkw

-1

あなたはそれはおそらく、エラーをスローする必要がありますあなたのコードではcom.screenLib.Rとcom.utilLib.R
をインポートする必要があります「ハロー解決することはできません」

Lemmmeこれが正しいかどうかを知る!!!!

+0

Rをインポートしなくてもプロジェクトは解決しました.Eclipseでは** com.app.R.hello **として表示されますが、明らかにそうはありません。 – RobGThai

関連する問題