我正在尝试在我的 Android 项目上启用 proguard 代码混淆。这些年来,我看到了很多问题,但是许多线程都已经很老了,很难说它们对我有多重要。
我无法让 Eclipse 生成默认的 proguard 配置文件,所以我一直在尝试拼凑一个,这很痛苦(我从中获得的构建几乎立即崩溃,并且似乎掩盖了我使用的 3rd 方库的一些元素在应用程序中)。我可以理解生成的文件现在可能是完美的,但似乎它至少可以在正确处理项目库方面有所突破。
这是我尝试启用 proguard 所采取的步骤。
1 确保我的 Eclipse 和 Android SDK 是最新的。
2 编辑project.properties,取消注释
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
3 由于 pro guard-project.txt 不存在,立即构建失败。(这是我希望它会生成一个的地方)
4 我在 proguard-project.txt 中创建了自己的 proguard.config 文件(内容如下所示)
-injars bin/classes -outjars bin/classes-processed.jar -libraryjars libs/FlurryAgent.jar:libs/GoogleAdMobAdsSdk-4.1.1.jar -libraryjars libs/commons-codec-1.4.jar -libraryjars libs/commons-io- 2.1.jar -libraryjars libs/commons-logging-1.1.1.jar -libraryjars libs/httpclient-4.1.2.jar -libraryjars libs/httpclient-cache-4.1.2.jar -libraryjars libs/httpcore-4.1.3。 jar -libraryjars libs/httpmime-4.1.2.jar -libraryjars libs/mapquest-android-sdk-1.0.3.jar -libraryjars libs/oranjestad-notifications-1.0.jar
-dontwarn org.apache.** -dontwarn org.ietf.*
-keepnames org.apache.**
-dontpreverify -repackageclasses '' -allowaccessmodification -optimizations !code/simplification/arithmetic -keepattributes注解
-keep 公共类 * 扩展 android.app.Activity -keep 公共类 * 扩展 android.app.Application -keep 公共类 * 扩展 android.app.Service -keep 公共类 * 扩展 android.content.BroadcastReceiver -keep 公共类 * 扩展android.content.ContentProvider
-保持公共类 * 扩展 android.view.View { public (android.content.Context); 公共(android.content.Context,android.util.AttributeSet);公共(android.content.Context,android.util.AttributeSet,int);公共无效集*(...);}
-keepclasseswithmembers 类 * { public (android.content.Context, android.util.AttributeSet); }
-keepclasseswithmembers 类 * { public (android.content.Context, android.util.AttributeSet, int); }
-keepclassmembers 类 * 扩展 android.content.Context { public void *(android.view.View); 公共无效*(android.view.MenuItem);}
-keepclassmembers 类 * 实现 android.os.Parcelable { 静态 android.os.Parcelable$Creator CREATOR; }
-keepclassmembers 类 * .R$ { public static ; }
5 此时我的项目已构建,但由于日志记录的某些类强制转换异常而失败。这让我回到第 3 步,我希望基于 eclipse 库依赖项生成一个合理的 proguard-project.txt。显然,我创建的 on 是不正确的。