简单教你怎么混淆Android的代码,让你看到混淆和没有混淆的区别。

一、咱们先看看没有混淆的代码反编译后什么样子

反编译过程

1、把.apk重命名成.zip(因为apk包和zip的算法一样)


classes.dex就是代码存放的位置,下一步我们把dex转成jar

2、dex文件转成jar文件

需要下载一个dex2jar文件     https://sourceforge.net/projects/dex2jar/

把工具解压到文件夹,为了方便省去输入路径,我们把上一步得到的classes.dex文件拷贝到dex2jar目录下


文件夹里有很多文件,我现在用的是windows使用d2j-dex2jar.bat,如果用linux可以使用d2j-dex2jar.sh

打开命令提示符窗口,并切换到这个工具的目录


3、查看代码,这里还需要一个工具(jd-gui)

下载地址http://jd.benow.ca/

根据你的系统选择下载不同的版本,下载完成后解压,然后打开(windows里叫jd-gui.exe)

然后用这个工具打开上一步转换的jar文件就可以查看源码了,着就是没有混淆过的java代码。


二、混淆,Android官方是把混淆,压缩代码,压缩资源文件放在一起讲的,我也顺便一起讲了。

其实我开始看混淆的时候从网上搜的一堆东西都是这么不混淆这个不混淆那个,忽略这个忽略那个。

我根据我的简单理解和应用讲述一下如何使用

1、开启混淆功能

在app的build.gradle里面把minifyEnabled 设置成true就是开启混淆,如果你的app里没有导入过任何第三方的包这样就可以了,这时你打个release包用刚才试过的反编译方法在试一遍,看看代码是否混淆了。

 

看看混淆后的结果,我们的目的达到了。


当然我们开发不用到第三方库是不可能的,如果用到该怎么办。

下面我就改进行配置了,在app工程目录下的proguard-rules.pro文件里配置

比如咱们最常用的retrofit2网络请求,不用看别人怎么配置的,直接去官网去找http://square.github.io/retrofit/

把找的贴在proguard-rules.pro文件里就好了


比如 dbflow 去官网

 https://github.com/agrosner/DBFlowDocs/blob/76b48d64bf3f1e5256a7003d2230a29e2fb07c7a/proguard.md


如果使用dbflow-sqlcipher加密

https://github.com/agrosner/DBFlowDocs/blob/76b48d64bf3f1e5256a7003d2230a29e2fb07c7a/SQLCipherSupport.md


建议每次添加完第三方库都打release包试一下,看看能不能打成功,安装完成程序有没有异常。

打包时还会遇到这种问题,Please correct the above warnings first.

这就是引入第三方库并没有配置PROGUARD,具体哪个库引起的还得从左边的窗口往下找

往下看,发现是引入知乎的图片选择框架问题,回到了上面,去官网文档里找

混淆还有好多操作,这里就不多讲了,想继续深入的可以自己再找找资料学习一下。

三、现在给大家说说代码压缩和资源压缩

其实这个更简单,就是两个配置,配置在app的build.gradle里面


看看压缩代码和压缩资源是否管用,能给apk瘦身多少。


还是有效果的,压缩多少是和项目内的代码和资源文件数量的大小是有关系的。

最后把我项目里的proguard-rules.pro贴上吧,祝各位端午节快乐!

-dontwarn javax.annotation.**
-dontwarn com.squareup.picasso.**
-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn org.conscrypt.**

# Platform calls Class.forName on types which do not exist on Android to determine platform.
-dontnote retrofit2.Platform
# Platform used when running on Java 8 VMs. Will not be used at runtime.
-dontwarn retrofit2.Platform$Java8
# Retain generic type information for use by reflection by converters and adapters.
-keepattributes Signature
# Retain declared checked exceptions for use by a Proxy instance.
-keepattributes Exceptions

#dbflow
-keep class * extends com.raizlabs.android.dbflow.config.DatabaseHolder { *; }
#dbflow sqlcipher
-keep class net.sqlcipher.** { *; }
-dontwarn net.sqlcipher.**

#easypermissions
-keepclassmembers class * {
    @pub.devrel.easypermissions.AfterPermissionGranted <methods>;
}

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值