web-dev-qa-db-ja.com

コマンドラインからAndroidプロジェクトに外部jarライブラリを追加する方法

Androidいくつかの依存関係があるプロジェクトをビルドしようとしています。jarファイルはlib /ディレクトリにあります。これらのjarファイルをクラスパスに追加することでプロジェクトをビルドできますが、もちろんこれらのライブラリが存在しないため、エミュレータで強制的に閉じます。

私はこれをant(not in Eclipse)を使用してコマンドラインから実行しています。コマンドラインからapkにそれらのライブラリを含めるにはどうすればよいですか?

39
Jay K

Jay Kの回答は執筆時点では正しかったが、現在SDKが変更されており、これを行うための新しい方法を次に示します。

次の行をant.propertiesに追加します。

jar.libs.dir=lib

テスト済み、external.libs.dirが機能しない場所で機能します。
それが変更されました 2010年12月 そして2011年10月に再び。

29
Nicolas Raoul

参考までに:現在、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>
12
Panayotis

コンパイル時にこれを行います:

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でもほぼ同じです。

8
Cristian

私自身の質問に答える:

「build.properties」ファイルを作成し、行を追加しました

external.libs.dir=lib

本当にラッキーな推測でした。

7
Jay K

上記の例は正しく機能しません。 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>
6
Akos Cz

ライブラリを$ {basedir}/libsに保存すると、antスクリプトはそれらを見つけることができます。

私は現在のAntスクリプト($ {sdk.dir} /tools/ant/build.xml)を見て、jar.libs.dirを「libs」に定義しています。

参考までに、antスクリプトは十分に文書化されているため、簡単に追跡できます。

Libを移動する場合は、必ず.classpathファイルを編集して、Eclipseユーザーが不必要に苦しむのを防いでください。

3
Peter Kahn

jarを${YOUR_PROJECT}/libsディレクトリ

1
shaobin0604
external.libs.dir=lib

この答えを2時間探したところ、うまくいきました。私のlibsディレクトリーにあるjarファイルが最終的にコンパイルされ、APKにバンドルされます。

1
gpacer68

jar.libs.dirプロパティはsingleディレクトリです。コロン/セミコロンで区切られたリストであるCLASSPATHのようなものではありません。 jar.libs.dirに複数のディレクトリを設定する方法は、直接設定しないことです。デフォルトをlibsにして、libsに移動し、必要な.jarファイルへの必要なソフトリンクを作成します。

0
Scott C Wilson