本教程主要内容有:Android系统文件夹结构解析、应用软件说明、定制精简、ROM签名把包等内容。本教程测试平台为HTC G2、G3这两个型号,其它机型可以借鉴,刷机有风险,出问题自负。其实这个教程一早就想写的,但由于时间及本人的懒惰,一直拖着。今晚终于静下心来写好本文,本文有部份内容来自于网络。
速度与华丽,你喜欢那个。是不是想要一个又够速度又华丽的ROM呢?我是一个追求新鲜的人,对于手机的ROM,我又追求稳定、精简、美观、省电。现在Hero ROM有很多,最新的有第三方Android 2.1版本,但这些ROM的制作者都会跟据自已的个人喜欢会增加和增少相应的功能或是界面,但我们往往不喜欢这些ROM的某些小方面,所以随着而来面对的问题就是怎样把这个ROM修改成为一个自已真正需要的ROM呢?以往一直是依靠“大杀器”来解决,但觉得还是过于麻烦,所以寻求办法自己动手修改ROM。于是有了本文。废话少说,进入正题。
一、Android系统文件夹结构
一个完整的ROM根目录会有以下几个文件夹及文件:
data
META-IN
system
boot.img
系统目录说明
1. 应用程序安装目录
1) 系统应用程序所在目录
/system/app/*.apk
2)用户安装应用程序所在目录
/data/app/*.apk
3) 注意:
a)在模拟器中,每重启一次,/system/app/下的应用都会被还原,有时/data/app下也会被清除
b)若在/system/app和/data/app下有重名的应用,不一定会启动哪一个,尤其是在adb install杀死正在运行的程序时,有时旧的就会被启动2.用户数据所在目录
/data/data/应用包名/shared_prefs 配置文件
/data/data/应用包名/databases/* 库文件所在目录3. SD卡对应目录
/sdcard/
而我们需要处理的只是两个文件夹里面的内容:
data/app –该文本夹里的文件可以全删,也可以自由添加自已所需安装的应用软件,刷机安装后可以自由删除。
system/app –在这个文件夹下的程序为系统默认的组件,可以看到都是以APK格式结尾的文件,但有些自制的ROM里面还有和APK文件名对应的odex文件。我们主要是针对该文件夹里的文件进行精简,如果有odex文件的,删除APK文件名时同时也删除与其对应的odex文件。
虽然一般定制时只是对以上两个文件夹里的文件做相应的增减,但我们还是一起来了解system相应目录相应文件的用途吧。(rom版本不同里面的APK也会不一样)
//system//app
//system//app//AlarmClock.apk 闹钟
//system//app//Browser.apk 浏览器
//system//app//Bugreport.apk Bug报告
//system//app//Calculator.apk 计算器
//system//app//Calendar.apk 日历
//system//app//CalendarProvider.apk 日历提供
//system//app//Camera.apk 照相机
//system//app//com.amazon.mp3.apk 亚马逊音乐
//system//app//Contacts.apk 联系人
//system//app//DownloadProvider.apk 下载提供
//system//app//DrmProvider.apk DRM数字版权提供
//system//app//Email.apk 电子邮件客户端
//system//app//FieldTest.apk 测试程序
//system//app//GDataFeedsProvider.apk GoogleData提供
//system//app//Gmail.apk Gmail电子邮件
//system//app//GmailProvider.apk Gmail提供
//system//app//GoogleApps.apk 谷歌程序包
//system//app//GoogleSearch.apk 搜索工具
//system//app//gtalkservice.apk GTalk服务
//system//app//HTMLViewer.apk HTML查看器
//system//app//HtcTwitter.apk 集成Twitter客户端PEEP
//system//app//IM.apk 即使通讯组件包含MSN、yahoo通
//system//app//ImCredentialProvider.apk
//system//app//ImProvider.apk
//system//app//Launcher.apk 启动加载器
//system//app//HtcNaviPanel.apk 导航软件
//system//app//Maps.apk 电子地图
//system//app//MediaProvider.apk 多媒体播放提供
//system//app//Mms.apk 短信、彩信
//system//app//Music.apk 音乐播放器
//system//app//MyFaves.apk T-Mobile MyFaves程序
//system//app//NewsReader.apk 新闻阅读器
//system//app//PackageInstaller.apk apk安装程序
//system//app//Phone.apk 电话拨号器
//system//app//Settings.apk 系统设置
//system//app//SettingsProvider.apk 设置提供
//system//app//SetupWizard.apk 设置向导
//system//app//SoundRecorder.apk 录音工具
//system//app//Street.apk 街景地图
//system//app//Sync.apk 同步程序
//system//app//Talk.apk 语音程序
//system//app//TelephonyProvider.apk 电话提供
//system//app//Updater.apk 更新程序
//system//app//VpnServices.apk VPN服务
//system//app//Vending.apk 制造商信息
//system//app//VoiceDialer.apk 语音拨号器
//system//app//VoiceSearch.apk 语音搜索
//system//app//YouTube.apk Youtube视频
//system//bin
这个目录下的文件都是系统的本地程序,从bin文件夹名称可以看出是binary二进制的程序,里面主要是Linux系统自带的组件,Android手机网就主要文件做下简单的分析介绍:
//system//bin//akmd
//system//bin//am
//system//bin//app_process 系统进程
//system//bin//dalvikvm Dalvik虚拟机宿主
//system//bin//dbus-daemon 系统BUS总线监控
//system//bin//debuggerd 调试器
//system//bin//debug_tool 调试工具
//system//bin//dexopt DEX选项
//system//bin//dhcpcd DHCP服务器
//system//bin//dumpstate 状态抓取器
//system//bin//dumpsys 系统抓取器
//system//bin//dvz
//system//bin//fillup
//system//bin//flash_image 闪存映像
//system//bin//hciattach
//system//bin//hcid HCID内核
//system//bin//hostapd
//system//bin//hostapd_cli
//system//bin//htclogkernel
//system//bin//input
//system//bin//installd
//system//bin//itr
//system//bin//linker
//system//bin//logcat Logcat日志打印
//system//bin//logwrapper
//system//bin//mediaserver
//system//bin//monkey
//system//bin//mountd 存储挂载器
//system//bin//netcfg 网络设置
//system//bin//ping Ping程序
//system//bin//playmp3 MP3播放器
//system//bin//pm 包管理器
//system//bin//qemud QEMU虚拟机
//system//bin//radiooptions 无线选项
//system//bin//rild RIL组件
//system//bin//sdptool
//system//bin//sdutil
//system//bin//service
//system//bin//servicemanager 服务管理器
//system//bin//sh
//system//bin//ssltest SSL测试
//system//bin//surfaceflinger 触摸感应驱动
//system//bin//svc 服务
//system//bin//system_server
//system//bin//telnetd Telnet组件
//system//bin//toolbox
//system//bin//wlan_loader
//system//bin//wpa_cli
//system//bin//wpa_supplicant
//system//etc
从文件夹名称来看保存的都是系统的配置文件,比如APN接入点设置等核心配置。
//system//etc//apns-conf.xml APN接入点配置文件
//system//etc//AudioFilter.csv 音频过滤器配置文件
//system//etc//AudioPara4.csv
//system//etc//bookmarks.xml 书签数据库
//system//etc//dbus.conf 总线监视配置文件
//system//etc//dhcpcd
//system//etc//event-log-tags
//system//etc//favorites.xml 收藏夹
//system//etc//firmware 固件信息
//system//etc//gps.conf GPS设置文件
//system//etc//hcid.conf内核HCID配置文件
//system//etc//hosts 网络DNS缓存
//system//etc//init.goldfish.sh
//system//etc//location 定位相关
//system//etc//mountd.conf 存储挂载配置文件
//system//etc//NOTICE.html 提示网页
//system//etc//permissions.xml 权限许可
//system//etc//pvplayer.conf
//system//etc//security
//system//etc//wifi WLAN相关组件
//system//etc//dhcpcd//dhcpcd-hooks
//system//etc//dhcpcd//dhcpcd-run-hooks
//system//etc//dhcpcd//dhcpcd.conf
//system//etc//dhcpcd//dhcpcd-hooks//01-test
//system//etc//dhcpcd//dhcpcd-hooks//20-dns.conf
//system//etc//dhcpcd//dhcpcd-hooks//95-configured
//system//etc//firmware//brf6300.bin
//system//etc//location//gps
//system//etc//location//gps//location 定位相关
//system//etc//location//gps//nmea GPS数据解析
//system//etc//location//gps//properties
//system//etc//security//cacerts.bks
//system//etc//security//otacerts.zip OTA下载验证
//system//etc//wifi//Fw1251r1c.bin
//system//etc//wifi//tiwlan.ini
//system//etc//wifi//wpa_supplicant.conf WPA验证组件
//system//fonts
字体文件夹,除了标准字体和粗体、斜体外可以看到文件体积最大的可能是中文字库,或一些unicode字库,从T- Mobile G1上可以清楚的看到显示简体中文正常,其中DroidSansFallback.ttf文件大小
//system//fonts//DroidSans-Bold.ttf
//system//fonts//DroidSans.ttf
//system//fonts//DroidSansFallback.ttf
//system//fonts//DroidSansMono.ttf
//system//fonts//DroidSerif-Bold.ttf
//system//fonts//DroidSerif-BoldItalic.ttf
//system//fonts//DroidSerif-Italic.ttf
//system//fonts//DroidSerif-Regular.ttf
//system//framework
framework主要是一些核心的文件,从后缀名为jar可以看出是是系统平台框架。
//system//framework//am.jar
//system//framework//am.odex
//system//framework//android.awt.jar AWT库
//system//framework//android.awt.odex
//system//framework//android.policy.jar
//system//framework//android.policy.odex
//system//framework//android.test.runner.jar
//system//framework//android.test.runner.odex
//system//framework//com.google.android.gtalkservice.jar GTalk服务
//system//framework//com.google.android.gtalkservice.odex
//system//framework//com.google.android.maps.jar 电子地图库
//system//framework//com.google.android.maps.odex
//system//framework//core.jar 核心库,启动桌面时首先加载这个
//system//framework//core.odex
//system//framework//ext.jar
//system//framework//ext.odex
//system//framework//framework-res.apk
//system//framework//framework-tests.jar
//system//framework//framework-tests.odex
//system//framework//framework.jar
//system//framework//framework.odex
//system//framework//input.jar 输入库
//system//framework//input.odex
//system//framework//itr.jar
//system//framework//itr.odex
//system//framework//monkey.jar
//system//framework//monkey.odex
//system//framework//pm.jar 包管理库
//system//framework//pm.odex
//system//framework//services.jar
//system//framework//services.odex
//system//framework//ssltest.jar
//system//framework//ssltest.odex
//system//framework//svc.jar 系统服务
//system//framework//svc.odex
//system//lib
lib目录中存放的主要是系统底层库,如平台运行时库。
//system//lib//libaes.so
//system//lib//libagl.so
//system//lib//libandroid_runtime.so Android运行时库
//system//lib//libandroid_servers.so 系统服务组件
//system//lib//libaudio.so 音频处理
//system//lib//libaudioeq.so EQ均衡器
//system//lib//libaudioflinger.so 音频过滤器
//system//lib//libbluetooth.so 蓝牙组件
//system//lib//libc.so
//system//lib//libcamera.so 超相机组件
//system//lib//libcameraservice.so
//system//lib//libcorecg.so
//system//lib//libcrypto.so 加密组件
//system//lib//libctest.so
//system//lib//libcutils.so
//system//lib//libdbus.so
//system//lib//libdl.so
//system//lib//libdrm1.so DRM解析库
//system//lib//libdrm1_jni.so
//system//lib//libdvm.so
//system//lib//libexif.so
//system//lib//libexpat.so
//system//lib//libFFTEm.so
//system//lib//libGLES_CM.so
//system//lib//libgps.so
//system//lib//libhardware.so
//system//lib//libhgl.so
//system//lib//libhtc_ril.so
//system//lib//libicudata.so
//system//lib//libicui18n.so
//system//lib//libicuuc.so
//system//lib//liblog.so
//system//lib//libm.so
//system//lib//libmedia.so
//system//lib//libmediaplayerservice.so
//system//lib//libmedia_jni.so
//system//lib//libnativehelper.so
//system//lib//libnetutils.so
//system//lib//libOmxCore.so
//system//lib//libOmxH264Dec.so
//system//lib//libpixelflinger.so
//system//lib//libpvasf.so
//system//lib//libpvasfreg.so
//system//lib//libpvauthor.so
//system//lib//libpvcommon.so
//system//lib//libpvdownload.so
//system//lib//libpvdownloadreg.so
//system//lib//libpvmp4.so
//system//lib//libpvmp4reg.so
//system//lib//libpvnet_support.so
//system//lib//libpvplayer.so
//system//lib//libpvrtsp.so
//system//lib//libpvrtspreg.so
//system//lib//libqcamera.so
//system//lib//libreference-ril.so
//system//lib//libril.so
//system//lib//librpc.so
//system//lib//libsgl.so
//system//lib//libsonivox.so
//system//lib//libsoundpool.so
//system//lib//libsqlite.so
//system//lib//libssl.so
//system//lib//libstdc++.so
//system//lib//libsurfaceflinger.so
//system//lib//libsystem_server.so
//system//lib//libthread_db.so
//system//lib//libUAPI_jni.so
//system//lib//libui.so
//system//lib//libutils.so
//system//lib//libvorbisidec.so
//system//lib//libwbxml.so
//system//lib//libwbxml_jni.so
//system//lib//libwebcore.so
//system//lib//libwpa_client.so
//system//lib//libxml2wbxml.so
//system//lib//libz.so
//system//lib//modules
//system//lib//modules//wlan.ko
//system//media
铃声音乐文件夹,除了常规的铃声外还有一些系统提示事件音
//system//media//audio
//system//media//audio//alarms 闹铃音
//system//media//audio//notifications 提示音
//system//media//audio//ringtones 铃声
//system//media//audio//ui 界面操作事件音
//system//media//audio//alarms//Alarm_Beep_01.ogg
//system//media//audio//alarms//Alarm_Beep_02.ogg
//system//media//audio//alarms//Alarm_Beep_03.ogg
//system//media//audio//alarms//Alarm_Buzzer.ogg
//system//media//audio//alarms//Alarm_Classic.ogg
//system//media//audio//alarms//Alarm_Rooster_02.ogg
//system//media//audio//notifications//Beat_Box_Android.ogg
//system//media//audio//notifications//CaffeineSnake.ogg
//system//media//audio//notifications//DearDeer.ogg
//system//media//audio//notifications//DontPanic.ogg
//system//media//audio//notifications//F1_MissedCall.ogg
//system//media//audio//notifications//F1_New_MMS.ogg
//system//media//audio//notifications//F1_New_SMS.ogg
//system//media//audio//notifications//Heaven.ogg
//system//media//audio//notifications//Highwire.ogg
//system//media//audio//notifications//KzurbSonar.ogg
//system//media//audio//notifications//OnTheHunt.ogg
//system//media//audio//notifications//TaDa.ogg
//system//media//audio//notifications//Tinkerbell.ogg
//system//media//audio//notifications//Voila.ogg
//system//media//audio//ringtones//BeatPlucker.ogg
//system//media//audio//ringtones//BentleyDubs.ogg
//system//media//audio//ringtones//BirdLoop.ogg
//system//media//audio//ringtones//CaribbeanIce.ogg
//system//media//audio//ringtones//CrazyDream.ogg
//system//media//audio//ringtones//CurveBall.ogg
//system//media//audio//ringtones//DreamTheme.ogg
//system//media//audio//ringtones//EtherShake.ogg
//system//media//audio//ringtones//FriendlyGhost.ogg
//system//media//audio//ringtones//GameOverGuitar.ogg
//system//media//audio//ringtones//Growl.ogg
//system//media//audio//ringtones//InsertCoin.ogg
//system//media//audio//ringtones//LoopyLounge.ogg
//system//media//audio//ringtones//LoveFlute.ogg
//system//media//audio//ringtones//MidEvilJaunt.ogg
//system//media//audio//ringtones//MildlyAlarming.ogg
//system//media//audio//ringtones//NewPlayer.ogg
//system//media//audio//ringtones//Noises1.ogg
//system//media//audio//ringtones//Noises2.ogg
//system//media//audio//ringtones//Noises3.ogg
//system//media//audio//ringtones//OrganDub.ogg
//system//media//audio//ringtones//Ring_Classic_02.ogg
//system//media//audio//ringtones//Ring_Digital_02.ogg
//system//media//audio//ringtones//Ring_Synth_02.ogg
//system//media//audio//ringtones//Ring_Synth_04.ogg
//system//media//audio//ringtones//RomancingTheTone.ogg
//system//media//audio//ringtones//SitarVsSitar.ogg
//system//media//audio//ringtones//SpringyJalopy.ogg
//system//media//audio//ringtones//T-Jingle.ogg
//system//media//audio//ringtones//Terminated.ogg
//system//media//audio//ringtones//TwirlAway.ogg
//system//media//audio//ringtones//VeryAlarmed.ogg
//system//media//audio//ringtones//World.ogg
//system//media//audio//ui//Effect_Tick.ogg
//system//sounds
默认的音乐测试文件,仅有一个test.mid文件,用于播放测试的文件。
//system//sounds//test.mid
//system//usr
用户文件夹,包含共享、键盘布局、时间区域文件等。
//system//usr//keychars
//system//usr//keylayout
//system//usr//share
//system//usr//srec
//system//usr//keychars//qwerty.kcm.bin
//system//usr//keychars//qwerty2.kcm.bin
//system//usr//keychars//trout-keypad-qwertz.kcm.bin
//system//usr//keychars//trout-keypad-v2.kcm.bin
//system//usr//keychars//trout-keypad-v3.kcm.bin
//system//usr//keychars//trout-keypad.kcm.bin
//system//usr//keylayout//h2w_headset.kl
//system//usr//keylayout//qwerty.kl
//system//usr//keylayout//trout-keypad-qwertz.kl
//system//usr//keylayout//trout-keypad-v2.kl
//system//usr//keylayout//trout-keypad-v3.kl
//system//usr//keylayout//trout-keypad.kl
//system//usr//share//bsk
//system//usr//share//zoneinfo
//system//usr//share//bsk//V_FD_speed_101.bsk
//system//usr//share//bsk//V_FD_std_101.bsk
//system//usr//share//zoneinfo//zoneinfo.dat
//system//usr//share//zoneinfo//zoneinfo.idx
//system//usr//srec//config
//system//usr//srec//config//en.us
//system//usr//srec//config//en.us//baseline.par
//system//usr//srec//config//en.us//baseline11k.par
//system//usr//srec//config//en.us//baseline8k.par
//system//usr//srec//config//en.us//dictionary
//system//usr//srec//config//en.us//g2p
//system//usr//srec//config//en.us//grammars
//system//usr//srec//config//en.us//models
//system//usr//srec//config//en.us//dictionary//basic.ok
//system//usr//srec//config//en.us//dictionary//cmu6plus.ok.zip
//system//usr//srec//config//en.us//dictionary//enroll.ok
//system//usr//srec//config//en.us//g2p//en-US-ttp.data
//system//usr//srec//config//en.us//grammars//VoiceDialer.g2g
//system//usr//srec//config//en.us//models//generic.swiarb
//system//usr//srec//config//en.us//models//generic11.lda
//system//usr//srec//config//en.us//models//generic11_f.swimdl
//system//usr//srec//config//en.us//models//generic11_m.swimdl
//system//usr//srec//config//en.us//models//generic8.lda
//system//usr//srec//config//en.us//models//generic8_f.swimdl
//system//usr//srec//config//en.us//models//generic8_m.swimdl
OK,了解Android系统文件夹结构和相应文件的作用后,我们进行下一步真正定制工作。
二、定制简单流程:
1、下载相应的ROM
2、下载签名工具,并且解压。我这里解压成生的文件夹名为:“APKMake”。我这里提供签名工具的是宇宙青年制作的,下载请到这:http://u.115.com/file/f0a485d7d1
3、把ROM内的所有文件用WinZip或是WinRAR解压到某一文件夹,为教程容易明白,我将这文件夹在这里起名为“NewsROM”,你自已喜欢怎样起名都无所谓。
4、进入NewsROM文件夹,再进入data/app目录,看这里是否有你所需的程序,不需要的请删除。你还可以添加你需要的默认安装软件。如:搜狗输入法,只需要把SogouIme.apk文件直接拖放到压缩包/data/app目录内即可。
5、进入NewsROM文件夹,再进入system/app删除你不想要的组件、或是添加你需要的组件。由于有一些组件与其它组件是有依赖的,所以删除时请注意。但也不要怕,如果你删除的组件不对,刷机时最多是无法进入系统,你用完整ROM重新刷一次既可。一般不会变成砖的。
6、删除、添加软件完毕,然后把 ROM 文件夹(NewsROM)拖动到APKMake/APKMake.bat 即可(重新打包、自动签名)。在APKMake目录里打包签名完成后自动会生成NewsROM.zip(刚才文件夹起名不同,这里生成文件名也不同),这个就是我们已精简的ROM了。
三、刷ROM
请如果 Recovery 已经准备好。请按严格安装以下步骤操作刷入 ROM:
1. 把 ROM 文件复制到 SD 卡。
2. 关机,然后按住 Home(小房子)启动手机,进入 Recovery 模式。
3. WIPE。
4. 在 Recovery 中选择正确的 ROM 文件(ZIP)刷入。
4. 重新启动即可。
四、定制注意事项
1、细心、细心、细心
2、为安全起见,建议只对data/app和system/app这两个文件夹内的文件做删除、添加。
3、不知或是不太清楚要删除的文件是干啥的,那请保留不要删除。
4、本文中的Android系统文件夹结构可能比较旧,如果碰到不知该文件是干什么的,建议搜索一下找答案。
4、按照本教程来定制ROM,如果在定制过程自已失误删除相应的软件,那造成的后果最多也是无法进入系统,重新刷一个完整的ROM一般解决问题。还是那句话:刷机有风险,出问题自负。