ODEX是安卓上的应用程序apk中提取出来的可运行文件,是通过apk安装包的中的dex优化过的,再把apk包里的dex文件删除。
这样做可以加快软件的启动速度,预先提取,减少对RAM的占用,因为没有odex的话,系统要从apk包中提取dex再运行。
Odex化后系统启动和程序运行速度大大提高,稳定性不变。因此推荐做Odex化。
一般来说官方rom都是odex化的rom(含Odex文件),所以要从这中ROM中提取apk需要将odex转成dex。
下载软件工具:
http://code.google.com/p/smali/downloads/list
现在我们要对CardManager.odex进行反编译,以CardManager.odex为例。
1:java -jar baksmali-1.3.2.jar -a 12 -x CardManager.odex
这时候出现问题:
Error occured while loading boot class path files. Aborting.
org.jf.dexlib.Util.ExceptionWithContext: Cannot locate boot class path file bouncycastle.odex
at org.jf.dexlib.Code.Analysis.ClassPath.loadBootClassPath(ClassPath.java:237)
at org.jf.dexlib.Code.Analysis.ClassPath.initClassPath(ClassPath.java:145)
at org.jf.dexlib.Code.Analysis.ClassPath.InitializeClassPathFromOdex(ClassPath.java:110)
at org.jf.baksmali.baksmali.disassembleDexFile(baksmali.java:96)
at org.jf.baksmali.main.main(main.java:278)
2:生成 classes.dex文件
运行 java -jar smali-1.3.2.jar out/ -o classes.dex
反编译framework.odex
java -Xmx512m -jar baksmali-1.3.2.jar --api-level 12 -c:core.jar:bouncycastle.jar:ext.jar:framework.jar:android.policy.jar:services.jar:core-junit.jar -d framework/ -x framework.odex
重新打包
参考: http://nitinzzz.blogspot.com/ (注:这个被墙了 !!=_=!!)- 首先,准备工具
- apktool apk_manager , 点这里下载
- zip 的 管理工具 ,这个 ubuntu 底下默认有了。
- jdk 的 jarsigner , 我这里路径为 /home/nxliao/tool/android/jvm/java/jdk1.6.0_25/bin/jarsigner
- android sdk 的 debug.keystore ,在ubuntu下为 ~/.android/debug.keystore
- 准备实验对象
- Fishing Joy , 点这里下载
- 改装
- 用 zip 管理工具打开这个 apk,删除里面的 META-INF 目录
- 用 apktool 解压处理过的 apk
$ ./apktool d ~/tmp/jianjiuhongchenfengha_V1.0_mumayi_85342.apk ~/tmp/jianjiuhongchenfengha
- 用 vi 打开目标代码
$ vi ~/tmp/jianjiuhongchenfengha/smali/com/sg/android/fish/FishActivity.smali
- 转到第 330行(在 .method private init()V 内),将
const/16 v6, 0xc8
修改成const/16 v6, 0x647d
(也可以设置成其它数值),即可将初始金钱改成 0x647d =25752 - 保存退出
- 用 apktool 重新打包 apk
$ ./apktool b ~/tmp/jianjiuhongchenfengha ~/tmp/jian.apk
- 这时候新的apk还不能直接安装,需要打上签名。用jdk的 jarsigner 打上签名
$ jarsigner -verbose -storepass android -keystore ~/.android/debug.keystore ~/tmp/jian.apk androiddebugkey