ROM結構
如何移植MIUI?Android的ROM都是一個經過簽名的zip包,我們看一下這個zip包的格式:
移植方法
合并的方法比較簡單,以xUltimate為例,將app里面的所有文件拷到origi_app里面,將framework里面的所有文件拷到origi_frame里面,再運行程序,再過幾個選項就可以進行轉換了,轉換好會放到另一個文件夾里面,把原來的文件刪掉,把生成的放回去就可以了。如果轉換過程中失敗了,應該是JAVA的版本低了,升級到最新的JRE試一下。
如果用Droid Builder合并的話,稍微簡單一點,選擇ROM的文件夾,點Deodex就可以進行合并了。
del bin\apps2sd /s /q
del bin\apps2sd.hlp /s /q
del bin\boota2sd /s /q
del bin\busybox.a2sd /s /q
del bin\chka2sd /s /q
del bin\fixa2sd /s /q
del bin\jita2sd /s /q
del bin\launcha2sd /s /q
del bin\starta2sd /s /q
del etc\init.d\04apps2sd /s /q
del xbin\a2sd /s /q
del xbin\apps2sd /s /q
大家要注意的是APP2SD和A2SD+是兩個概念,大家可以自己去搜一下,如果大家有興趣,可以研究一下Incredible的A2SD+和DATA2SD+,這樣可以提高I/O速度。
bin/vold
這個文件是解決內部存儲(EMMC)的一部分,Incredible的內存分成了幾個分區,前面兩個是data和cache,第三個就是EMMC,早期的vold代碼在掛載一個掛載點的時候,是以磁盤為單位的,而不是以分區為單位,CM最新的代碼解決了這個問題,大家自己編譯或從新的ROM里拿就可以了。
etc/firmware
這整個文件夾都可以替換掉(注意,是etc下面的firmware)
etc/AdieHWCodecSetting.csv
這個要加進去,音頻解碼相關
etc/agps_rm
這個可以不用加,空文件,不知道有何用。為何險,可以加一下。
etc/AudioBTID.csv
音頻相關,替換掉
etc/gps.conf
GPS的配置,可以自己去搜一下,了解如何改后,可以自己動手改一下。
etc/TPA2018.csv
加進去,不知道何用。
etc/vold.fstab
分區表,必須替換,解決EMMC的另一步, 之后還有一步
lib/hw/lights.inc.so, lib/hw/sensors.inc.so
刪掉lights.bravo.so和sensors.bravo.so替換成這兩個。
lib/modules/bcm4329.ko
WIFI驅動,替換掉。
lib/liblog.so
打LOG用的,替換掉,不然,出錯了,沒法查LOG,不看LOG的同學可以不用換。
usr/keychars/incrediblec-keypad.kcm.bin
刪掉bravo-keypad.kcm.bin,替換成這個。這是個二進制文件,雖然我每次都替換了,但我從LOG來分析,這個文件一直沒起到作用,我看了很多Incredible的ROM,也包括官方的,這個文件一直沒變過,真是奇怪。
usr/keylayout/incrediblec-keypad.kl
刪掉bravo-keypad.kl,替換成這個。這個是Incredible的鍵盤布局配置。
到此為止,簡單的工作都做完了。下面要開始修改文件了。
修改刷機腳本
這個比較簡單,一般只要修改前面幾行,把條件改一下,再加一段歡迎詞,請對照我提供的文件進行修改。
修改build.prop
請對照我提供的文件進行修改,請注意一下,里面所有ro.cdma的都是需要的,有一行:
ro.cdma.home.operator.alpha=中國電信
有些編輯器可能會顯示成亂碼,如果不行,用記事本修改好了。
還有內部存儲相關的兩條配置也別忘了:
ro.phone_storage = 1
ro.additionalmounts=/mnt/emmc
做完了以上的步驟,Incredible的移植算完成了大部分了,已經可以做成刷機包試一下了,但還有幾個問題沒有解決:
內部存儲EMMC支持還差一步通知欄上面不會顯示中國電信,還會顯示漫游圖標圖庫和音樂播放器不支持內部存儲
這幾個問題不能光靠替換文件來完成,需要多做一些事情。我們要使用幾個工具來幫助我們來解決這幾個問題。
解決內部存儲問題
前面說過,MIUI基于早期的CM,MountService這個類不支持Incredible的內部存儲,我們要替換成CM的MountService代碼,因為代碼都已經編譯了,所以,我們要先進行反編譯。要用到baksmali工具,可以用我附件提供的工具包中的腳本。
先用解壓工具打開framework/services.jar,不用解壓,直接將classes.dex拖到工具包的文件夾中再拖動classes.dex到"解包dex.bat"上面,過一會兒,就會生成一個out文件夾將out文件夾重命名,隨便啥名都可以,比如services.miui用解壓工具打開我之前ROM里面services.jar,也用同樣的方法解包dex同樣將out文件夾重命名,比如services.cm打開services.cm/smali/com/android/server,在這個文件夾里面找到所有以MountService開頭的文件,拷貝并替換services.miui里面相應的文件完成替換后,將services.miui拖動到"打包dex.bat"上面,會生成一個out.dex的文件將out.dex重命名成classes.dex,直接替換framework/services.jar里面的文件就可以了,不用重新簽名這樣,MountService的替換就完成了
一個問題需要說明一下,一定要用我的ROM里面的services.jar,不能用CM的。我基于CM的代碼做了一點修改,解決內部存儲掛載的時候主界面FC的問題,具體的改動,改天我再寫一往篇來說明吧,其實,一共就改三行代碼。
解決漫游圖標的問題
這個問題比較好解決,用解壓工具打開我的ROM里面的framework/framework-res.apk,找到res/xml/eri.xml文件,替換掉MIUI里面的就可以了。也不用重新簽名。eri.xml文件是經過加密的。原文是:
< ?xml version="1.0" encoding="UTF-8"?>
< EriFile VersionNumber="1357" NumberOfEriEntries="1"EriFileType="1">
< CallPromptId Id="0" CallPromptText="CallPromptId0"/>
< CallPromptId Id="1" CallPromptText="CallPromptId1"/>
< CallPromptId Id="2" CallPromptText="CallPromptId2"/>
< EriInfo RoamingIndicator="128" IconIndex="1"IconMode="0" EriText="中國電信"CallPromptId="0" AlertId="0" />
< /EriFile>
解決圖庫和音樂對內部存儲的支持
跟解決MountService的方法類似,要替換app/MediaProvider.apk里面的MediaScannerReceiver和MediaScannerService開頭的文件,這個可以用我或者是CM里面的替換都可以。更簡單的方法,直接替換MediaProvider.apk文件也是可以的。因為最近這個apk好像都沒有改動。
這樣,我們的移植就算完成了,接下來就是生成ROM了,我們用壓縮工具將ROM打包成zip格式,注意目錄結構,生成的zip根目錄就有MATE-INF和system,別搞錯了。將打包好的zip文件拷到工具包當中,改成update.zip,再雙擊sign.bat進行簽名,簽名后就生成了update_signed.zip了。
移植MIUI基本都是大同小異。
把簽名后的ROM拷到卡上刷機吧~~