在 Eclipse 中的 Android dex'ing 之前始终运行 proguard

Posted

技术标签:

【中文标题】在 Eclipse 中的 Android dex\'ing 之前始终运行 proguard【英文标题】:Always running proguard before Android dex'ing in Eclipse在 Eclipse 中的 Android dex'ing 之前始终运行 proguard 【发布时间】:2012-07-04 11:31:38 【问题描述】:

有没有办法让 Eclipse 在尝试运行 android 应用程序时始终在 dex'ing 之前运行 proguard?例如以某种方式将其作为构建步骤无缝插入?

默认情况下它会在导出时运行,但我需要它始终运行,即使在例如只需从菜单/键盘执行正常的“运行”或“调试”。


就上下文而言,这是相关的原因是我遇到了“操作码太多/没有扩展的操作码”(http://code.google.com/p/android/issues/detail?id=26203 ) 我在 Eclipse 中构建的问题。对于 ant 构建来说这不是问题,因为它们运行 proguard,它会剥离所有未使用的代码。到目前为止,我一直在手动从第三方依赖项中删除未使用的东西,但这有点荒谬。

另外,作为一个附带的好处,它应该会显着加快我的构建速度,因为仅收缩的 proguard 运行方式比 dex'ing 快得多,并且它会删除大部分需要 dex'ed 的代码。

【问题讨论】:

【参考方案1】:

此行为在 Android 开发工具中的 Eclipse 插件构建器中进行了硬编码。您可以调整其源代码 (Android Tools),使构建器的行为更像导出向导(或者在内部,BuildHelper 类的行为更像 ExportHelper 类)。不过,维护起来可能不是很有趣。

或者,您可以从 Eclipse 运行 Ant。

另外,ProGuard 的商业闭源兄弟DexGuard 集成了 ProGuard 和 dx(以及 apkbuilder、jarsign、zipalign)的功能。它可以配置为在 Eclipse 和 Ant 中为调试/发布构建收缩/混淆/优化。

(我是 ProGuard 和 DexGuard 的开发者)

【讨论】:

ProGuard 已经是我们软件的演示,但如果您有任何问题,请随时与我们联系。 那么,如果我们使用DexGuard,我们可以通过点击一个按钮来使用它,而无需将应用程序导出到apk并传输到设备吗? @frankish 是的,你确实可以。 @EricLafortune 您能否在回答中详细说明如何使用 proguard 和 dexguard 配置 eclipse-/android-project 以启用缩小调试构建?我刚刚购买了 dexguard,它似乎并没有通过安装 dexgaurd 来缩小调试构建。我使用的是 6.0.26 版本。 没关系,我刚刚注意到 Eclipse 首选项中的 DexGuard 选项。我有另一个关于 DexGuard 的问题,但会发布一个专门的问题。谢谢!

以上是关于在 Eclipse 中的 Android dex'ing 之前始终运行 proguard的主要内容,如果未能解决你的问题,请参考以下文章

在 Eclipse 中生成 APK 时出现“未找到 DEX 文件”错误

手机或平板电脑上的 android.jar 平台类/dex 文件在哪里?

Android 中的 .dex 文件是啥?

Unable to execute dex: GC overhead limit exceeded

Android 多个DEX错误 Multiple dex files define Landroid/support/v7/app/ActionBar$DisplayOptions;

Gradle 中的 dex 是啥