看起来问题是因为您项目中的所有类文件和 JAR 文件在 DEXing 之前打包在一起。这可能并不完全正确,但事实证明,在我们的项目中控制这一点的任何方式都非常困难。即使删除最初导致此问题的内容,清理和重建也无法以一致的方式为我们解决问题。
因此,我们借此机会将项目切换到 Android Studio,并通过启用 ProGuard 进行调试构建来解决问题。更准确地说,我们只使用 ProGuard 处理链的收缩阶段。
Gradle 可以很容易地为调试构建打开 ProGuard:
buildTypes {
debug {
runProguard true
proguardFile 'proguard-project-debug.txt'
}
}
这是我们使用的调试 ProGuard 配置:
-keep class com.your.code.**
# Use -keep to explicitly keep any other classes shrinking would remove
-dontoptimize
-dontobfuscate
-ignorewarnings
这确实增加了项目的构建时间,但好的一面是调试器仍然可以工作。
我能想到的唯一更快的选择是手动删除任何 JAR 文件中未使用的类文件。但这不仅很难做到,而且当您以后想要使用库的稍大部分时也很不方便。
我希望这可以帮助其他解决此问题的开发人员。也许将来谷歌可以改进默认进行这种修剪的编译器。我们的 APK DEX 文件从 8MB 变为 2.9MB。
较新的 gradle (1.0.0+) 版本
在较新版本的 Android Studio (1.0+) 中,捆绑的 Gradle 得到了更新。构建机制的工作方式发生了一些变化,因此您的项目 Gradle 文件现在可以利用 minifyEnabled 和 shrinkResources 参数。当前版本是 1.1.0。
在 Android 等快速发展的平台上跟上变化需要付出努力,但通常会获得新功能、工具和更快的构建时间。因此,更新 Android Studio 并(仔细)更新您的项目是值得您投入时间的。
buildTypes {
debug {
proguardFile 'proguard-project-debug.txt'
minifyEnabled true
shrinkResources true
}
}