修改system/framework下的odex文件常会遇到无法开机的情况,颇令各爱好动手的机油感到头痛,下面解决这一问题的方法分享给大家:
需要工具:
adb、baksmali-1.4.2.jar、smali-1.4.2.jar、jdk、dexopt-wrapper
以修改android.policy.odex为例
分解odex文件:
java -jar baksmali-1.4.2.jar -x android.policy.odex
把修改之后的文件生成odex文件
java -jar smali-1.4.2.jar out -o classes.dex
用winrar打开android.policy.jar,把得到的classes.dex拖进去。
接下来需要用到adb工具,手机端打开usb调试,在工作目录打开cmd,(操作小技巧:win7下shift+右键,选择在此处打开命令窗口即可。)
adb push android.policy.jar /sdcard/android.policy.jar把android.policy.jar复制到手机的内置卡。
adb shell --->
su --->获取root权限
mount -o rw,remount /system --->把/system目录改成能读写
busybox cp -f /system/framework/android.policy.jar /system/framework/android.policy.jar.bak --->把android.policy.jar拷贝一份命名为android.policy.jar.bak
busybox cp -f /system/framework/android.policy.odex /system/framework/android.policy.odex.bak --->把android.policy.odex.bak拷贝一份命名为android.policy.odex.bak
busybox cp -f /sdcard/android.policy.jar /system/framework/android.policy.jar --->把sd卡上我们编译好的android.policy.jar覆盖到/system/framework目录下
rm /system/framework/android.policy.odex --->删除原始的android.policy.odex
dexopt-wrapper /system/framework/android.policy.jar /system/framework/android.policy.odex,把android.policy.jar分解成android.policy.odex(说明:dexopt-wrapper放到system/bin下,权限0755)
busybox dd if=/system/framework/android.policy.odex.bak of=/system/framework/android.policy.odex bs=1 count=20 skip=52 seek=52 conv=notrunc拷贝备份的android.policy.odex.bak里的签名到新生成的android.policy.odex里
busybox cp -f /system/framework/android.policy.jar.bak /system/framework/android.policy.jar备份的android.policy.jar被重新命名并替换存在的android.policy.jar
rm /system/framework/android.policy.jar.bak删除备份文件android.policy.jar.bak
rm /system/framework/android.policy.odex.bak删除备份文件android.policy.odex.bak
复制代码
同时把其他相关文件修改完重启即可。
其中最重要的步骤是:
busybox dd if=/system/framework/android.policy.odex.bak of=/system/framework/android.policy.odex bs=1 count=20 skip=52 seek=52 conv=notrunc拷贝备份的android.policy.odex.bak里的签名到新生成的android.policy.odex里
adb、baksmali-1.4.2.jar、smali-1.4.2.jar、jdk、dexopt-wrapper
以修改android.policy.odex为例
分解odex文件:
java -jar baksmali-1.4.2.jar -x android.policy.odex
把修改之后的文件生成odex文件
java -jar smali-1.4.2.jar out -o classes.dex
用winrar打开android.policy.jar,把得到的classes.dex拖进去。
接下来需要用到adb工具,手机端打开usb调试,在工作目录打开cmd,(操作小技巧:win7下shift+右键,选择在此处打开命令窗口即可。)
adb push android.policy.jar /sdcard/android.policy.jar把android.policy.jar复制到手机的内置卡。
adb shell --->
su --->获取root权限
mount -o rw,remount /system --->把/system目录改成能读写
busybox cp -f /system/framework/android.policy.jar /system/framework/android.policy.jar.bak --->把android.policy.jar拷贝一份命名为android.policy.jar.bak
busybox cp -f /system/framework/android.policy.odex /system/framework/android.policy.odex.bak --->把android.policy.odex.bak拷贝一份命名为android.policy.odex.bak
busybox cp -f /sdcard/android.policy.jar /system/framework/android.policy.jar --->把sd卡上我们编译好的android.policy.jar覆盖到/system/framework目录下
rm /system/framework/android.policy.odex --->删除原始的android.policy.odex
dexopt-wrapper /system/framework/android.policy.jar /system/framework/android.policy.odex,把android.policy.jar分解成android.policy.odex(说明:dexopt-wrapper放到system/bin下,权限0755)
busybox dd if=/system/framework/android.policy.odex.bak of=/system/framework/android.policy.odex bs=1 count=20 skip=52 seek=52 conv=notrunc拷贝备份的android.policy.odex.bak里的签名到新生成的android.policy.odex里
busybox cp -f /system/framework/android.policy.jar.bak /system/framework/android.policy.jar备份的android.policy.jar被重新命名并替换存在的android.policy.jar
rm /system/framework/android.policy.jar.bak删除备份文件android.policy.jar.bak
rm /system/framework/android.policy.odex.bak删除备份文件android.policy.odex.bak
复制代码
同时把其他相关文件修改完重启即可。
其中最重要的步骤是:
busybox dd if=/system/framework/android.policy.odex.bak of=/system/framework/android.policy.odex bs=1 count=20 skip=52 seek=52 conv=notrunc拷贝备份的android.policy.odex.bak里的签名到新生成的android.policy.odex里