Rom+Odex+Apk处理

来源:互联网 发布:如何优化网站页面 编辑:程序博客网 时间:2024/05/31 19:23

Android的ROM中正常的软件都是apk内包含有一个classes.dex,但也有有时会没有(比如MIUI或有些HTC的ROM),却有很多odex文件,相对于APK中的dex文件而言这个odex有什么作用呢? 

       首先分析一下apk文件的安装过程。安装apk包,会在/data/app目录复制一份安装包,在/data/dalvikvm-cache目录放一个解压出来的classes.dex,如果有so文件,还要复制到对应的文件夹。但是,如果把一个apk分解为apk+odex,情况就大大不同了,这时完全可以把apk内的lib文件夹和classes.dex文件删掉,然后签名,配合odex一起使用,当然so文件也不能丢。所以,
            正常的包占的的空间=原包+classes.dex+so;
            分解后的包占的空间=分解包+odex+so。
       这样做可以使其厂商保证一定的反盗版,因为没有没有dex文件的 apk是无法正常安装的,而厂商直接将odex和不完整的apk文件放到手机rom固化到/system/bin中可以让一般用户无法正常导出使用,同时apk带odex不仅节约空间,而且还能优化加载速度。
       而那个 apk 是残缺的,里面没有 classes.dex 文件,残缺的 apk 是装不了的,只能把这个 apk 跟 odex 合并成一个完整的 apk 才能安装。

下面介绍合并的方法:

需要的工具:
1.smali-1.2.6.jar 和 baksmali-1.2.6.jar
2.还需要这个 apk 所在的 rom 里面的一些 jar 文件,都在 /system/framework 里面: core.jar, ext. jar, framework. jar, Android.policy. jar, services. jar 。当然,这五个是最基本的,有可能还不够,最好将整个framework文件夹里面的都放这里(不然可能会出异常)。

总共分四步:
1.   首先你的电脑要配置好java环境,不懂的自己Google。

2.把下载好的 smali-1.2.6.jar 和 baksmali-1.2.6.jar ,还有 rom 里面抠出来的 jar ,放到工作目录,然后 apk 和 odex 也放到一起。

3.分解 odex 文件为 class 文件。
命令: java -jar baksmali-1.2.6.jar -x <a.odex>
<a.odex> 处是你要分解的 odex 文件的名字(没有角括号),命令完成之后,会生成一个 out 文件夹,里面就是所有的 class 文件。

4.将 class 生成为 classes.dex 文件。
命令: java -Xmx512M -jar smali-1.2.6.jar out -o classes.dex
这一步应该不会有什么问题,然后会生成 classes.dex 文件。

5.把 classes.dex 放入 apk 里面。
最后这一步最简单了,用解压缩软件打开 apk ,然后把千辛万苦生成的 classes.dex 拖进去替换原来的dex文件就 OK 了。这个 apk 就能用了。如果想给他重新签个名的话,去找个 Auto Sign 签名工具签署一下就行。

本文只是转载整理
 合并工具.rar (2.12 MB, 下载次数: 3148) 


这里再共享一个非常简单的合并工具,用这个工具可以批量合并ROM里面的apk和odex文件,只需两步
首先把你要合并的ROM解压到romdir文件夹里面,然后点击odextools.bat就可以了(注意同样要java环境和整个framework文件夹里面的文件

 odextools.rar (3.1 MB, 下载次数: 1351)   

来源: http://bbs.xda.cn/thread-10877925-1-1.html

相关参考:

1.反编译contacts.apk问题

http://bbs.hiapk.com/thread-3350926-1-1.html

2. Android APK反编译详解

http://blog.csdn.net/sunboy_2050/article/details/6727581

3.反编译之前用不用合并apk与odex

http://hi.baidu.com/mygalaxydddd/item/57220789ed87e82d100ef328


4.

【教程】安卓.odex反编译教程。小白经验,解决各种编译失败问题

http://tieba.baidu.com/p/2018941707


5.smali和baksmali下载地址

http://code.google.com/p/smali/downloads/list


6.APK反编译过程及用到的工具  

http://blog.163.com/fushaolin@126/blog/static/16341724220109195320860/

7.ROMapk odex
http://wenku.baidu.com/view/8e941ecda1c7aa00b52acbeb.html