如何从命令行向android项目添加外部jar库

时间:2010-07-10 02:59:44

标签: android ant jar

我正在尝试构建一个具有一些依赖关系的Android项目。 jar文件位于lib /目录中。我可以通过将这些jar文件添加到我的类路径来构建项目,但当然它在模拟器中强制关闭,因为这些库不存在。

我是在命令行中使用ant(不是在eclipse中)执行此操作。如何从命令行中将它包含在apk中的那些库?

9 个答案:

答案 0 :(得分:29)

Jay K的答案在撰写本文时是正确的,但现在SDK已经改变了,这是实现它的新方法:

将以下行添加到ant.properties

jar.libs.dir=lib

经过测试,适用于external.libs.dir不起作用的地方 这改变了in December 2010,然后在2011年10月再次改变。

答案 1 :(得分:12)

仅供将来参考: 现在SDK中有一个错误,它阻止使用jar.libs.dir: http://code.google.com/p/android/issues/detail?id=33194

再次使用jar.libs.dir(等待修复bug)的简单解决方案是在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>

答案 2 :(得分:8)

编译时请执行以下操作:

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上几乎是一样的。

答案 3 :(得分:7)

回答我自己的问题:

我创建了一个文件“build.properties”并添加了行

external.libs.dir=lib

这是一个幸运的猜测,真的。

答案 4 :(得分:6)

上面的例子非常适合。您无法覆盖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>

答案 5 :(得分:3)

如果您将库存储在$ {basedir} / libs中,则ant脚本将能够找到它们。

我查看了当前的ant脚本($ {sdk.dir} /tools/ant/build.xml),并将jar.libs.dir定义为“libs”。

仅供参考,蚂蚁脚本记录良好,因此很容易追踪。

如果你移动libs,一定要编辑.classpath文件,以防止eclipse用户不必要地遭受痛苦。

答案 6 :(得分:1)

external.libs.dir=lib

在寻找这个答案2小时后,这对我有用。我的libs目录中的jar文件最终编译并与APK捆绑在一起。

答案 7 :(得分:1)

将jar放入${YOUR_PROJECT}/libs目录

答案 8 :(得分:0)

jar.libs.dir属性是单个目录。它不像CLASSPATH,它是以冒号/分号分隔的列表。在jar.libs.dir中拥有多个目录的方法是不直接设置它;让它默认为libs并转到libs并创建所需的.jar文件所需的软链接。