我尝试在android studio中使用Proguard,但似乎Proguard并没有混淆类名,例如,我的app结构和配置:
和配置
但是当我尝试在应用程序中触发异常时:
ADB控制台中列出了异常:
只有方法被混淆,MainActivity.class不是
答案 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.** { *; }