APK 混淆(使用 studio)

[Android混淆从入门到精通]
原文 http://www.jianshu.com/p/7436a1a32891)

Android Studio 自身集成 Java 语言的 ProGuard 作为压缩、优化和混淆的工具,配合 Gradle 构建工具使用很简单,只需要在 module 的 gradle 文件中设置 minifyEnabled 为 true 即可。然后我们就可以到 proguard-rules.pro 文件中加入我们的混淆规则了。

这里写图片描述

以上示例代码表示对 release 版本进行混淆处理,对 debug 版本不进行混淆处理。

ProGuard 的三大作用

压缩(Shrinking):默认开启,用以减小应用体积,移除未被使用的类和成员,并且会在优化动作执行之后再次执行(因为优化后可能会再次暴露一些未被使用的类和成员)。

//关闭压缩
-dontshrink

优化(Optimization):默认开启,在字节码级别执行优化,让应用运行的更快。

//关闭优化
-dontoptimize
//表示 proguard 对代码进行迭代优化的次数,Android 中 n 一般为5
-optimizationpasses n 

混淆(Obfuscation):默认开启,增大反编译难度,类和类成员会被随机命名,除非用 keep 保护。

//关闭混淆
-dontobfuscate 

混淆后默认会在工程目录app/build/outputs/mapping/release下生成一个mapping.txt文件,这就是混淆规则,我们可以根据这个文件把混淆后的代码反推回源本的代码,所以这个文件很重要,注意保护好

基本规则

原则上,代码混淆后越乱越无规律越好,但有些地方我们是要避免混淆的,否则程序运行就会出错,所以就有了下面我们要教大家的,如何让自己的部分代码避免混淆从而防止出错。

//两颗星表示把本包和所含子包下的类名都保持 不 被混淆;
-keep class cn.hadcn.test.**
//一颗星表示只是保持该包下的类名 不 被混淆,而子包下的类名还是会 被混淆;
-keep class cn.hadcn.test.*

用以上方法保持类后,你会发现类名虽然未混淆,但里面的具体方法和变量名还是变了,这时如果既想保持类名,又想保持里面的内容不被混淆,我们就需要以下方法了

//既保持类名 不 被混淆,又保持类里的具体方法和变量名等 不 被混淆
-keep class cn.hadcn.test.* {*;}

在此基础上,我们也可以使用 Java 的基本规则来保护特定类不被混淆,比如我们可以用 extend,implement 等Java规则。

//保持所有继承Activity的类 不 被混淆
-keep public class * extends android.app.Activity
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值