5

更新到 ADT 20 后,我无法再成功导出任何 Android 项目。我得到:

Proguard returned with error code 1. See console

在控制台中,我收到大量can't find referenced class警告,偶尔还会收到can't find superclass or interface警告。在警告结束时,我得到如下信息:

    You should check if you need to specify additional program jars.
Warning: there were 199 unresolved references to classes or interfaces.
    You may need to specify additional library jars (using '-libraryjars').
java.io.IOException: Please correct the above warnings first.
 at proguard.Initializer.execute(Initializer.java:321)
 at proguard.ProGuard.initialize(ProGuard.java:211)
 at proguard.ProGuard.execute(ProGuard.java:86)
 at proguard.ProGuard.main(ProGuard.java:492)

每次我尝试构建时,都会收到不同数量的警告(不是很一致)。此外,当我在导出前执行清理时,导出完成时不会产生任何警告,但生成的 APK 在启动时经常崩溃,原因是ClassNotFoundException.

Myproguard-project.txt包括 Android 支持库和 ActionBarSherlock 的必要-keep class规则。

我在 ADT 20 之前构建这个项目没有任何问题。我什至尝试构建我的最后一个版本(当我发布它时它显然构建得很好),但我得到了相同的 proguard 警告和失败的导出。

我已经尝试像许多其他 SO 问题所建议的那样添加-libraryjars和/或-dontwarn规则,但无济于事。它有时会成功构建,但 APK 在启动时会导致崩溃。

有什么建议么?

4

3 回答 3

5

AAPT 中有一个错误,它只会处理

<fragment android:name"..." />

但不是

<fragment class="..." />

我们将修复 AAPT,但同时您可以使用其他属性并且它会起作用。

于 2012-07-18T23:47:11.073 回答
4

在 ADT 20 中,我们使用 aapt 的一个特性(参见 -G 标志),它可以创建一个 proguard 文件,其中包含代码使用的自定义视图的确切规则。

旧的 proguard 配置文件将保留所有视图。当您使用诸如兼容性库之类的库项目时,您可能只使用了可用代码的一小部分,这最终可能会包含很多您不需要的东西。通过删除通用保留规则并根据您的应用程序添加新的保留文件,您的 .apks 将变得更小,因为可以删除许多未使用的内容。

如果您更新到工具 20(因此您有新的较小的 proguard-android.txt 文件)并且您继续使用 ADT 18,则可能会出错的一个区域。确保使用 ADT 20,因为它不会添加只是在 project.properties 设置中指定的 proguard 文件,但生成的 proguard 文件也列出了来自 aapt -G 的保留文件。我相信 ant 构建也将使用 -G 功能。

(注意 - 请参阅http://code.google.com/p/android/issues/detail?id=35107了解任何后续行动)

于 2012-07-17T22:41:26.633 回答
0

据报道,最近更新 ADT 中的 Eclipse 插件存在问题,该插件无法正确重新编译所有源代码。在这种情况下,ProGuard 将打印出有关您的程序类(而不是库类)的警告。您应该检查导出(和​​生成的应用程序)是否在没有 ProGuard 的情况下工作。您还应该检查 Ant 构建是否有效(“ant release”)。那可能是一种解决方法。

于 2012-07-14T22:48:28.167 回答