【问题标题】:Running Android app from Eclipse after setting up for obfuscation设置混淆后从 Eclipse 运行 Android 应用程序
【发布时间】:2014-11-27 17:46:01
【问题描述】:

所以,这可能是有史以来最愚蠢的问题,但我想不通。

我将项目设置为在导出 APK 时使用 Proguard 混淆。几周后,我在这里对我的应用程序进行了一些更改以准备更新,然后我右键单击我的项目并执行 Run As -> Android Application,就像我在测试时经常做的那样。

我很惊讶地看到 java.lang.NoClassDefFoundError 出现在我的 main 方法的第一行,它引用了混淆代码。该代码在 Eclipse 中编译,但是当使用 Run As -> Android Application 运行时,它会立即崩溃。

但是,如果我从 Eclipse 导出一个 APK 并手动将其安装到我的手机上,该应用程序运行良好!由于混淆,导出需要相当长的时间,而我每次我想测试更改时都等待它是一种痛苦。

所以我很确定这与混淆、Proguard 和 Eclipse 构建过程有关。但我不确定到底出了什么问题,或者什么时候出了问题。

我尝试清理项目,尝试从 project.properties 文件中删除“proguard.config=proguard.cfg”。 在某个地方,我的项目发生了与混淆相关的事情,导致我的应用无法在不导出 APK 的情况下运行。这是什么原因造成的?

我的印象是执行 Run As -> Android Application 不会调用 Proguard。那到底是怎么回事?

(注意:使用“Debug As”而不是“Run As”会发生同样的事情)

编辑 1

我尝试在 project.properties 中注释掉 proguard.config 行,清理项目并重新构建它。同样的问题。

此外,我尝试重命名/删除 proguard.cfg,但问题仍然存在。 这让我想到,也许这不是一个与混淆相关的问题,而是一个项目设置问题?但是,当我运行为 -> Android 应用程序时,导出 APK 但崩溃时它怎么能工作?没有意义。

编辑 2

解决方案在对已接受答案的评论中。感谢您让我走上正确的道路!

【问题讨论】:

    标签: java eclipse proguard obfuscation


    【解决方案1】:

    我建议你 disable proguard 除非你正在做一个发布版本。当您禁用/启用 proguard 时,您将需要 Project > Clean(如果您没有选中 Project > Build Automatically,则重新构建;Project -> BuildCTRL-B )。

    【讨论】:

    • 我似乎没有像您链接中的建议那样的 build.properties 文件。我试着像这样评论它:“# proguard.config=proguard.cfg”。然后我清理了项目并重建了它,但问题仍然存在。
    • @WillTice 你最初是如何启用 proguard 的?
    • 我通过添加行 proguard.config=proguard.cfg 来启用它。你让我想到,也许不是 Proguard 在不应该运行的时候运行,而是当使用 Proguard 构建时,它正在做一些它不正常做的额外事情。我现在正在调查这个,我认为这可能是我在 proguard.cfg 中的 -injars 行。
    • 谢谢,你帮我弄清楚了!所以这就是问题所在。我的 Android 项目设置为依赖于另一个项目。在 Project Properties -> Java Build Path -> Order and Export 面板中,我必须取消选中另一个项目的依赖项,以便 Proguard 可以混淆它,使用 -injars 命令包含它。这就是 Proguard 工作但 Run As 没有工作的原因。解决方案是在调试时简单地选中该框,并在我使用 Proguard 导出时取消选中它。 (告诉过你这可能是一个愚蠢的问题!)我还必须清理项目并在执行此操作后重建它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多