日期:2014-05-20  浏览次数:20724 次

如何修改framework下面的odex文件
android系统,一般分为工程版本和用户版本。而一般用户拿到的系统,都是用户版,用户版的直觉表面上的区别就是/system/framework和/system/app下的jar和apk文件都被odex化了。
对于/system/app下的odex,我们使用baksmali工具,就可以反编译出smali文件,我们对些smali文件做修改之后,在目标机器上,使用dexopt-wrapper工具进行odex化之后,push到/system/app下就ok。但是,对于framework下面的文件,一般不能如此修改,修改之后,push到/system/framework下面的时候,一般都会把系统搞挂掉。如果framework下面文件不能修改,那么玩android系统不是缺少很多乐趣?
通过谷歌和百度,看了很多文章,尝试很多方法,最终搞定这个问题。我看了网上有很多机油都在寻找这个方法,现在把我的方法分享出来。
特别值得一提的就是xda上的大神M_J_Nazari文章:http://forum.xda-developers.com/showthread.php?t=1608767
 [Toturial][Windows] How Editing The ODEX framework files?
这个方法需要改进一下就可以适合各种机型了。
framework下面的odex进行反编译之后,在打包,push到机器上运行不起来主要有两点原因。
第一点,就是framework下面的jar包,很多都是dalvik虚拟需要使用的BOOTCLASSPATH,android对此有特别的安全机制,所有我们进行odex化的时候,需要加入$BOOTCLASSPATH
第二点,就是签名的问题,如果前面不对,那么还是会启动fail的,这个我们copy原有的odex文件头就可以解决。
具体的方法,我们以下面一个例子,修改android.policy.odex为例子。
我们提取目标机器中的android.policy.odex和android.policy.jar的,然后使用baksmali,修改smali之后,使用smali工具之后,打包成classes.dex,然后替换到android.policy.jar中。
下面开始我们的正文方法:
1,在/data/local/tmp中建立一个zangcf_changed目录和zangcf_original目录
adb shell
cd /data/local/tmp
mkdir zangcf_changed
mkdir zangcf_original
exit
2,把原始文件和修改后的文件copy到目标机器
adb shell
adb push ./zangcf_changed/android.policy.jar /data/local/tmp/zangcf_changed/
adb push ./zangcf_original/android.policy.jar /data/local/tmp/zangcf_original/
adb push ./zangcf_original/android.policy.odex /data/local/tmp/zangcf_original/
exit
3, 准备执行环境
adb shell
su
mount -o rw,remount /system
chmod 777 /system/bin
chmod 777 /system/framework/
exit
exit
adb push ./dexopt-wrapper /system/bin
adb shell
su
chmod 777 /system/bin/dexopt-wrapper
exit
exit
4, 进行odex化
adb shell
su
cp /data/local/tmp/zangcf_changed/android.policy.jar /system/framework/android.policy.jar
dexopt-wrapper /system/framework/android.policy.jar /system/framework/new_android.policy.odex $BOOTCLASSPATH

cp -f /sdcard/amestris_original/android.policy.jar /system/framework

chmod 777 /system/framework/android.policy.odex
chmod 777 /system/framework/android.policy.jar
chmod 777 /system/framework/new_android.policy.odex
exit

5, copy原文件的头。
adb shell
su
busybox dd if=/system/framework/android.policy.odex of=/system/framework/new_android.policy.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
cp /system/framework/new_android.policy.odex /system/framework/android.policy.odex
exit
exit

6, 删除临时文件和修改文件属性
adb shell
su
chmod 644 /system/framework/android.policy.odex
chown root.root /system/framework/android.policy.odex
rm /system/framework/new_android.policy.odex
exit
exit

7,ok,然后重启
adb reboot

一切顺利,那么你将见到熟悉的解锁界面和桌面。