Android混淆之ProGuard

先简单介绍下 ProGuard
ProGuard 是一款用来混淆 java 源码的工具。由于 java 的一次编写,到处运行的特性,生成的字节码很容易被反编译,很容易将自己的代码暴露,混淆器就是用来解决这个问题的。
将 java 源码的类拆分为几个没有实际意义的名字的类,并将类的属性和方法也重命名为无实际意义的属性名和方法。这个就是混淆器的基本原理。
我们今天要说的 ProGuard 就是这样的一款混淆器。
网上关于 ProGuard 详细的介绍与很多的,我这里就不一一列出了,具体的话可以参考
http://my.oschina.net/u/1175007/blog/475797
http://blog.youkuaiyun.com/banketree/article/details/41928175
这些都总结的比较好了。

这里我说说我再我自己的项目中得使用情况吧。

  • 首先是使用,由于我目前用的是 Android Studio 1.3 的版本,就拿1.3的版本来说吧。
    我们在module的build.gradle文件可以看到以下语句
buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
minifyEnabled true 
这一句表示打开 Proguard 混淆,导出签名的apk的时候源码会被 Proguard 混淆
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
这一句则定义了我们采用什么规则来混淆代码。查看 module 目录你会发现有个 proguard-rules.pro 文件,
这个就是 Android Studio 默认的混淆规则文件,你需要混淆的规则再里面配置,
至于 proguard-android.txt,相信用 eclipse 开发的会比较熟悉了,在 eclipse 项目目录下面会有这个文件,这个文件同 proguard-rules.pro 一样是混淆规则的配置文件
  • 接着说说我再混淆过程中遇到的困难吧。

  • 1 我再项目里面用到了第三方库,一开始混淆的时候报了很多 warnning 的错误,查阅发现是没有告诉 ProGuard 忽略 warnning , 在 proguard-rules.pro 里添加

-dontwarn jar_package_name.**

这个语句可以告诉ProGuard忽略第三方没引用的类

  • 2 由于第三方用到了注解,本以为打开注解就好了,结果发现还是不行,后来通过查看混淆后的源码发现,某些属性被删除了,原来那些属性由于一些原因被定义了,但是没有直接使用,但是程序偏偏不能少。于是我通过保留类成员的方法规避了这个错误,具体的方法是
-keep class your_class_with_package_name {
    public <fields>;
}

这样就保留了访问权限为为 public 的属性。

今天就先写到这里吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值