我维护一个Android应用程序,不使用Eclipse。我没有使用Eclipse。我用的是ant
, build.xml
和build.properties
。
我已经把.jar文件放到了lib/目录中。我的代码编译得很好。但是当我在模拟器上运行它时,输出APK不包括.jar,所以我得到一个运行时堆栈跟踪:
ERROR/AndroidRuntime(470): java.lang.NoClassDefFoundError: com.google.ads.AdView
我的build.properties
看起来像这样:
jar.libs.dir=libs
libs/目录包含我的。jar文件。
build.xml中需要哪些内容才能使外部.jar文件包含在APK中?
编辑:理论上这个答案应该有效,但它不适合我。它过时了吗?到底发生了什么事?如何从命令行
我刚刚遇到了一个类似的问题,并注意到库不应该放在"myprojectdirlib"中。当我将它们移动到"myprojectdirlibs"时,一切都开始工作了。
事实证明,我需要将我使用的ant
版本升级到1.8。在编译过程中,我得到了这个错误消息:
警告:引用out.dex.jar.input.ref没有在运行时设置,但在构建文件解析时发现,试图解析。未来Ant版本可能支持在非执行中定义的引用id目标。
我用谷歌搜索了一下,发现我需要升级Ant,现在我没有收到这个警告,我的应用程序也没有强制关闭。
build.xml中需要哪些内容才能使外部.jar文件包含在APK中?
只要把它放在libs/
就足够了。
我的构建。属性看起来像这样:
那一行应该是不必要的。它没有出现在我的build.properties
文件中,用JAR文件成功构建。
如果您从项目的bin/
目录中使用dexdump -f classes.dex
,您将能够确定com.google.ads.AdView
是否在那里。如果没有,那么您的构建脚本就有问题了。如果是这样,那么可能您缺少了一个依赖的JAR(尽管我希望在这种情况下有一个VerifyError
)。
你使用第三方库,但你似乎没有在上面运行DX。确保不仅你的代码是由DX工具处理的(我假设Ant是这样做的),而且你使用的所有第三方库也是如此。你可以看看7Bee脚本,我用它来转换web应用程序到Android davlik格式,所以它也可以为你工作。您可以在Atjeews页面上找到更多关于该脚本的信息。
解决方案:
- 右键单击项目树中的项目,选择项目属性
- 选择Java Build Path
- 选择TAB Order和出口
- 检查GoogleAdMobAdsSdk-4.0.4.jar(或您的版本SDK)
- 按OK
- 按菜单清理项目——>清洁
- 重建项目(项目-自动构建)