Proguard不会混淆类名,只有方法被混淆

时间:2016-03-18 06:39:03

标签: android proguard android-proguard

我尝试在android studio中使用Proguard,但似乎Proguard并没有混淆类名,例如,我的app结构和配置:

enter image description here

和配置

enter image description here

但是当我尝试在应用程序中触发异常时:

enter image description here

ADB控制台中列出了异常:

enter image description here

只有方法被混淆,MainActivity.class不是

2 个答案:

答案 0 :(得分:10)

这是预期的行为,因为该类是活动

AndroidManifest.xml 中提到的所有类都必须保留其名称(活动,服务,提供程序,接收器,应用程序,工具)。否则系统无法找到它们。

Gradle build会自动为您的ProGuard配置生成一些规则来实现此目的。它扫描AndroidManifest.xml并为在那里找到的每个类添加规则。

如果要查看所有使用的规则,请将此行添加到ProGuard规则中:

-printconfiguration "build/outputs/mapping/configuration.txt"

它将创建包含所有规则的configuration.txt文件。

应该是这样的:

# view AndroidManifest.xml #generated:50
-keep class com.github.browep.proguard.MainActivity {
    <init>(...);
}

答案 1 :(得分:2)

我遇到了同样的问题,

在为Gradle更新我的Android插件后,Proguard停止混淆我的实用程序和其他类文件。

经过几次搜索,我发现Android studio gradle现在使用较新版本的Proguard

根据stack-overflow answer,其中指出: proguard自动添加特定于android / google包的规则。

因此,在我的应用程序中进行少量规则更改后,Proguard再次对类名称进行了模糊处理。

旧proguard-rules.pro:

#support-v4
#@link https://stackoverflow.com/questions/18978706/obfuscate-android-support-v7-widget-gridlayout-issue
-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.** { *; }
#https://stackoverflow.com/a/34895791/4754141
-keep class !android.support.v7.view.menu.**
-keep interface android.support.v7.* { *; }

#support design
#@link https://stackoverflow.com/a/31028536
-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 https://stackoverflow.com/a/14463528
-dontnote com.google.vending.licensing.ILicensingService
-dontnote **ILicensingService

#updating to Gradle 2.14.1 caused error :         https://stackoverflow.com/q/17141832/4754141
-keepattributes EnclosingMethod

#render script
#@link https://stackoverflow.com/questions/22161832/renderscript-support-library-crashes-on-x86-devices
-keepclasseswithmembernames class * { native <methods>; }
-keep class android.support.v8.renderscript.** { *; }

新proguard-rules.pro:

#https://stackoverflow.com/a/41901653/4754141
#https://stackoverflow.com/a/23840049/4754141
-keep class android.support.** { *; }
-keep interface android.support.** { *; }