【问题标题】:Building with ProGuard ignores android.app.* classes使用 ProGuard 构建会忽略 android.app.* 类
【发布时间】:2012-08-30 20:11:24
【问题描述】:

我是第一次使用 ProGuard。我在项目的根包中拥有我所有的活动、片段、列表片段等(我试图移动它们但没有任何区别)。我使用标准的proguard-android.txt 加上proguard-project.txt 我可以放任何我想要的东西,这对这些类没有影响,因为它们只是被忽略了。

它们没有在usage.txtseeds.txtmapping.txtdump.txt 中列出,并且它们不在 dex 中(虽然库类似乎得到了正确处理)。

我尝试使用-keep public class <my.project.rootpackage>.MyActivity 为每个被忽略的课程提供一个,以及许多其他内容,最后一个是:

-dontshrink
-dontoptimize
-dontobfuscate

-keep public class * extends android.app.Application
-keep public class * extends android.support.v4.app.FragmentActivity
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.support.v4.app.ListFragment
-keep public class * extends android.preference.PreferenceActivity

我可以在学习时使用一个更简单的项目,但我不明白为什么它不应该工作,毕竟 ProGuard 似乎可以很好地处理这些库。当然,项目在调试模式下运行良好。

ProGuard 更新到 v4.8,Eclipse 3.7.2,ADT 和 SDK 更新,项目目标 API 15,ProGuard 没有消息。

我错过了什么?我承认我从来没有清楚的构建过程。我必须学习 Ant 吗?

编辑:当它不工作时(即ProGuard 以错误结束),我经常会得到这种错误:

警告:my.project.package.ClassA:找不到引用的类 my.project.package.ClassB

请注意,这两个类也可以在同一个包中。

【问题讨论】:

  • 您是在进行发布构建还是调试构建? ProGuard 在进行调试构建时不运行,仅用于发布。
  • @twaddington 发布版本,ProGuard 适用于其他类。只是我说的那些被跳过了。

标签: android proguard


【解决方案1】:

因此,被忽略的类似乎是由于“自动构建”功能阻止了 ProGuard 完成其工作。如果未选中,“导出签名的应用程序包”过程会顺利进行,但 ProGuard 不会混淆/缩小。但这又引出了另一个问题。

参考:Why start using -libraryjars when I never needed it before?

...编辑:实际上只是项目bin 中的apk 没有被缩小。导出的 APK 没问题。真是一场冒险。

【讨论】:

    猜你喜欢
    • 2013-03-12
    • 2019-01-12
    • 1970-01-01
    • 2015-09-16
    • 2013-11-02
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 2018-09-22
    相关资源
    最近更新 更多