Android:使用 Ant Release 构建 apk 时出现问题
Posted
技术标签:
【中文标题】Android:使用 Ant Release 构建 apk 时出现问题【英文标题】:Android: Problems building apk with Ant Release 【发布时间】:2011-11-04 06:02:35 【问题描述】:我在 Eclipse 中构建我的应用程序没有问题,但是一旦我尝试通过 ant 进行构建,它就无法构建。我用过“android更新项目-p”。生成 build build.xml 和 proguard.cfg 文件。我尝试了“ant compile”,它也构建得很好。该应用程序包含一个 android 库,如果需要,它还具有外部库。当我尝试执行“ant release”时,这里的任何人都会打印出错误,
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.util.ExceptionWithContext
at com.android.dx.util.ExceptionWithContext.withContext(ExceptionWithContext.java:46)
at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:340)
at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:131)
at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:85)
at com.android.dx.command.dexer.Main.processClass(Main.java:369)
at com.android.dx.command.dexer.Main.processFileBytes(Main.java:346)
at com.android.dx.command.dexer.Main.access$400(Main.java:59)
at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:294)
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:134)
at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:190)
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:122)
at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:190)
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:122)
at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:190)
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:122)
at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:190)
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:122)
at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:190)
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:122)
at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:108)
at com.android.dx.command.dexer.Main.processOne(Main.java:313)
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:233)
at com.android.dx.command.dexer.Main.run(Main.java:185)
at com.android.dx.command.dexer.Main.main(Main.java:166)
at com.android.dx.command.Main.main(Main.java:90)
Caused by: java.lang.NullPointerException
at com.android.dx.cf.code.ConcreteMethod.<init>(ConcreteMethod.java:84)
at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:243)
... 23 more
我现在很困惑,所以希望有人能解释一下。
【问题讨论】:
在构建过程中发生这种情况的一些上下文会有所帮助。具体来说,在错误之前运行了哪些 ant 任务(如果有)。另外,你试过ant debug
吗?
ant 构建日志会有所帮助。
还有安装什么版本的android工具,以及项目的种类和大小的一些信息
您的 build.xml 文件是什么样的? (在你运行“android update project -p”之后。)如果你有外部依赖和库,这个文件并不总是自动正确生成。您还确定您在正确的上下文中运行此命令吗?您项目的***目录?
【参考方案1】:
仔细阅读此页面:
http://developer.android.com/tools/projects/projects-cmdline.html
您可以尝试以下解决方案之一:
1) 单行命令
android update project -p --subprojects
2) 更新主项目和库项目的build.xml文件:
android update lib-project --path myPath/Lib
android update project --name android_app --path . --library myPath/Lib
在 1) 或 2) 之后
ant clean
ant release
【讨论】:
【参考方案2】:我认为我在this page 上的回答也适用于这个错误。 当您在死代码中初始化匿名类时会发生这种情况。
为什么它只会在发布而不是在调试中发生的一个解释是,在优化时会删除死代码。
【讨论】:
以上是关于Android:使用 Ant Release 构建 apk 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
Android 项目使用 Ant 构建良好,但出现运行时错误
如何使用 Ant 构建 Android 示例项目? build.xml 不存在
对于android中的代码混淆,当我给出命令“ant release”时出现以下错误。我搜索了所有但找不到解决方案