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 自定义构建

如何使用 Ant 构建 Android 示例项目? build.xml 不存在

对于android中的代码混淆,当我给出命令“ant release”时出现以下错误。我搜索了所有但找不到解决方案

无法使用 Ant 从外部 jar 构建多个 Android dex 文件

Android自动化构建之Ant多渠道打包实践(上)