首页 > 编程知识 正文

apk混淆,android依赖库混淆

时间:2023-05-05 07:41:36 阅读:111674 作者:654

打开文章目录以混淆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的简要介绍

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。