Android 代码混淆
来源:互联网 发布:java内部类实例化 编辑:程序博客网 时间:2024/06/05 10:58
原创地址:http://blog.csdn.net/tl792814781/article/details/51447255
代码混淆
代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。
将代码中的各种元素,如变量,函数,类的名字改写成无意义的名字。比如改写成单个字母,或是简短的无意义字母组合,
甚至改写成“__”这样的符号,使得阅读的人无法根据名字猜测其用途。
将代码中的各种元素,如变量,函数,类的名字改写成无意义的名字。比如改写成单个字母,或是简短的无意义字母组合,
甚至改写成“__”这样的符号,使得阅读的人无法根据名字猜测其用途。
对于支持反射的语言,代码混淆有可能与反射发生冲突。代码混淆并不能真正阻止反向工程,只能增大其难度。
因此,对于对安全性要求很高的场合,仅仅使用代码混淆并不能保证源代码的安全。但是可以在一定程度上保护自己的劳动成果。(例子在末尾)
因此,对于对安全性要求很高的场合,仅仅使用代码混淆并不能保证源代码的安全。但是可以在一定程度上保护自己的劳动成果。(例子在末尾)
忽略混淆的文件(规则):
- Android系统组件,系统组件有固定的方法被系统调用。
- 被Android Resource 文件引用到的。名字已经固定,也不能混淆,比如自定义的View 。
- Android Parcelable ,需要使用android 序列化的。
- 其他Anroid 官方建议 不混淆的,如
- android.app.backup.BackupAgentHelper
- android.preference.Preference
- com.android.vending.licensing.ILicensingService
- Java序列化方法,系统序列化需要固定的方法。
- 枚举 ,系统需要处理枚举的固定方法。
- 本地方法,不能修改本地方法名
- annotations 注释
- 数据库驱动
- 有些resource 文件
- 用到反射的地方
心得:
1.grade构建必须没有warn和error,不然刷入的版本依旧是上一个版本,这里要特别注意warn!2.ClassNotFoundException,NoSuchMethodError
原因:这种异常会在好多情况下出现,比如:本地代码通过反射调用其他的类,但是经过了混淆之后,就会出现如上异常;调用了JNI之后,C或者C++和java代码进行交互的时候找不到java的类或者方法,导致发生了异常......等等,还有好多。
解决办法:只需要将被调用的Java类标注为不混淆即可。 -keep class package.classname{*;}
3.ExceptionInInitializerError
解决办法:找到具体是哪里的类哪个方法哪个类初始化的时候发生的异常,然后解决问题。
注:遇到这个错误,首先要确认是不是因为第三方的jar包导致的。如果不是的话,就找本地代码,看是不是写的有问题。如果确实是因为第三方jar包的代码导致的,尽量找到源码或者反编译,查看问题到底是什么引起的,然后找到相应的配置在proguard里面配置。
例如:我们项目中碰到过一个问题,就是因为第三方的jar包里面有一个字段初始化的时候报了空指针,然后导致我们的代码报了上面的错。当时很奇怪,为什么第三方的jar包还能报错,最后调查了之后才发现,是因为人家用到了类的注解,而proguard在混淆优化的时候把注解去掉了,所以报了空指针,只需要在proguard里面加上保护注解就可以了-keepattributes *Annotation*
4.ClassCastException
解决办法:找到代码,看是代码写的问题,还是混淆后的问题。如果没有混淆正常运行的话,一般都是因为混淆后遇到了各种问题才报的错。我们项目中遇到的问题是因为没有让proguard保持泛型,所以强转的时候报错。只需要在proguard文件里面加上泛型即可-keepattributes Signature
5.Resources$NotFoundException(resource not found)
原因:代码进行了混淆,R文件没有了,所以通过反射获取的R文件找不到
解决办法:在proguard文件里设置不混淆R文件 -keep class **.R$* { *; }
6. Missing type parameter. or java.lang.ExceptionInInitializerError
混淆例子:
下面的操作是在Android studio 中proguard-rules.pro这个文件下面写的以上是在项目中的一些心得,谢谢。
0 0
- Android 代码混淆,混淆打包
- Android 代码混淆 webview混淆
- [Android]混淆Android代码
- [Android]混淆Android代码
- Android代码混淆------apk文件代码混淆
- android 代码混淆proguard
- Android项目代码混淆
- android 代码混淆总结
- android 代码混淆
- android代码混淆
- 混淆Android代码
- Android代码混淆 反编译
- android 代码混淆
- Android 代码混淆
- android 代码混淆
- Android代码混淆技术
- android 代码混淆
- Android代码混淆
- RecyclerView的用法
- Picasso
- v8引擎helloworld
- MD5加密
- 《Objective-C编程全解》 读书笔记 第十七章 实例:简单图像视图
- Android 代码混淆
- HTTP in iOS你看我就够
- Burpsuite与sqlmap结合进行sql注入渗透测试
- POJ
- 深入解析MySQL分区(Partition)功能
- 网络流问题:最大流及其算法
- Mysql 索引机制
- 三种adapter的区别和用法
- 四大组件之Broadcast简介