我的应用程序proguard.cfg
中有以下代码(是的,我在proguard.config=proguard.cfg
中也有build.properties
):
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
然而,我很惊讶地看到来自Android电子市场的错误报告在堆栈跟踪中包含未经模糊处理的符号。
我知道我上传了一个ProGuard导出版本,所以我错过了什么?
答案 0 :(得分:2)
如果您的堆栈跟踪包含proguard.cfg
中proguard/mapping.txt
语句中指定的未经模糊处理的类名称和方法,那么答案就在您的问题正文中......
另请注意,由于--keep带来的挑战,ProGuard会自动保留以下内容:
另外reflection如果您以某种方式提供ProGuard生成的文件{{1}},则工具note可以取消对所有内容的混淆。
简而言之,您不需要在proguard.cfg中添加任何内容来启用模糊处理。默认选项就足够了。从理论上讲,您可能希望删除一些默认的--keep选项,但ProGuard的文档明确指出:
为了获得正确的结果,你至少应该对此有所了解 您正在处理的代码。混淆执行大量代码的代码 反射可能需要反复试验,尤其是没有 关于代码内部的必要信息。