4、 常见的不能混淆的android code
一、android系统组件,系统组件有固定的方法被app调用。
二、被android resource文件引用到的,名字已经固定,也不能混淆,比如自定义的View。
三、android parcelable,需要使用android序列化。
四、其他android官方建议不混淆的,如:android.app.backup.BackupAngentHelper,android.preference.Preference,com.android.vending.licensing.ILicensingService
五、java序列化方法,系统序列化需要固定的方法
六、本地方法,不能修改本地方法名
七、annotations注释
八、数据库驱动
九、有些resource文件
十、用到反射的地方
总结:Android的四大组件,第三方jar包不能混淆
5、如何测试一个apk的代码是否被混淆过
方案一:
一、 下载dex2jar包,解压
二、把apk包的后缀名改为.zip
三、把apk压解压拿到classes.dex文件,并放到dex2jar所在的目录下
四、运行命令dex2jar.exe classes.dex
五、下载jd-gui
六、把jar包加载到jd.gui,查看源码,源码中的类名,方法名,变量名是否已经改变
方法二:
一、下载apktool工具
二、运行apktool.bat d xxx.apk,把apk反编译成smali
三、如果想要进一步查看源码,可下载smali2java
四、使用smali文件的文件名进行分析,如果存在1个或1个以上的资源类的smali文件,就可以证明该apk没有被混淆过。如下图所示: