【发布时间】:2012-08-30 20:11:24
【问题描述】:
我是第一次使用 ProGuard。我在项目的根包中拥有我所有的活动、片段、列表片段等(我试图移动它们但没有任何区别)。我使用标准的proguard-android.txt 加上proguard-project.txt 我可以放任何我想要的东西,这对这些类没有影响,因为它们只是被忽略了。
它们没有在usage.txt、seeds.txt、mapping.txt 或dump.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 适用于其他类。只是我说的那些被跳过了。