打开文章目录以混淆ProGuard角色的基本规则参考:
打开混淆
要在Android中设置混淆,必须在gradle中将minifyEnabled设置为true,并将混淆规则添加到混淆的配置文件中。
Android { . build types { release } minifyenabledtrueproguardfilesgetdefaultproguardfile (' proguard-Android.txt ' )、'、'
ProGuard作用压缩(shrinking ) :用于减少应用体积并移除未使用的类和成员。
-dontshrink压缩优化(Optimization ) :默认情况下处于启用状态,在字节码级别执行优化,以加速APP应用程序的运行
-dontoptimizeoff优化-优化过程n表示proguard对代码进行迭代优化的次数。 安卓一般是5混淆(Obfuscation )。 默认on增加了反向编译的难度。 除非使用keep保护,否则不要混淆。
-dontobfuscateoff模糊化网格设置还会适当地优化以下参数:
4字节对齐(zipAlignEnabled ) :启用4字节对齐可以减少运行时的内存消耗
zipAlignEnabled true删除无用的资源文件:当ProGuard删除部分无用的代码时
这些代码引用的资源也被标记为无用资源,并被资源压缩功能删除。
请注意,资源压缩机当前不删除在values/文件夹中定义的资源(字符串、大小、样式、颜色等)。 Android构建工具使用ResourceUsageAnalyzer检查哪些资源是浪费的,如果检查到是浪费的,则将其替换为预定义的版本。 主要为. png、9.png和. xml提供了三个byte数组的预定义版本: TINY_PNG、TINY_9PNG和TINY_XML。
资源压缩工具默认在安全压缩模式下运行,可以通过打开严格压缩模式来瘦身。
shrinkResources true D8和R8优化:
Android Studio 3.1及更高版本的D8用作缺省Dex编译器,Dex的体积和性能更好
Android Studio 3.0要求在gradle.properties文件中主动添加: android.enableD8=true。 R8是Proguard压缩和优化部分的替代品,当我们打开混淆时,R8默认集成到android gradle plugin中。
混乱的基本规则- keepclasscn.had cn.test.*-keepclasscn.had cn.test.*星号表示保留包下的类名。 子包下的类名会混乱。 双星保存包和子包下的类名。 使用上述方法不会混淆类名,但不会混淆
-keep class cn.hadcn.test.* {*; }此规则可以是java语法extends、implements等规则。
- keep public class * extends Android.app.activity以上规则防止继承activity的所有public的类混淆。
对于EEP内部类,必须使用$符号。 下面的示例防止ScriptFragment内部类的JavaScript接口中的所有公共内容混淆:
- keepclassmembersclasscc.ninty.chat.ui.fragment.script fragment $ JavaScript接口{ public *; } -防止} -keepclassmembers成员被删除或重命名
如果只希望不要混淆该类下面的特定方法,则不能使用keep方法。 keep方法保留类名,但必须使用keepclassmembers。 这样不会保留类名。 为了便于理解这些规则,官方网站提供了下表
删除是指在“压缩”(Shrinking )期间是否删除。
请不要混淆jni方法。 因为必须避免将此方法与用于保持与native方法一致的反射的类混淆。 否则,反射可能会产生问题。 因为AndroidMainfest类不会混淆,所以缺省情况下,四个主要组件、APP子类和Framework层下的所有类都不会混淆。 自定义视图的默认值也不会混淆; 因此,Android Studio不需要添加许多规则,这些规则可以排除粘贴到网上的自定义视图,也可以将四个组件混淆在一起; 与服务端交互时,使用GSON、fastjson等框架解析服务端数据时,编写的JSON对象类不会混淆。 否则,无法将JSON解析为对应的对象,在使用第三方开源库或参照其他第三方的SDK包时,如果有特殊要求,需要添加与混淆文件对应的混淆规则。 即使有使用WebView的JS调用,也应该避免混淆编写的接口方法。 理由与第一条相同。 不要将Parcelable子类与Creator静态成员变量混淆。 否则,将出现Android.OS.badparcelableexception异常。 使用enum类型时,请注意不要混淆以下两种方法: 由于enum类的特殊性,以下两种方法被反射调用。 请参见第二条规则。 参考: ProGuard官方网站
混淆语法介绍
3359 segment fault.com/a/119000018742290
混淆基础介绍
3359 www.Jian Shu.com/p/7436 a1a 32891
D8和R8的简要介绍