Proguard 不混淆 Class 名称,只混淆方法
Proguard doesnt obfuscate Class name, only methods are obfuscated
我尝试在 android studio 中使用 Proguard,但似乎 Proguard 没有混淆 class 名称,例如,我的应用程序结构和配置:
和配置
但是当我尝试在应用程序中触发异常时:
ADB 控制台中列出异常:
只有方法被混淆了,MainActivity.class没有
这是预期的行为,因为 class 是 activity!
AndroidManifest.xml 中提到的所有 classes 必须保留它们的名称(活动、服务、提供者、接收者、应用程序、仪器)。否则系统将无法找到它们。
Gradle build 会自动为您的 ProGuard 配置生成一些规则以实现此目的。它扫描 AndroidManifest.xml 并为在那里找到的每个 class 添加规则。
如果您想查看所有使用的规则,请将此行添加到您的 ProGuard 规则中:
-printconfiguration "build/outputs/mapping/configuration.txt"
它将创建包含所有规则的 configuration.txt
文件。
应该是这样的:
# view AndroidManifest.xml #generated:50
-keep class com.github.browep.proguard.MainActivity {
<init>(...);
}
我遇到了同样的问题,
为 Gradle 更新我的 Android 插件后,Proguard 停止混淆我的实用程序和其他 class 文件。
经过几次搜索,我发现Android studio gradle now uses newer version of Proguard。
并且根据此 ,其中指出:
proguard 自动添加特定于 android/google 包的规则。
因此,在我的应用中更改了一些规则后,Proguard 再次混淆了 class 名称。
老proguard-rules.pro:
#support-v4
#@link
-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }
#support-v7
-dontwarn android.support.v7.**
-keep class android.support.v7.** { *; }
#
-keep class !android.support.v7.view.menu.**
-keep interface android.support.v7.* { *; }
#support design
#@link
-dontwarn android.support.design.**
-keep class android.support.design.** { *; }
-keep interface android.support.design.** { *; }
-keep public class android.support.design.R$* { *; }
#error : Note: the configuration refers to the unknown class 'com.google.vending.licensing.ILicensingService'
#solution : @link
-dontnote com.google.vending.licensing.ILicensingService
-dontnote **ILicensingService
#updating to Gradle 2.14.1 caused error :
-keepattributes EnclosingMethod
#render script
#@link
-keepclasseswithmembernames class * { native <methods>; }
-keep class android.support.v8.renderscript.** { *; }
新混淆器-rules.pro:
#
#
-keep class android.support.** { *; }
-keep interface android.support.** { *; }
我尝试在 android studio 中使用 Proguard,但似乎 Proguard 没有混淆 class 名称,例如,我的应用程序结构和配置:
和配置
但是当我尝试在应用程序中触发异常时:
ADB 控制台中列出异常:
只有方法被混淆了,MainActivity.class没有
这是预期的行为,因为 class 是 activity!
AndroidManifest.xml 中提到的所有 classes 必须保留它们的名称(活动、服务、提供者、接收者、应用程序、仪器)。否则系统将无法找到它们。
Gradle build 会自动为您的 ProGuard 配置生成一些规则以实现此目的。它扫描 AndroidManifest.xml 并为在那里找到的每个 class 添加规则。
如果您想查看所有使用的规则,请将此行添加到您的 ProGuard 规则中:
-printconfiguration "build/outputs/mapping/configuration.txt"
它将创建包含所有规则的 configuration.txt
文件。
应该是这样的:
# view AndroidManifest.xml #generated:50
-keep class com.github.browep.proguard.MainActivity {
<init>(...);
}
我遇到了同样的问题,
为 Gradle 更新我的 Android 插件后,Proguard 停止混淆我的实用程序和其他 class 文件。
经过几次搜索,我发现Android studio gradle now uses newer version of Proguard。
并且根据此
因此,在我的应用中更改了一些规则后,Proguard 再次混淆了 class 名称。
老proguard-rules.pro:
#support-v4
#@link
-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }
#support-v7
-dontwarn android.support.v7.**
-keep class android.support.v7.** { *; }
#
-keep class !android.support.v7.view.menu.**
-keep interface android.support.v7.* { *; }
#support design
#@link
-dontwarn android.support.design.**
-keep class android.support.design.** { *; }
-keep interface android.support.design.** { *; }
-keep public class android.support.design.R$* { *; }
#error : Note: the configuration refers to the unknown class 'com.google.vending.licensing.ILicensingService'
#solution : @link
-dontnote com.google.vending.licensing.ILicensingService
-dontnote **ILicensingService
#updating to Gradle 2.14.1 caused error :
-keepattributes EnclosingMethod
#render script
#@link
-keepclasseswithmembernames class * { native <methods>; }
-keep class android.support.v8.renderscript.** { *; }
新混淆器-rules.pro:
#
#
-keep class android.support.** { *; }
-keep interface android.support.** { *; }