如何从命令行添加外部jar库到一个android项目

我试图build立一个Android项目,有一些依赖。 jar文件位于lib /目录中。 我可以通过将这些jar文件添加到我的类path来构build项目,但是当然它强制closures模拟器,因为这些库不存在。

我正在从ant的命令行( 而不是在Eclipse中)这样做。 我怎样才能让它从命令行包含apk中的库?

Jay K的回答在写作的时候是正确的,但现在SDK已经改变了,下面是新的方法:

ant.properties添加到ant.properties

 jar.libs.dir=lib 

经过testing,在external.libs.dir不起作用的地方工作。
这在2010年12月和2011年10月再次发生了变化。

仅供将来参考:现在,SDK中存在一个防止使用jar.libs.dir的bug: http : //code.google.com/p/android/issues/detail? id=33194

再次使用jar.libs.dir的一个简单的解决scheme是(在等待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> 

在编译时这样做:

 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了一个文件“build.properties”并添加了该行

 external.libs.dir=lib 

真是一个幸运的猜测。

上面的例子不是很有效。 你不能用inline覆盖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脚本将能够find它们。

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

仅供参考,ant脚本是很好的文档,所以很容易追踪。

如果你移动库文件,一定要编辑你的.classpath文件,以防止eclipse用户受到不必要的损失。

 external.libs.dir=lib 

经过2个小时的search这个答案,这为我工作。 我的libs目录中的jar文件最终编译AND与APK捆绑在一起。

把jar子放在${YOUR_PROJECT}/libs目录下

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