安卓刷机包制作详解.docx
- 文档编号:9785703
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:41
- 大小:249.47KB
安卓刷机包制作详解.docx
《安卓刷机包制作详解.docx》由会员分享,可在线阅读,更多相关《安卓刷机包制作详解.docx(41页珍藏版)》请在冰豆网上搜索。
安卓刷机包制作详解
ROM简单制作教程
前言
经常看到网友问:
哥几个,推荐一个好用的ROM啊?
这时候我们要有信心说:
自己制作的ROM才是最好的ROM。
当然制作ROM并不是那么简单,但也不是难到一般人做不了。
高端的大大可以从安卓源码开始编译ROM,但也是以团队的形式,比较出名的有CM和MIUI。
一般人还是只能从底包提取文件进行修改制作。
但这也不是轻易能完成的事。
我写这个教程只是出于爱好,本人并非计算机专业,所以写的并不是很专业。
但正因为如此,才能给大家更多的信心,我都能简单制作,你还怕你不行?
本篇教程采用一种新的模式给大家展示这个教程。
将会从简单的知识普及,制作工具,步骤等说明,工程巨大,错误也不少,但还是希望能帮助到大家。
以下内容参考到的作者较多,就不一一详说了,感谢这些兄弟的奉献,让我们有一个更好的玩机空间。
关键词:
java环境配置
制作工具update-script编写美化集成编译反编译
一.制作目的:
1.培养个人兴趣,感受动手动脑的快乐。
2.学习手机基本知识,最终动手制作自己的ROM。
3.帮助那些需要帮助的朋友(说不定有人喜欢你制作的ROM)
二.制作原理:
1.安卓基础知识普及:
Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。
目前,最新版本为Android2.4Gingerbread和Android3.0Honeycomb。
①底包:
官方的系统包,相当于我们的Windows的操作系统,事实上它相当于一个纯净版或者内核版的系统包,是最底层的东西。
扩展名为sbf,底包通常是官方发布的,ROM作者直接拿来用的,可以选择的版本不会太多,通常更新也不会频繁。
底包通常使用PC端刷机工具(RSD)配合Bootloader的工程模式完成刷入。
②升级包(镜像包):
广大玩家制作的底包增强包,通常表现为一个update.zip文件。
升级包是对底包的扩展和增强,包含一系列的辅助工具和服务,没有中文的底包通过升级包可以实现中文。
当然,很多功能也是通过升级包来实现的。
可以说,在刷新了底包后,配合刷新相应的升级包,这样才形成一个完整系统。
升级包通常通过Recovery工具,从SD卡读取刷入。
③Bootloader :
相当于电脑里面的bios(基本输入输出系统),手机一开机,控制手机的就是Bootloader。
我们通常所说的进入Bootloader,实际上是指进入Bootloader的工程模式,既是刷机模式,在此模式下可以将moto的sbf文件(底包)刷到机器里面。
④Recovery:
Moto手机内置的一个独立备份恢复工具,类似电脑上的一些一键还原系统,既是在系统出现问题的时候仍然可以打开的一个模式。
Moto的Recovery主要提供了WIPE(硬启,清除数据,恢复出厂设置)和Update(通常用于安装升级包,update.zip)功能。
Recovery是不能直接刷新的底包的,通常它刷新的升级包(update.zip)的方式是:
自动寻找SD卡上的特定文件,然后写入。
⑤基带(Baseband):
是手机中的一块专门的代码,或者可以理解成为一个专门负责通讯的BIOS,负责完成移动网络中无线信号的解调、解扰、解扩和解码工作。
基带的不同会造成信号效果的不同。
因为各地、各网络实际情况不同,需要大家自己选择适合自己的基带。
⑥WIPE:
wipe后就恢复了出厂设置,包括联系人、短信、安装的软件等全部删除。
俗称硬启,恢复出厂设置。
注意,wipe后app2sd和root权限需要重新做。
而且app2sd重要的分区步骤也要重新来过。
某些说法提到在刷新底包或者升级包前需要进行WIPE操作,我对此操作的必要性不是很确定。
⑦OpenRecovery(简称OR):
由于MOTO很蛋疼的在update.zip上做了一些手脚,这些东西影响到了升级包的制作。
于是高手们就搞出了一个OpenRecovery,这其实就一个第三方的增强版的Recovery工具,某些OpenRecovery已经发展成为一个具有很多功能的小系统了(类似WindowsPE),在这个OR中,可以完成很多东西,我们完全可以把OR想象成电脑上用的应急PE系统,在上面可以调整超频、基带、app2sd、更换启动画面、wipe、改变时区、调整键盘布局,甚至链接USB当读卡器等等,凡是recovery能做的,OR都可以做,recovery不能做到,OR可以做到。
一般OpenRecovery在sd卡上有两个部分存在:
update.zip和OpenRecovery目录,最新的GOT底包添加了新的一个OpenRecovery-CFG目录,用来存放各种个人文件。
update.zip就是用来坑MOTO一个标准的的zip升级包,而真正的升级包要放在/sdcard/OpenRecovery/updates目录下。
⑧App2sd:
说白了,其实很简单,就是把APK文件安装到sd卡上,android是Linux脱胎而来,App2sd的原理就是对SD卡进行分区,然后把SD上划分出来的某个分区合并到系统分区中去(听不懂,不要紧),划分出来的分区是Ext2格式,一般Windows不能识别,不要惊慌,正常现象。
App2sd对sd卡要求比较高,如果感觉app2sd后比较慢,可以试试换一张C4的sd卡。
因为在2.1的环境下,app2sd需要对sd进行分区,操作比较复杂,E文不好的小白或者电脑基础薄弱的小白容易失误。
建议对Android非常熟悉了再做App2sd。
⑨Root:
大家都知道android系统脱胎自Linux,也正是这个开源的内核让广大玩家可以自由发挥。
Root是Linux系统下的系统级账号,拥有系统的全部权限,Android设计上的不开放这个用户的,目的是为了保护系统安全,但是这个保护似乎也带来很多不便。
于是就一些工具和方法来开放这个账号。
开放Root账号的方法似乎有很多,这里就不再细说。
原理上分析,root的账号,应该通过在Android系统安装某个系统级别的服务,该服务具有root权限,然后其它需要root权限的程序再向这个服务请求root权限。
WIPE、刷机都有可能会造成root权限失效,需要重新root权限。
额外说明:
①从原理上分析,通常
底包,Bootloader,Recovery,基带都是可以刷新替换的,升级包当然更可以。
但是底包、Bootloader很少会有第三方开发或者修改的,一般都使用官方发布的。
底包有时候会内置Bootloader、Recovery,这样的底包刷新时会连上述两者一起更新(推测结果,不确定)。
更新这样的底包是有危险的,有可能会造成Bootloader损坏,这个东西损坏了,基本就是变砖了,真正的变砖,只能花钱去修了。
只有这个东西没坏,就不是砖。
②
我们通常所说的刷机ROM实际是升级包,升级包是对应于特定的底包制作的,所以刷机时务必确保使用的底包和升级包版本上保持一致。
③
需要注意版本号的还有:
Bootloader版本、基带版本、Recovery版本④
目前有些OpenRecovery工具支持底包、升级包一起从SD卡读取刷入⑤
似乎刷机前确保系统干净整洁是很重要的,很多教程提到要通过WIPE-刷底包的步骤来确保刷机前的干净,实际上如果底包版本没有变化,刷底包似乎、也许、大概、可能是不必要的。
2.系统结构及文件简单剖析:
一个常见的自制ROM根目录会有以下几个文件夹及文件:
data,META-IN,system,boot.img(锁了BL的可以无视这个,但制作时需要它,打包时把它拿出来。
)
系统目录说明
①应用程序安装目录
1)系统应用程序所在目录/system/app/*.apk
2)用户安装应用程序所在目录/data/app/*.apk
3)注意:
a)在模拟器中,每重启一次,/system/app/下的应用都会被还原,有时/data/app下也会被清除
b)若在/system/app和/data/app下有重名的应用,不一定会启动哪一个,尤其是在adbinstall杀死正在运行的程序时,有时旧的就会被启动
②.用户数据所在目录
/data/data/应用包名/shared_prefs配置文件
/data/data/应用包名/databases/*库文件所在目录
③.SD卡对应目录/sdcard/
而我们需要处理的只是两个文件夹里面的内容:
data/app——该文件夹里的文件可以全删,也可以自由添加自已所需安装的应用软件,刷机安装后可以自由删除。
system/app——在这个文件夹下的程序为系统默认的组件,可以看到都是以APK格式结尾的文件,但有些系统自带的ROM里面还有和APK文件名对应的odex文件。
我们主要是针对该文件夹里的文件进行精简,如果有odex文件的,删除APK文件名时同时也删除与其对应的odex文件。
虽然一般定制时只是对以上两个文件夹里的文件做相应的增减,但我们还是一起来了解system相应目录常见相应文件的用途吧。
rom版本不同,里面的APK也会不一样,其它文件夹下需要改动的较少,或者不需要改动。
但app文件下是制作时的重点,所以详细列出:
[url=file:
//system/app]\\system\\app[/url]
[url=file:
//system/app/AlarmClock.apk]\\system\\app\\AlarmClock.apk[/url]
闹钟
[url=file:
//system/app/Browser.apk]\\system\\app\\Browser.apk[/url]
浏览器
[url=file:
//system/app/Bugreport.apk]\\system\\app\\Bugreport.apk[/url]Bug报告
\\system\\app\\Calculator.apk
计算器
\system\app\Calendar.apk
日历
\\system\\app\\CalendarProvider.apk
日历提供
\\system\\app\\Camera.apk
照相机
\\system\\app\\Contacts.apk
联系人
\\system\\app\\DownloadProvider.apk
下载提供
\\system\\app\\DrmProvider.apkDRM数字版权提供
\\system\\app\\Email.apk
电子邮件客户端
\\system\\app\\FieldTest.apk
测试程序
\\system\\app\\GDataFeedsProvider.apkGoogleData提供
\\system\\app\\Gmail.apkGmail电子邮件
\\system\\app\\GmailProvider.apkGmail提供
\\system\\app\\GoogleApps.apk
谷歌程序包
\\system\\app\\GoogleSearch.apk
搜索工具
\\system\\app\\gtalkservice.apkGTalk服务
\\system\\app\\HTMLViewer.apkHTML查看器
\\system\\app\\HtcTwitter.apk
集成Twitter客户端PEEP
\\system\\app\\IM.apk
即使通讯组件包含MSN、yahoo通
\\system\\app\\Launcher.apk
启动加载器
\\system\\app\\Maps.apk
电子地图
\\system\\app\\MediaProvider.apk
多媒体播放提供
\\system\\app\\Mms.apk
短信、彩信
\\system\\app\\Music.apk
音乐播放器
\\system\\app\\PackageInstaller.apkapk安装程序
\\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\\***Services.apk***服务
\\system\\app\\Vending.apk
制造商信息
\\system\\app\\VoiceDialer.apk
语音拨号器
\\system\\app\\VoiceSearch.apk
语音搜索
app文件夹内放的就是内置软件,有不想要的,直接删除之。
请在删除之前先弄清楚它能不能删除。
有些官方内置的软件,删除了ROM就废了。
当然,你也可以在没弄清楚的情况下乱删一气,只要在刷机完发现问题之后,把删除的软件,一个个放回去排查,刷个十遍八遍,大约也就搞定了。
所以我们要佩服那么敢于探索的先驱,不容易啊。
fonts文件夹放的是手机的字体,如果没有美术细胞的人就不要乱改,改字体有时候会死人的,刺眼、字形不协调、大小不一致等等诸如此类。
要改也刷机完以后再改。
具体方法要参见自己区的人发的帖子。
lib文件夹顾名思义,是内置软件的库文件。
有些软件需要动态库支持才能正常使用的,比如常见的输入法之类的。
所以,如果你向一个原本可以正常使用的ROM中加入了新的软件之后,反而出现
某程序意外关闭
某程序意外结束的情况后,那么基本上就是你忘了把库文件给它移动过去。
bin文件夹中放的是系统内置的工具,像什么busybox,su之类的都在里面,没事不要删除它,可以添加,但不要删除。
etc文件夹中放置的是系统的设置,诸如无线、GPS、DHCP、拨号、APN列表之类的设置。
这个目录中,如果你改了重要的CONF文件,则可能系统出问题。
也可以改一部分不重要的东西(比如说APN列表)而不出现问题,但貌似APN列表没必要改。
framework目录就是系统的UI了,想改界面的人应该改这个目录中的文件。
。
大约也就是替换一些什么图片,换掉界面框架什么的,改改字体颜色什么的?
以达到改换界面的目的。
media目录是系统内置的媒体文件,如开机音乐,内置的通话铃声、信息铃声、闹钟铃声,可以改,但格式是OGG的,可以自己去搜索如何换格式。
usr目录是系统的部分使用配置,包括键盘映射表什么的,没事不要改。
。
。
xbin目录,好吧,这个目录可以放一些工具,而且貌似官方本身在里面放了一个tcpdump,是截获网络数据包的。
没试过删除它,推荐有冒险精神的可以删除之,再将结果告诉我们。
system:
系统分区.我们刷机器一般就是刷的这个分区.
userdata:
数据分区.
cache:
缓存分区
recovery:
Recovery分区,相当于建立在hboot与android系统间的一个中间层,如名字一般,主要用于系统调试和恢复。
.
boot:
存放内核和ramdisk的分区.
hboot:
这个是SPL所在的分区,即bootloader
splash1:
这个就是开机第一屏幕了.
radio:
这个是无线所在的分区,即基带所在分区。
misc:
其他分区
3.创建一个刷机包,update-script脚本语法说明
①简单举例:
创建一个update.zip文件是很简单的事情,你所需要做的就是将文件放置到与Android文件系统中相对应的文件夹中,然后编写一个用来复制这些文件到手机对应位置的update-script,文件。
作为举例,比如安装Calculator.apk到system/app文件夹,复制libsec-ril.so文件到system/lib文件夹:
新建一个空文件夹(本文例:
G:
\android)新建用来放置Calculator.apk的文件夹C:
\android\system\app以及用来放置libsec-ril.so的文件夹G:
\android\system\lib。
创建用来放置update-script文件的文件夹G:
\android\META-INF\com\google\android。
创建一个名为updater-script的文件,其内容如下:
1.show_progress0.10
2.
3.
copy_dirPACKAGE:
systemSYSTEM:
4.
5.
show_progress0.110
6.
行1和行5:
显示进度条
行3:
复制刷机包中的system文件夹到Android的/system
注意:
你应该在文件的最末尾多添加一个空行(也就是行6)将C:
\android压缩中的所有内容压缩为zip包(千万记住:
是压缩android这个文件夹中的内容,不是android文件夹本身)为android.zip签名
②基础语法篇
1.copy_dir
语法:
copy_dir
作用:
将
举例:
copy_dirPACKAGE:
systemSYSTEM:
(将升级包中的system文件夹复制到手机中)
2.format
语法:
format
作用:
格式化一个分区
举例:
formatSYSTEM:
(将手机/system分区完全格式化)
注意:
格式化之后的数据是不可以恢复的
3.delete
语法:
delete
作用:
删除文件1,2到n
举例:
deleteSYSTEM:
app/Calculator.apk(删除手机systen文件夹中app中的Calculator.apk文件)
4.delete_recursive
语法:
delete_recursive
作用:
删除文件或者目录,删除目录时会将目录中的所有内容全部删除
举例:
delete_recursiveDATA:
dalvik-cache(删除/data/dalvik-cache文件夹下的所有内容)
5.run_program
语法:
run_program
作用:
运行终端程序
举例:
run_programPACKAGE:
install_busybox.sh(执行升级包中的install_busybox.sh脚本)
6.set_perm
语法:
set_perm
作用:
设置单个文件或目录的所有者和权限,像linux中的chmod、chown或chgrp命令一样,只是集中在了一个命令当中
举例:
set_perm020000550SYSTEM:
etc/init.goldfish.sh(设置手机system中的etc/init.goldfish.sh的用户为root,用户组为shell,所有者以及所属用户组成员可以进行读取和执行操作,其他用户无操作权限)
7.set_perm_recursive
语法:
set_perm_recursive
作用:
设置文件夹及文件夹中的文件的所有者和用户组
举例:
set_perm_recursive0007550644SYSTEM:
app(设置手机system/app文件夹及其中文件的用户为root,用户组为root,app文件夹权限为所有者可以进行读、写、执行操作,其他用户可以进行读取和执行操作,其中的文件的权限为所有者可以进行读写操作,其他用户可以进行读取操作)
rwx对应421R读权限w写权限x执行权限
5代表R+X,6代表R+W,7代表R+W+X。
一般系统文件常见的权限是644。
8.show_progress
语法:
show_progress
<表示一个小部分><表示一个小部分的持续时间>
作用:
为下面进行的程序操作显示进度条,进度条会根据
举例:
show_progress0.10(显示进度条当操作完成后前进10%)
9.symlink
语法:
symlink
作用:
相当于linux中的ln命令,将
路径”的形式
举例:
symlink/system/bin/suSYSTEM:
xbin/su(在手机中system中的xbin中建立一个/system/bin/su的快捷方式)
10.assert
语法:
assert
作用:
此命令用来判断表达式boolexpr的正确与否,当表达式错误时程序终止执行※此作用有待验证
11.package_extract_file/dir语法:
package_extract_file(file/dir,file/dir)
作用:
提取包中文件/路径
举例:
package_extract_dir("system","/system");
package_extract_file("system/bin/modelid_cfg.sh","/tmp/modelid_cfg.sh");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 安卓刷机包 制作 详解
![提示](https://static.bdocx.com/images/bang_tan.gif)