Androidいくつかの依存関係があるプロジェクトをビルドしようとしています。jarファイルはlib /ディレクトリにあります。これらのjarファイルをクラスパスに追加することでプロジェクトをビルドできますが、もちろんこれらのライブラリが存在しないため、エミュレータで強制的に閉じます。
私はこれをant(not in Eclipse)を使用してコマンドラインから実行しています。コマンドラインからapkにそれらのライブラリを含めるにはどうすればよいですか?
Jay Kの回答は執筆時点では正しかったが、現在SDKが変更されており、これを行うための新しい方法を次に示します。
次の行をant.properties
に追加します。
jar.libs.dir=lib
テスト済み、external.libs.dirが機能しない場所で機能します。
それが変更されました 2010年12月 そして2011年10月に再び。
参考までに:現在、SDKにはjar.libs.dirの使用を妨げるバグがあります: http://code.google.com/p/Android/issues/detail?id=33194
Jar.libs.dirを再度使用する簡単な解決策(バグが修正されるのを待つ間)は、このターゲットをbuild.xmlファイルに追加することです。
<target name="-pre-compile">
<path id="project.all.jars.path">
<path path="${toString:project.all.jars.path}"/>
<fileset dir="${jar.libs.dir}">
<include name="*.jar"/>
</fileset>
</path>
</target>
コンパイル時にこれを行います:
javac -encoding ascii -target 1.5 -d bin/classes \
-bootclasspath $SDKDIR/Android.jar src/some/project/* -classpath=libs/*.jar
そして、Dalvikのバイトコードを生成しているとき:
dx --dex --output=bin/classes.dex bin/classes libs/*.jar
また、APKファイルをパッケージ化する場合:
apkbuilder bin/something.apk -z bin/projectname.ap_ \
-f bin/classes.dex -rf src -rj libs
Linuxを使用していると思います... Windowsでもほぼ同じです。
私自身の質問に答える:
「build.properties」ファイルを作成し、行を追加しました
external.libs.dir=lib
本当にラッキーな推測でした。
上記の例は正しく機能しません。 project.all.jars.pathをインラインで上書きすることはできません。以下は実際の例です。
<target name="-pre-compile">
<!-- HACK to add the Android-support-v4.jar to the classpath directly from the SDK -->
<echo>ORIGINAL jars.path : ${toString:project.all.jars.path}</echo>
<path id="project.all.jars.path.hacked">
<path path="${toString:project.all.jars.path}"/>
<path path="${sdk.dir}/extras/Android/support/v4/Android-support-v4.jar"/>
</path>
<path id="project.all.jars.path">
<path path="${toString:project.all.jars.path.hacked}"/>
</path>
<echo>HACKED jars.path : ${toString:project.all.jars.path}</echo>
</target>
ライブラリを$ {basedir}/libsに保存すると、antスクリプトはそれらを見つけることができます。
私は現在のAntスクリプト($ {sdk.dir} /tools/ant/build.xml)を見て、jar.libs.dirを「libs」に定義しています。
参考までに、antスクリプトは十分に文書化されているため、簡単に追跡できます。
Libを移動する場合は、必ず.classpathファイルを編集して、Eclipseユーザーが不必要に苦しむのを防いでください。
jarを${YOUR_PROJECT}/libs
ディレクトリ
external.libs.dir=lib
この答えを2時間探したところ、うまくいきました。私のlibsディレクトリーにあるjarファイルが最終的にコンパイルされ、APKにバンドルされます。
jar.libs.dir
プロパティはsingleディレクトリです。コロン/セミコロンで区切られたリストであるCLASSPATHのようなものではありません。 jar.libs.dirに複数のディレクトリを設定する方法は、直接設定しないことです。デフォルトをlibs
にして、libsに移動し、必要な.jarファイルへの必要なソフトリンクを作成します。