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

Jay*_*y K 39 ant android jar

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

我是从命令行使用ant(不是在eclipse中)这样做的.如何从命令行中将它包含在apk中?

Nic*_*oul 29

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

将以下行添加到ant.properties:

jar.libs.dir=lib
Run Code Online (Sandbox Code Playgroud)

经过测试,适用于external.libs.dir不起作用的地方.
在2010年12月发生了变化,然后在2011年10月发生了变化

  • 我如何声明多个目录?什么是分离器? (6认同)

Pan*_*tis 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>
Run Code Online (Sandbox Code Playgroud)


Cri*_*ian 8

在编译时这样做:

javac -encoding ascii -target 1.5 -d bin/classes \
-bootclasspath $SDKDIR/android.jar src/some/project/* -classpath=libs/*.jar
Run Code Online (Sandbox Code Playgroud)

而且,当您为Dalvik生成字节码时:

dx --dex --output=bin/classes.dex bin/classes libs/*.jar
Run Code Online (Sandbox Code Playgroud)

此外,当您打包APK文件时:

apkbuilder bin/something.apk -z bin/projectname.ap_ \
-f bin/classes.dex -rf src -rj libs
Run Code Online (Sandbox Code Playgroud)

我假设你使用Linux ...在Windows上几乎是一样的.


Jay*_*y K 7

回答我自己的问题:

我创建了一个文件"build.properties"并添加了该行

external.libs.dir=lib
Run Code Online (Sandbox Code Playgroud)

这真是一个幸运的猜测.


Ako*_* Cz 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>
Run Code Online (Sandbox Code Playgroud)