【发布时间】:2011-08-10 01:45:18
【问题描述】:
我的应用程序的proguard.cfg 中有以下代码(是的,我在build.properties 中也有proguard.config=proguard.cfg):
-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 Market 的错误报告在堆栈跟踪中包含 未混淆 符号。
我知道我上传了一个 ProGuard 导出版本,所以我错过了什么?
【问题讨论】:
-
您真的在使用 ProGuard 进行构建吗?拥有该文件是不够的。您应该能够在构建日志中看到 ProGuard。您应该能够查看构建的应用程序并看到它被混淆了。
-
@ThomasW 是的,我是。我的项目中有一个
proguard文件夹,其中包含 4 个文件:dump.txt、mapping.txt、seeds.txt和usage.txt。文件mapping.txt显示绝大多数符号被混淆为单个字母,除了几个类,例如 Activity 类和 Preferences 类。我现在注意到proguard.cfg有-keep的声明。这可能是原因吗? +1 回复。 -
是的,为了让您的应用程序正常工作,某些类需要保持不混淆。例如,视图类需要保持不变,以便使用 xml 文件进行布局。与需要特定类或方法名称的其他代码交互的部分代码不能被混淆。可以混淆的是您内部使用的代码。也许这就是你所看到的?
标签: android google-play proguard