android - 自己写的代码混淆时需要注意什么

【字号: 日期:2022-11-12浏览:29作者:雯心

问题描述

自己写的代码混淆时需要注意什么?初学proguard,以及混淆与平时的代码规范有什么联系

问题解答

回答1:

我觉得你应该思考的是你这个类或这个方法是给谁用的,混淆过后它能不能找得到,比如activity,service之类的在清单文件注册,然后系统通过反射来进行调用,所以是不能混淆的。自定义控件也是,它会在布局文件中出现,也是系统通过发射来调用所以也不能混淆。还有native方法,参考方法的命名规则,它也是不能被混淆的。你可以参考这篇博客:http://blog.csdn.net/dai_zhen...。如果有错误还是要思考把什么不该混淆的混淆掉了,比如我之前用ionic,混淆一直出错,后来发现有一种javascript调用的本地的代码的类(不记得叫什么了),这个类是在配置文件声明的,估计也是通过反射来调用,所以是不能混淆的。

回答2:

混淆中最需要注意的是代码中使用反射的部分,由于反射的使用大多数情况下是基于方法或者属性名称的,所以需要保证这些名词不被混淆才能使代码正常运行。一般Android官方或者第三方提供包的时候,也会给出一些混淆的忽略规则,虽然这些规格各不相同,但几乎所有规则的核心概念都是一致的,就是避免混淆使用反射部分的代码。

回答3:

反射的代码,系统接口,jni接口,序列化和反序列化的,与服务端交互的javabean这些不能混淆,如果用第三方包的话,需要去查看这些包的混淆规则,如果不知道直接不混淆就可以了,毕竟一般用的第三方包都是开源的,混淆不混淆都一样的

回答4:

我之前在项目里遇到的一个bug就是混淆引起的。把一个类的名称写死在String里面。混淆之后类名发生改变,找不到这个类。找了好久才找到bug原因所在,很坑。

相关文章: