1、关于 miui 移植,水村发过一个教程,本贴讲述的方法与他大同小异。大家可以比较一下。首先介绍制作 rom 的环境我使用的工具:1.制作环境必须要有一个 Linux 操作系统,我用的是 ubuntu 10.4,JDK6,当然如果你能建立一个完整的编译 Android 系统的环境更好,如何建立这样的系统,网上有很多文章,这里就不多讲了。可以在物理硬盘分区上安装 Linux,也可以向我一样在 VirualBox 虚拟机上安装。2.厨房dsixda_Android_Kitchen虽然它只是个在终端下由脚本驱动的程序集,但对我们提高制作 rom的效率作用是巨大的,向 XDA 的大侠 dsixda 致敬
2、!完全掌握这个厨房的使用方法,需要写一篇单独的教程,本贴只针对移植所需的相关方法作出说明。1)解包和打包解包:把要打磨的 rom 包放到 original_update 目录中,rom 包的类型一般是 zip 压缩包,也可以是 img 镜像文件;运行厨房(menu 脚本),输入 1(Set up working folder from ROM),根据提示选择你要解包的那个文件号,厨房解包并创建工作目录(WORKING_xxx),如果已存在一个 WORKING_xxx 的工作目录,厨房会自动把它移到到 OLD_WORKING目录中。打包:输入 99(Build ROM from working
3、folder),厨房自动打包工作目录然后签名并把 rom 文件放到 OUTPUT_ZIP 目录中。2)deodex官方发布的 rom 一般都会把 apk 中的 dex 文件抽出并优化修改为同名的 odex 文件,为了修改它们,需要将这些 odex 文件打回到各自的 apk文件中,在厨房中输入 0(ADVANCED OPTIONS)-11(Deodex files in your ROM),厨房自动搜索工作目录下所有 odex 文件,根据提示输入即可。3)文件签名在(ADVANCED OPTIONS)屏输入 21(Sign APK file(s)),厨房搜索工作目录下所有 apk 文件,根据提示
4、输入,这里要注意,无论你选择哪一项,厨房都不会自动签名 framework 目录下的 apk 文件,需要你输入 s(自定义签名文件)。4)处理 boot.img此厨房一个非常强大的功能,你可以更换核心,修改 init 进程配置文件。在(ADVANCED OPTIONS)屏输入 20(Unpack or re-pack a boot.img)-输入 w(Extract kernel and ramdisk from boot.img in working folder)厨房将 boot.img 解包到目录 BOOT-EXTRACTED,其中文件 boot.img-kernel 为 android
5、 的 Linux 核心,你可以用其他的核心文件替换它,可以编辑这些文件,但不能改名。完成后输入b(Build boot.img from BOOT-EXTRACTED folder (for working folder)),重新打包创建新的 boot.img 文件并自动替换掉工作目录下的旧文件。提示:如果更换了核心,还需要更换 system/lib/modules/*为相应的文件!3.编译和反编译 classes.dex要用到两个工具,smali 和 baksmali,来自开源项目 smali,创建者是Jesus Freke(勘误),这两个工具可以在厨房/tools/deodex_files
6、 目录下找到。命令:java -Xmx512M -jar baksmali.jar -o classes/ classes.dex反编译 classes.dex 到当前 classes 目录命令:java -Xmx512M -jar smali.jar -o classes.dex classes/编译目录 classes 为 classes.dex4.编译和反编译资源文件apktool,来自开源项目 android-apktool,项目的创建者 Brut.alll非常厉害,他创建这个项目时还在读大学,他还破解了谷歌地图的限制。每一个 apk 几乎都会有自己的资源文件,android 还有一个
7、系统资源文件 framework/framework-res.apk,其他经过深度定制的系统可能还会有其他系统资源文件,例如 HTC(com.htc.resources.apk),miui 只有一个。工具 apktool 可将 apk 中的二进制资源反编译为可读的图片(*.9.png)或文本(*.xml),也可以反编译 classess.dex,我一般不用他的编译代码。例子:apktool d framework-res.apk */反编译文件并创建到 framewrok-res 目录apktool b framework-res framewrok-res.apk */编译 framewor
8、k-res 目录到 framework-res.apkapktool -help */获得工具使用帮助提示:apktool 反编译时,会在某些目录加上“-v4“后缀,重新编译前一定要删除这个后缀。开始移植移植采用的基本 rom 包是 miui 官方发布的 desire 机型的完整包,移植用到的 inc 文件我用的是 cm6.1 for incredible,下面对需要修改的内容作逐个说明:1.内核boot.imgsystem/lib/modules/*如果你用厨房解包 boot.img,替换其中的 Linux 核心,还需要修改boot.img-ramdisk 目录中相关的.rc 文件;初学者可
9、以从我的移植版中直接提取 boot.img 替换。之后再更换核心只需要替换 boot.img-kernel 文件就行了。2.固件和配置文件替换下列文件:system/lib/hw/*system/etc/firmware/*system/etc/AdieHWCodecSetting.csvsystem/etc/TPA2018.csvsystem/etc/event-log-tagssystem/etc/WPDB.zipsystem/etc/AudioBTID.csvsystem/lib/liblog.so(logcat 才能正常输出)删除 system/etc/init.d/04apps2sd
10、(必须关闭自带的 app2sd 功能,它与 inc 不兼容,否则无法进系统)添加system/etc/permissions/android.hardware.touchscreen.multitouch.distinct.xml 和 android.hardware.touchscreen.xml(这两个简单的文件却能影响多点触控功能)添加system/etc/permissions/android.hardware.telephony.cdma.xml(似乎可有可无)替换 user/keychars 和 user/keylayout 两个目录下 bravo-*为incrediblec-*文
11、件(键盘相关)添加 system/etc/init.d/98miuifixes98miuifixes 脚本内容:*#!/system/bin/sh# Fixes for MIUI on HTC Incredible# Author: n_i_x ()# # More info:# http:/forum.xda- Fix to prevent Settings FC. Settings requires apps2SD which we removed/system/bin/logwrapper /system/xbin/ln -s /mnt/sdcard /data/sd*上面的脚本中,添加
12、一个目录连接 sdcard-/data/sd,仍然是为了修补 app2sd 问题,否则点设置-SD 卡会 FC,由最早建立 miui for incredible 移植版本的 n_i_x 创建。还有一些文件可以删除,它们已经没用了:system/bin 目录下 app2sd 相关脚本和程序,system/app/stk.apk(sim 卡管理),systme/media/recovery.img(与 inc 不兼容,必须删除),system/etc/vold.conf(android2.2 中完全无用的东西)3.去除漫游标志编辑 system/framework/framework-res.a
13、pk在 res/xml/eri.xml 文件中插入下列行:*去除漫游标记的同时可显示运营商。4.内部存储替换 system/bin/vold在 system/etc/vold.fstab 文件里添加下列行:*dev_mount emmc /mnt/emmc 3 /devices/platform/msm_sdcc.3/mmc_host/mmc2*解压 system/framework/services.jar,反编译 classes.dex 文件,替换 com/android/server/目录下所有 Mount*的代码文件,我对 cm6.1的代码没有做任何修改;重新编译为 classes.d
14、ex 文件,替换掉services.jar 包内的原始 dex 文件。让 vold 正确识别并自动挂载 inc的内部存储。解压 system/app/MediaProvider.apk,反编译 classes.dex 文件,替换掉 com/android/providers/media/目录下所有 MediaScanner*代码文件,重新编译为 classes.dex,替换 MediaProvider.apk 中的原始dex 文件,让媒体库扫描内部存储。5.android 初始化文件和刷机脚本修改 system/build.prop将所有 bravo 变量修改为 incro.telephony
15、.default_network=0(gsm)修改为ro.telephony.default_network=4(cdma)其他修改请参照 cm6.1 或我的移植版。修改 META-INF/com/google/android/updater-scriptassert(getprop(“ro.product.device“) = “bravo“ |getprop(“ro.build.product“) = “bravo“);以上修改为assert(getprop(“ro.product.device“) = “inc“ | getprop(“ro.build.product“) = “inc“ | getprop(“ro.product.board“) = “inc“);至此,全部移植工作就做完了,打包-签名-刷机!祝你好运,哈哈。上述方法并非是一成不变的,随着 miui 版本演进,某些方法可能就会失效,但目前这些方法仍然是有效的。实际上,还有一项重要的功能没有被移植:格式化 SD 卡!这个就交给新大侠们来完成吧。本文涉及到的工具请自行到我链接的地址下载,不再另外提供!