-- 清除无效\未被使用的代码 UCDetector
Android下优化 清除无效 未被使用的 代码 UCDetector,官方下载地址:http://www.ucdetector.org/index.html
需要注意: 反射 、在xml中配置注入方式、第三方工程的应用 、jar包调用 等 需要自己手工判断
建议删除类的时候 先全局搜索一下 判断有无其它地方调用 eclipse全局搜索快捷键 (windows : ctrl+G 、 mac: control+G )
-- 冗余代码检查工具Simian
Simian UI 是一个用来发现重复代码的eclipse插件,对于改善设计,消除冗余代码很有帮助。
使用eclipse的Help->Software Update进行安装。
Simian也支持Ant,可以在非IDE环境下生成代码冗余度的报告,很多项目都是利用Simian来生成报告的。像Maven Eclipse Plugin,Middlegen。
> Dex
Android逆向之旅---解析编译之后的Dex文件格式- https://blog.csdn.net/jiangwei0910410003/article/details/50668549
DEX文件格式分析- https://segmentfault.com/a/1190000007652937#articleHeader0
dex对JAVA类文件重新排列,将所有JAVA类文件中的常量池分解,消除其中的冗余信息,重新组合形成一个常量池,所有的类文件共享同一个常量池,使得相同的字符串、常量在DEX文件中只出现一次,从而减小了文件的体积。
1.Lody开源Dex加载速度过慢,“跳过Dex优化”的方案- https://github.com/asLody/TurboDex
2.ReDex是 Facebook 开发的一个 Android 字节码的优化工具。它提供了 .dex 文件的读写和分析框架,并提供一组优化策略来提升字节码, 字节码的优化工具ReDex- https://github.com/facebook/redex Redex是Andoird字节码(DEX)优化工具,被Redex优化过后的APK体积更小,运行速度更快。Redex基于管道的方式来优化Android 的.dex文件,一个源, .dex文件通过管道进行一系列的自定义转换后,将得到一个优化的 .dex 文件.
> Dex分包
其实你不知道MultiDex到底有多坑- http://www.open-open.com/lib/view/open1452264136714.html?ref=myread
android MultiDex multidex原理原理下遇见的N个深坑(二)- http://blog.csdn.net/djy1992/article/details/51162061
Android MultiDex初次启动APP优化- http://blog.csdn.net/synaric/article/details/53540760
Android拆分与加载Dex的多种方案对比- https://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=207151651&idx=1&sn=9eab282711f4eb2b4daf2fbae5a5ca9a&3rd=MzA3MDU4NTYzMw==&scene=6#rd%20Android%E6%8B%86%E5%88%86%E4%B8%8E%E5%8A%A0%E8%BD%BDDex%E7%9A%84%E5%A4%9A%E7%A7%8D%E6%96%B9%E6%A1%88%E5%AF%B9%E6%AF%94
> dex/odex/deodex
android 反编译(dex 和 odex)- https://blog.csdn.net/cb269267/article/details/38420941
dex(Dalvik VM Excutors):Dalvik虚拟机执行程序,执行前需要优化。
odex(optimizy Dalvik VM Excutors):Dalvik虚拟机执行程序dex文件前,系统会对dex文件做优化,生成可执行文件odex,保存到data/dalvik-cache目录,最后把apk文件中的dex文件删除。
deodex:第三方的rom,基本上都是deodex的,即apk中直接包含.dex文件,启动应用时从apk中读取dex文件并对之odex优化。
Android App编译之后会生成apk,其中的class.dex是其可执行文件。Android App运行的策略也就是解压apk后运行class.dex。odex是同名apk经系统优化后的dex文件,原生ROM中apk和odex文件是配对的,对应的apk文件中没有了dex(比正常可安装的apk小)。
dex是安卓dalvik虚拟机的可执行文件,可以在导出的apk文件里用解压缩软件直接打开。odex是经过优化过的dex。odex一种是从apk程序中提取出来的,与apk文件存放在同一目录,文件后缀为odex,这类odex文件多是Android ROM的系统程序;另一种缓存文件,这类odex仍以dex为后缀,存放在cache/dalvik-cache目录下。
-- dex转换为odex:
使用dexopt-wrapper可以将dex转换为odex。dexopt-wrapper在安卓2.3以前的源码中可以找到。将dex-wrapper编译后放到手机中。 adb push dexopt-wrapper /data/local
-- odex转换为dex:
odex转换为dex的原理就是先将odex转为smali文件,然后将smali文件转为dex文件。需要下载smali.jar和baksmali.jar。
java -jar baksmali.jar -x HelloDex.odex
java -jar baksmali.jar -x HelloDex.odex -d framework //-d 表示指定framework目录
java -jar smali.jar out -o OutHelloDex.dex //将out目录转换为OutHelloDex.dex文件