Android基础

代码混淆

2017-07-14  本文已影响0人  沅兮

什么是混淆?

如何开启混淆

buildTypes {
        release {
            minifyEnabled true -- 开启混淆
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'~~~

##### Proguard是什么?
- Proguard是一个集文件压缩,优化,混淆和校验等功能的工具。
- 它检测并删除无用的类、变量、方法和属性。
- 它优化字节码并删除无用的指令。
- 它通过将类名、变量名和方法名重命名为无意义的名称实现混淆效果。
- 最后它还校验处理后的代码。

##### 混淆的常见配置 -- keep

- Keep用来保留Java的元素不进行混淆,keep有很多变种:
> -keep
-keepclassmembers
-keepclasseswithmembers

- 保留某个包下面的类以及子包
> -keep public class com.droidyue.com.widget.**

- 保留所有类中使用otto的public方法
> Otto
-keepclassmembers class ** {
    @com.squareup.otto.Subscribe public *;
    @com.squareup.otto.Produce public *;
}

- 保留Contants类的BOOK_NAME属性
> -keepclassmembers class com.example.admin.proguardsample.Constants {
     public static java.lang.String BOOK_NAME;
}

##### 混淆的常见配置 -- dontwarn
- dontwarn是一个和keep形影不离,尤其是处理引入的library时。
- 引入的library可能存在一些无法找到的引用和其他问题,在build时可能会发出警告,如果我们不进行处理,通常会导致build中止。因此为了保证build继续,我们需要使用dontwarn处理这些我们无法解决的library的警告。

##### 关闭Twitter sdk的警告
> -dontwarn com.twitter.sdk.**

# 哪些不应该混淆
- 反射中使用的元素
- GSON的序列化与反序列化
- 枚举
- 四大组件不建议混淆
- 注解不能混淆
- jni调用的java方法
- java的native方法
- js调用java的方法
- 第三方库不建议混淆
- 反射相关的一些情况
上一篇 下一篇

猜你喜欢

热点阅读