odex转dex和重新打包apk

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) 
这是由于缺少core.odex, ext.odex, framework.odex, android.policy.odex, services.odex, bouncycastle.odex, core-junit.odex, 这7个文件的问题,将framework下的这7个odex文件一并考到同级目录下,在运行命令会生成一个out文件夹,里面的文件以.smali结尾

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
  • 准备实验对象
  • 改装
    1. 用 zip 管理工具打开这个 apk,删除里面的 META-INF 目录
    2. 用 apktool 解压处理过的 apk
       $ ./apktool d ~/tmp/jianjiuhongchenfengha_V1.0_mumayi_85342.apk ~/tmp/jianjiuhongchenfengha
    3. 用 vi 打开目标代码
      $ vi ~/tmp/jianjiuhongchenfengha/smali/com/sg/android/fish/FishActivity.smali
    4. 转到第 330行(在 .method private init()V 内),将 const/16 v6, 0xc8 修改成 const/16 v6, 0x647d (也可以设置成其它数值),即可将初始金钱改成 0x647d =25752
    5. 保存退出
    6. 用 apktool 重新打包 apk
      $ ./apktool b ~/tmp/jianjiuhongchenfengha ~/tmp/jian.apk
    7. 这时候新的apk还不能直接安装,需要打上签名。用jdk的 jarsigner 打上签名
         $ jarsigner -verbose -storepass android -keystore ~/.android/debug.keystore ~/tmp/jian.apk androiddebugkey

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值