Android代码混淆的那些事

Android代码混淆的那些事

文章目录

  • Android代码混淆的那些事
    • 1.什么Android代码混淆
    • 2.为什么要Android代码混淆
    • 3.如何对Android代码进行混淆
    • 4.对android代码进行混淆注意事项
    • 5.Android代码混淆后发生冲突如何处理
    • 6.写在最后
    • 7.文章参考

1.什么Android代码混淆

将编写的android apk源码标识符替换成不易识别的字符的一种方式

2.为什么要Android代码混淆

1.目前大多数android apk都是有Java编写的,极容易被反编译, 这个对一般的企业来说是不能接受的。所以需要通过代码混淆技术将写好的代码,混淆为不易识别的,从而防止代码泄露
2.由于代码混淆用简单抽象的单词代替原有长而通俗易懂的代码,因而减少APK的体积。而且,使用代码混淆后,利用Gradle为Android提供的插件,能将项目中未使用的资源安全移除,大大减少APK体积。

3.如何对Android代码进行混淆

目前android studio已经集成了 代码混淆 , 只需要在Gradle 中配置即可使用
1.打开android studio 代码混淆 ,将minifyEnabled 改为true即可

	android {
		  buildTypes {
		        release {
		            minifyEnabled true
		            proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
		            shrinkResources true
		        }
	        }
     }

2.编写代码混淆规则文件 proguard-rules.pro
混淆规则不再赘述了, 直接参考代码混淆规则

4.对android代码进行混淆注意事项

android 代码混淆的原则就是,无非就是对类这个实体进行混淆, 所以无非就是1.类名 , 2.类变量名 ,3.类方法名 (后两者统称类成员名) 进行混淆即可,但是问题来了,如果这三个名称有被其他的类方法调用,而且其他的类方法还无法一起混淆的时候,就会出现空引用,或者找不到方法。所以有被其他无法被混淆的引用的类,类成员,只能采取不混淆。
那么目前有以下几类:
1.android自带的组件
2.枚举
3.接口
4.实体类 (通常被JSON 处理的JavaBean)
5.第三方库 (目前最有效的方式 : -keep class 包名.**{*;} )
6.jni (jni在保持不混淆的时候,建议直接用 -keep class 包名.类名 { *;})
//TODO 目前常见的就这些,以后遇到继续补充

5.Android代码混淆后发生冲突如何处理

当然,混淆后,编译过不了,这个通常是混淆规则语句 没写对,按照提示定位当错误点,改改就好了
主要是混淆过了的apk运行时崩溃。这个就有点郁闷了。这个我总结无非就是某个方法或者变量类名找不到。通常就是没有将不能混淆的库或者代码混淆了,按照楼上第4条 ,排查一下,应该会很快找到错误。

这里要注意一个问题就是,混淆后运行时出现的错误有可能是无法八门的,就是提示某个类找不到,但是偏偏这个库就存在。 或者不混淆是ok的,但是混淆后就出错,如果这个和json解析相关,需要排查一下,是否又将json相关的JavaBean 保持不混淆

6.写在最后

当然这个代码混淆看起来很简单,但是有些细节需要注意。不然会被搞得很郁闷。

7.文章参考

代码混淆
典型错误

你可能感兴趣的:(Android,android,代码混淆)