android代码混淆 什么意思
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
1.由于Android项目是基于java语言的,而java属于高层抽象语言,易于反编译,其编译后的程序包包含了大量的源代码变量、函数名、数据结构等信息,根据其编译打包后的APK文件,可以非常容易的得到 近乎源代码质量 的反编译代码。如果不加混淆,相当于直接将源代码拱手送人,内容严密的app权限审核可以说是形同虚设。如果大家想避免自己的成果被别人夺取,然后重新修改策划而额外增加的工作量,那就尽量得自己的Android项目加上混淆吧。
也就是说,为了防止他人可以轻松的反编译出你的apk,需要给你的编译的APK加层“密码”,也就是所谓的“混淆”。
2.Android平台的混淆原理是把代码中原来有具体含义的包名,类名,变量名,方法名等名称全部替换成按顺序排列的无意义的英文字母a、b、c….这样代码结构没有变化,还可以运行得到一样的结果,并且就算代码被反编译出来,别人想弄懂代码的架构和具体意思也比较难。
所以当你混淆后运行app时,这个时候APK文件已经是被混淆过的,使用的类也是已经被混淆过的,编译时可能正确但是运行时会报错,所以一些必要的类需要手动去在混淆文件中标明不混淆。
3.不难理解,混淆之后,类名会变成a,b,c这种,通过包名+类名自然就会找不到该类了,自然就会出现ClassNotFoundException异常。当混淆时候报一些引用未找到的时候,有一些可以选择忽略不计,但有一部分必须使用到的类无法找到就是2中提到的原因,即使在混淆文件中选择了不去提示警告后,编译时程序不会报错,但是运行时程序还是会出问题。
所以一些类在混淆代码中需要特别标注出来,不可以混淆掉。