一.混淆含义
对代码进行模糊处理并不是防止代码进行反编译,而是重命名代码中的类、方法和变量等信息,使其成为没有意义的名称,同时删除未使用的类、方法和变量等因此,混淆提高了程序的安全性,提高了逆向工程的难度,同时也有效地减少了apk的体积。 总结如下。
1、重命名项目中的类、方法、变量等信息,使其成为没有意义的短名称。
2、删除未使用的类、方法、变量等。
二.混淆规则和安排
需要在AndroidManifest.xml中注册的所有类的类名和从父类重写的方法名不会自动混淆。 因此,该规则不仅适用于Activity,还适用于服务、BroadcastReceiver和ContentProvider。
(1)已禁用
禁用是true的角色。 启用代码混淆和APK压缩;
minifyEnabled压缩资源,多余的代码在打包时被删除。 minifyEnabled不仅会删除代码,还会删除未调用的资源,从而混淆代码并压缩APK包。
也可以在打开模糊处理后添加shrinkResources。 这意味着打开并删除无效的资源。
)2) shrink资源
shrinkResources为true,则打开删除不需要的资源。
shrinkResources需要知道对于未被参照的文件(实测为drawable,layout,实际上并不是完全删除,而是保持文件名,但没有内容)是否被参照
)3)避免被意外删除
如果要部署minifyenabletrueshrinkresourcestrue以避免意外删除,请将其置于res/raw/keep.xml (避免意外删除)中
对于未引用的文件未在配置文件keep.xml中声明保存的文件,打包后将没有内容,而声明保存的文件将包含内容(资源文件和layout文件)。 注:不会删除未在string.xml中引用的设置。
)4) proguard-android.txt和proguard-rules.pro
proguard-android.txt :表示系统默认值的模糊化规则配置文件。 位于/tools/proguard下。 此配置文件也适用于其他项目,因此通常不要更改。
proguard-rules.pro :代码表中当前项目的模糊处理配置文件。 在app module中,可以通过修改此文件来添加应用于当前项目的模糊化规则。
)5)项目文件夹
混淆代码并生成apk会在项目下添加proguard和proguard文件夹中的四个文件的角色。
dump.txt :描述了apk中所有类文件中的结构。
mapping.txt :显示了原始类、方法、名称和模糊代码之间的映射。
seeds.txt :列出了未混淆的类和方法。
usage.txt :列出了从congapk中删除的代码。
三.编写自己的混淆代码