簡單易懂的Android ROM定制與修改教程
每個人對手機都有不同的要求,這里我想談談修改ROM的方法。玩Android手機可分為四個層次:
1。最高境界:像大神這樣的,對Android系統十分熟悉,能夠編寫系統代碼。
2。大大境界:能夠修改代碼和編譯,需要熟悉linux系統和具備編程知識。
3。高手境界:能夠在非代碼級修改ROM,美化ROM。
4。普通境界:會玩,會設置等。
前兩個層次要花大力氣學習,我們大部分人可以通過努力達到第三層。修改ROM大致可分為:精簡、增補、美化三類,這里主要討論的是精簡和增補兩個方面。
一.首先來看看ROM中到底有些什么
用WinRAR打開刷機包后可以看到幾個目錄,下面列出了和我們有關的幾個目錄和說明:
dev_data/apps/ : 系統程序的apk文件目錄,相當于刷機后 "/data/app_s/",這里的程序刷機后不可卸載。
dev_data/app/ : 用戶程序apk文件目錄,相當于刷機后 "/data/app/",這里的程序刷機后可卸載。(10月28日以后的版本中才有,以前的版本大家可以自己加這個目錄)
META-INF/com/google/android/ : 刷機腳本文件。
system/etc/ :存放了一些配置文件。
system/etc/permissions/ : 和軟件權限有關,部分補丁需要在這個目錄中添加文件。
system/lib/ : 系統程序的庫文件存放位置。
二.再來認識一下刷機腳本文件
用recovery刷機時,刷機過程由腳本文件控制。 腳本文件就是壓縮包中 META-INF\com\google\android 目錄下的 update-script文件,用文本編輯器可以打開。
腳本文件中有這么幾條語句是我們關心的:
(1) show_progress 0.1 0
顯示進度條
這是用來顯示刷機進度條的,前面的0.1表示進度條的位置,可以改為別的數值(小于1)。后面的數字不清楚是什么含義,大體上除了最后一條為10,其他都為0。有些ROM在刷機時會出現刷機完成了進度條才走到一半多點,大家可以試試把最后一句改為 show_progress 0.8 10,進度條就可以走到底了。
(2)幾個關鍵字
- "SYSTEM:" 代表刷機后的系統目錄 = "/system/"
- "INTERNAL:" 代表刷機后的 /data 目錄 = "/data/"
- "PACKAGE:" 代表壓縮包的根目錄
例如 "SYSTEM:etc/ " 相當于刷機后的 "/system/etc/" 目錄PACKAGE:dev_data" 相當于壓縮包中的 dev_data 目錄
(3) copy_dir PACKAGE:dev_data INTERNAL:
copy_dir 是用來復制目錄的,前一個參數是要復制的目錄,后一個參數是復制到那里。例如:
copy_dir PACKAGE:dev_data INTERNAL:
是用來把ROM壓縮包中dev_data目錄中的東西復制到刷機后的"/data/"目錄下
(4)set_perm_recursive 0 2000 0755 0755 SYSTEM:bin
設置目錄或文件權限的,使用方法和linux中設置權限的方法類似。
(5)delete SYSTEM:app/YouTube.apk
刪除文件,這個一般用不到,要刪除的話,直接刪就是了。
好了,可以動手精簡和增加程序了:
三.精簡系統程序
所謂精簡實際上就是刪除系統程序,我們用不到的那些程序可以刪除掉。刪除這些程序好處在于:
- 有些東西是我們用不到的,顯示在程序列表中很煩人,如果這樣的程序過多也會導致打開程序列表過慢。
- 有些程序啟動后會占用內存而我們又用不到。例如,短信攔截等。
- 有些程序不想用原ROM中自帶的,想換個別的,例如不喜歡ADW,改用LAUNCH PRO等。
精簡的方法很簡單,用WinRAR打開ROM,進入dev_data\apps中找到不要的程序,刪除。那些程序可以精簡,這個各個機型一般都有精簡列表,網上隨便搜索!
四.添加程序
添加程序有兩個方法,一是把程序添加為系統程序,二是添加為用戶程序。 把程序添加為系統程序的好處在于執行速度快,缺點是不能直接卸載,只有通過RE等工具刪除。其實用RE直接刪除系統程序APK文件時并非都卸載干凈了,不信大家可以看看/data/data/這個目錄,每個程序都對應了一個目標,其目錄名和程序包的名稱相同(不是XXX.APK這個XXX)。
1.添加系統程序:
添加系統程序方法最簡單:
第一步,用WinRAR打開ROM壓縮文件,進入 "\dev_data\app_s" 這個目錄,把要添加的程序的APK文件復制進去。
第二步,用WinRAR打開要添加進去的APK文件看看“\lib\armeabi”目錄中是否有.so結尾的文件,它們是程序運行時需要用到的庫文件,有的話把他們復制到壓縮包中的“system/lib/”目錄中。有些童鞋在修改ROM的時候添加的程序無法執行,大多屬于這個情況。例如新版本的谷歌拼音輸入法。
2.添加用戶程序:
添加用戶程序稍微麻煩點,但是刷機后可直接卸載。如果用的是10月28日以后的ROM,直接把apk拖入"dev_data/app/"目錄中。這一步很簡單,麻煩的是apk中有庫文件的情況。簡單處理方法同添加系統程序中的第2步,這種方法的缺點是卸載時庫文件還會保留在“system/lib/”中,好在大多數程序都沒有庫文件,少數程序保留下來的庫文件并無大礙。高級點的方法是通過寫腳本進行安裝。
10月28日以前的ROM在“dev_data/”中沒有app這個目錄,大家可以自己建立(winRAR中點擊右鍵,選創建一個新文件夾),建立好目錄后要在刷機腳本中設置目錄屬性:
在刷機腳本中找到這一段:
copy_dir ACKAGE:dev_dataINTERNAL: set_perm 1000 1000 0771 INTERNAL:app_s
在其后加上這一句:
set_perm 1000 1000 0771 INTERNAL:app
其中第一句是把ROM中dev_data目錄中的所有東東復制到/data目錄下,第二句是設置 app_s的權限。我們加的那一句是設置app的權限接下來可以修補,調整ROM了。
五.firstboot腳本
要對ROM進行高級點的設置,可以利用firstboot.sh腳本。firstboot.sh腳本在ROM中的dev_data目錄中。腳本中的代碼是在刷完機后第一次啟動時執行的,利用它可以對系統進行設置,安裝APK等工作。看看liudidi1028rom中的腳本片段:
- # System defaultsettings/system/xbin/sqlite3
- $DATABASE "INSERT INTO system (name, value) VALUES ('trackball_wake_screen', 1);" /system/xbin/sqlite3
- $DATABASE "INSERT INTO system (name, value) VALUES('trackball_unlock_screen', 1);" /system/xbin/sqlite3
- $DATABASE "INSERT INTO system (name, value) VALUES ('lock_home_in_memory', 1);"
我想大家應該可以猜出這三句代碼的作用了吧。至于腳本這么寫,不要來問我,我也不熟,大家可以共同研究。在腳本中可以使用rm,mv等命令,用它可以直接把某些配置文件覆蓋掉。例如:
busybox rm /system/etc/某文件busybox mv /system/etc/某文件
當然,如果修改的是系統文件,先要取得權限:
busybox mount -o remount,rw /system
之后再改為只讀 :
busybox mount -o remount,ro /system
六.ROM常見的系統配置文件
修改這些文件可以調整系統設置:
1。\system\etc\spn-conf.xml:顯示營運商的。例如:
- <?xml version="1.0" encoding="utf-8"?>
- <spnOverrides>
- <spnspnOverridenumericspnOverridenumeric="46001"spn="中國聯通"/>
- <spnspnOverridenumericspnOverridenumeric="46000"spn="中國移動/>
- <spnspnOverridenumericspnOverridenumeric="46002"spn="中國移動"/>
- </spnOverrides>
如果下載的ROM中顯示的是英文,可以試著修改這個文件。
2。\system\etc\gps.conf:和GPS搜星相關,所謂提高搜星速度就是修改這個文件了。
方法:把文件中 NTP_SERVER=XXXXX.pool.ntp.org改為NTP_SERVER=cn.pool.ntp.org。我試過,這個網站ping的速度的確比原始設置中的那個要快一倍以上。
3。\system\bin\rc:這個大家應該很熟悉了,用來設置Swap,Compcache之類的。
(1)設置SWAP
進入文件后找到
####################
###### Swap ########
####################
其后的代碼是和開啟Swap有關的,例如:
SWAPNUM=`fdisk -l /dev/block/mmcblk1|grep swap|sed -e 's/ .*//g'`if [ -n "$SWAPNUM" ];thencho 60 > /proc/sys/vm/swappinessswapon $SWAPNUMfi
在每行前面加#注釋掉后就可以不開機啟動swap了。
要改swappiness的大小可以該第三行中的60這個數字。
設置 Compcache大家可以自己試試
(2)修改內存管理參數
在rc文件中加入這一行:
echo "1536,1536,3072,1536,10240,12800" >/sys/module/lowmemorykiller/parameters/minfree
其中的數字從左到右為:前臺進程、可見進程、次 要服務、后臺服務、內容供應節點、空進程,其中的數值的單位是4k,也就是說1536 : 4k*1536=6144k=6M
4。 \system\etc\apns-conf.xml:和網絡接入點設置有關。
例如,和移動聯通有關的設置:
- <apn carrier="中國移動 (Internet)" apn="cmnet" mcc="460" mnc="00" type="default,supl" />
- <apn carrier="中國移動 (WAP)" apn="cmwap" proxy="10.0.0.172" port="80" mcc="460" mnc="00" type="default,supl" />
- <apn carrier="中國移動 (MMS)" apn="cmwap" mmsc="http://mmsc.monternet.com" mmsproxy="10.0.0.172" mmsport="80" mcc="460" mnc="00" type="mms" />
- <apn carrier="中國聯通 (Internet)" apn="3gnet" mcc="460" mnc="01" type="default,supl" />
- <apn carrier="中國聯通 (WAP)" apn="3gwap" proxy="10.0.0.172" port="80" mcc="460" mnc="01" type="default,supl" />
- <apn carrier="中國聯通 (MMS)" apn="3gwap" mmsc="http://mmsc.myuni.com.cn" mmsproxy="10.0.0.172" mmsport="80" mcc="460" mnc="01" type="mms" />
- <apn carrier="中國移動 (Internet)" apn="cmnet" mcc="460" mnc="02" type="default,supl" />
- <apn carrier="中國移動 (WAP)" apn="cmwap" proxy="10.0.0.172" port="80" mcc="460" mnc="02" type="default,supl" />
- <apn carrier="中國移動 (MMS)" apn="cmwap" mmsc="http://mmsc.monternet.com" mmsproxy="10.0.0.172" mmsport="80" mcc="460" mnc="02" type="mms" />
如果ROM中沒有自帶apn設置,可以在這個文件中加入,如果ROM中顯示的接入點名稱不是中文也可以通過修改這個來實現
注意
1. 修改ROM時最好不要解壓縮,直接在WINRAR中操作,因為ROM應該是在Linux中壓縮的,壓縮格式可能會和在weindows下直接用winRAR壓縮出來的不同。
2. 包中的文件不要有中文文件名。
3. 刷機前一定要備份,修改的ROM要是有什么地方弄錯了很容易進不了系統。