1.混淆问题
混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正语义。
被混淆过的程序代码,仍然遵照原来的档案格式和指令集,执行结果也与混淆前一样,只是混淆器将代码中的所有变量、函数、类的名称变为简短的英文字母代号,在缺乏相应的函数名和程序注释的情况下,即使被反编译,也将难以阅读,release版的还会进行混淆和用自己的keystore签名,以防止别人反编译后重新打包替换你的应用。
同时混淆是不可逆的,在混淆的过程中一些不影响正常运行的信息将永久丢失,这些信息的丢失使程序变得更加难以理解。
混淆器的作用不仅仅是保护代码,它也有精简编译后程序大小的作用。由于以上介绍的缩短变量和函数名以及丢失部分信息的原因,编译后jar文件体积大约能减少25%。所以混淆还有缩减apk大小的作用。
2.Release文件比Debug文件小
Release是发行版本,比Debug版本有一些优化,文件比Debug文件小 。Debug是调试版本,Debug和Release调用两个不同的底层库。
- Debug是调试版本,包括的程序信息更多。
- 只有Debug版的程序才能设置断点、单步执行、使用TRACE/ASSERT等调试输出语句。
- Release不包含任何调试信息,所以体积小、运行速度快。