每次吃一点AndroidのProguard

2017-02-22  本文已影响61人  耑意儿
目录:
1、Proguard初识
2、Proguard使用

Android小仙

1. Proguard初识

1.0. 引入

我们知道,程序包的生成过程是先将Java文件编译成.class字节码文件然后再打包生成程序包。而程序包很容易被解压回字节码文件,字节码文件中又包含几乎所有的程序信息,因此很容易被反编译获取到Java源代码。
那为了避免程序包被反编译使源代码泄露造成不必要的损失,有必要对字节码文件进行混淆。ProGuard(官网似乎要翻墙哦!)就可以做到代码混淆,让逆向工程师更难理解和复制,此外ProGuard还可以减小代码的体积,对代码进行优化。
如果你要做更为深层的代码安全性保护,可以考虑了解下DexGuard

Paste_Image.png

1.1. 功能

ProGuard可以对Java文件进行压缩、优化、混淆和预校验,可以检查和移除无用代码,减少程序包的体积。可以对文件内容进行混淆,防止被反编译。

1.2. 优点

1.3. 工作过程

ProGuard就做四件事:
压缩(Shrink)、优化(Optimize)、混淆(Obfuscate)、预校验(Preverify)
先来看看这几个过程涉及的一个关键词:
入口点(EntryPoint),这里简称EP,EP指的是被保持的代码,它决定了哪些代码不被移除或者混淆。

1.3.1. 压缩

压缩是发现没有使用的类、方法、字段和特性,然后将其移除以减少代码量。
压缩时从EP开始递归遍历,搜索被使用的类和类成员,将未被使用到的移除。

1.3.2. 优化

优化是对字节码进行优化,移除无用的指令,这个功能默认是不开启的.
优化时用private、static、final等修饰符修饰非EP的类和方法,移除无用的参数,将一些方法变成内联方法。

1.3.3. 混淆

混淆是通过使用简短的名称如a,b,c来命名类,方法和变量名。
混淆时保留作为EP的类和类成员名,重命名非EP的类和类成员名。

1.3.4. 预校验

预校验是确保加载的class文件是可执行的,这个功能也是默认不开启的

1.4. 关闭四大功能

# 关闭压缩功能
-dontshrink
# 关闭优化功能
-dontoptimize
# 关闭混淆功能
-dontobfuscate
# 关闭预校验功能
-dontpreverify

2. Proguard使用

2.1. 基础语法

2.2. ProGuard有七种指令选项:

详细可参考Proguard选项

2.3. 通配符

? 单个字符
* 多个字符
**任意多个字符
%基本类型
***任意类型
···多个参数
<init>构造方法
<fields>字段
<methods>方法

2.4. Android ProGuard 的使用

在proguard-rules.pro文件中添加需要的规则,在AndroidStudio中的build.gradle文件中进行配置,如下:

android {
    buildTypes {
        debug {
            buildConfigField "boolean", "LOG_DEBUG", "true"
            // VersionName后缀
            versionNameSuffix "-debug"
            minifyEnabled false
            zipAlignEnabled false
            shrinkResources false
        }
        release {
            // 不显示log
            buildConfigField "boolean", "LOG_DEBUG", "false"
            // 混淆
            minifyEnabled true
            // Zipalign优化
            zipAlignEnabled true
            // 移除无用的resource
            shrinkResources true
            // 混淆配置
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

<a>注意:</a>

2.5. AndroidSdk中的Proguard工具

Paste_Image.png

2.6. ProGuard使用注意事项

参考资料:
Android Studio:ProGuard 混淆配置
ProGuard系列 - Android ProGuard

上一篇 下一篇

猜你喜欢

热点阅读