Android デベロッパー サイト: http://developer.android.com/tools/projects/index.htmlのソース、 Library Projects のセクション:
「... 構造的に、ライブラリ プロジェクトは標準の Android アプリケーション プロジェクトに似ています。たとえば、プロジェクト ルートにマニフェスト ファイルが含まれているだけでなく、src/、res/ などのディレクトリも含まれています。プロジェクトには同じタイプを含めることができます。ソース コードとリソースを標準の Android プロジェクトとして保存し、同じ方法で保存します。たとえば、ライブラリ プロジェクトのソース コードは、その R クラスを介して独自のリソースにアクセスできます。
ただし、ライブラリ プロジェクトは、独自の .apk に直接コンパイルして Android デバイスで実行できないという点で、標準の Android アプリケーション プロジェクトとは異なります。同様に、真のライブラリの場合とは異なり、ライブラリ プロジェクトを自己完結型の JAR ファイルにエクスポートすることはできません。代わりに、依存アプリケーションでライブラリを参照してそのアプリケーションをビルドすることにより、ライブラリを間接的にコンパイルする必要があります。
ライブラリ プロジェクトに依存するアプリケーションをビルドすると、SDK ツールはライブラリを一時 JAR ファイルにコンパイルし、それをメイン プロジェクトで使用してから、結果を使用して .apk を生成します。アプリケーションとライブラリの両方でリソース ID が定義されている場合、ツールは、アプリケーションで宣言されたリソースが優先され、ライブラリ プロジェクトのリソースがアプリケーションの .apk にコンパイルされないようにします。これにより、アプリケーションは、任意のライブラリで定義されているリソースの動作または値を使用または再定義できる柔軟性が得られます。
コードをさらに整理するために、アプリケーションで複数のライブラリ プロジェクトへの参照を追加し、各ライブラリ内のリソースの相対的な優先度を指定できます。これにより、アプリケーションで実際に使用されるリソースを累積的に構築できます。アプリケーションから参照されている 2 つのライブラリが同じリソース ID を定義している場合、ツールは優先順位の高いライブラリからリソースを選択し、もう一方を破棄します。
ライブラリ プロジェクトへの参照を Android プロジェクトに追加したら、相対的な優先度を設定できます。ビルド時に、ライブラリは、優先度の低いものから順に、一度に 1 つずつアプリケーションとマージされます。
ライブラリ プロジェクトは他のライブラリ プロジェクトを参照でき、通常の方法で外部ライブラリ (JAR) をインポートできます。...」
ライブラリ Rajawali (バージョン 0.9) を使用しているときに、同様の問題が発生しました。ファイルを配布する必要がありました。単一の jar とアプリケーションは、この JAR を使用して 3D 画面を表示します。問題は、私たちのライブラリがライブラリ リソース Rajawali を使用するカスタマイズであったことです。そのため、2 つのプロジェクト構造が作成されました (ライブラリ プロジェクトなど)。生成時。リソースを使用した JAR アプリケーションは、上記で説明した理由で機能しませんでした)、これは、ライブラリがイメージの Rajawali 機能を使用して、ターゲット アプリケーションのバージョンで認識されなかった ID でロードされるためです。
単一の JAR のソリューションは、コードを変更して R.raw.X (Android アプローチ) 経由で Rajawali リソースを使用しないように変更し、フォルダー assets / を使用して、コンポーネントが Rajawali AsseptManager を使用してリソースを開くようにすることで検証できます。ソリューションは、内部アセットとバイトコード ( . Class) および LIB Rajawali を含む JAR フォルダーにエクスポートされました。
Fat-JAR Eclipse PlugIn (または 0.0.31 +) [更新サイト http://kuruczgrafika.de/fatjar] により、単一の JAR を生成し、それをターゲット アプリケーションで使用できます。ANT スクリプトを使用して以下の XML を実行し、JAR ファイルを生成しました。ファイル "lib3d_NAME_HERE.jar" (.JAR) が /build/lib3d_NAME_HERE.jar に生成されます
<?xml version="1.0"?>
<project name="lib3d_NAME_HERE" default="main" basedir=".">
<property name="projectPath" value="D:\Development\lib3d_NAME_HERE"/>
<!-- this file was created by Fat-Jar Eclipse Plug-in -->
<!-- the ANT-Export is in a very early stage, so this -->
<!-- is only experimental, ANT 1.6 or above is -->
<!-- required, feedback is always welcome: -->
<!-- http://sourceforge.net/projects/fjep -->
<!-- uncomment the following lines if using ANT outside Eclipse -->
<!--
<property name="fjepPath" value="reference:file:plugins/net.sf.fjep.fatjar_0.0.31/fatjar.jar"/>
<taskdef name="fatjar.build" classname="net.sf.fjep.anttask.FJBuildTask" classpath="${fjepPath}"/>
<typedef name="fatjar.manifest" classname="net.sf.fjep.anttask.FJManifestType" classpath="${fjepPath}"/>
<typedef name="fatjar.exclude" classname="net.sf.fjep.anttask.FJExcludeType" classpath="${fjepPath}"/>
<typedef name="fatjar.jarsource" classname="net.sf.fjep.anttask.FJJarSourceType" classpath="${fjepPath}"/>
<typedef name="fatjar.filesource" classname="net.sf.fjep.anttask.FJFileSourceType" classpath="${fjepPath}"/>
-->
<!-- uncomment the above lines to use ANT outside of Eclipse -->
<target name="main">
<fatjar.build output="build/lib3d_NAME_HERE.jar">
<fatjar.manifest/>
<fatjar.filesource path="${projectPath}/bin/classes" relpath=""/>
<fatjar.filesource path="${projectPath}/assets/" relpath="assets"/>
</fatjar.build>
</target>
</project>