安卓刷机及刷机包制作教程

发布时间:2016-12-11 0:54:43 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"安卓刷机及刷机包制作教程",主要涉及到安卓刷机及刷机包制作教程方面的内容,对于安卓刷机及刷机包制作教程感兴趣的同学可以参考一下。

http://hi.baidu.com/spring_badboy/item/29dd7f1de8cab6426826bbf5 刷机有两种:线刷和卡刷。所谓的“线刷”就是在手机Download模式(俗称为“挖煤”)下用Odin刷机程序刷机。而“卡刷”就是在手机的Recovery(恢复)模式下刷机。在这一讲里,我来介绍第二种刷机方法:“卡刷”或称为CWM刷机。论坛中关于“卡刷”的刷机教程比较少,多半都是在刷某个具体的ROM里给出。可能大家认为“卡刷”的刷机方法比较简单,不值得写一个专门的教程。其实对新手来说还是必要的,写一个详细教程,供机友参考。 “卡刷”或CWM刷机:用手机里安装的ClockworkMod程序来在 Recovery模式下进行刷机。刷机包为单个签名的zip压缩包。在刷机包中有一个脚本,里面有一系列命令,规定好把不同的文件复制的手机的指定分区,从而达到刷机目的。通常认为,卡刷比较安全,只涉及单个刷机文件,适合于新手刷机。 ROM发布者通常发布ROM补丁来升级ROM。所以,掌握卡刷很有必要,使你能及时更新和欣赏ROM的新功能。同时,卡刷和线刷两种手段技术互补。 卡刷在下列情况下使用:   1)手机里已经安装了ClockworkMod程序   2)手机可以进入Recovery模式   3)当然,你的刷机包是zip卡刷包 卡刷可以用于下列刷机情况:   1)刷完整ROM   2)刷ROM的补丁或升级包   3)刷内核或基带   4)刷特殊内容 为叙述方便,以下把上述各种要刷的内容统称为“刷机包”。下面以刷2.3.4 XXJVP汉化版为例来描述刷机过程和步骤。刷机包文件名为“JVP2.3.4_SunnyOK_CN-2.zip”。 刷机步骤: 1. 把刷机包拷贝到手机SD卡 将手机用USB数据线连接电脑,在“设置”-“USB设置”里选“大容量存储”。连接成功后,将刷机包JVP2.3.4_SunnyOK_CN-2.zip拷贝到SD卡的根目录下。之后,从手机移除USB数据线。 如果手机有内卡(sdcard),直接把刷机包拷贝到内卡。I897有13G的内卡供使用。当然,你也可以使用外卡。 2. 手机进入Recovery(恢复)模式 有多种方法进入Recovery模式: 1)关机,按“音量上+下”和“电源开关”,屏幕点亮后松开按键,进入“恢复”模式。 2)用ADB命令:    在计算机上安装ADB工具包(见附件ADB-Tools.rar)    手机开机,到“设置”-“应用程序”-“开发”选“USB调试”    将手机用USB数据线连接电脑    在DOS窗口打入:adb reboot recovery    进入Recovery(恢复)模式    取下USB数据线 3)有些ROM里已经提供进入Recovery的功能。例如Li大的ROM里提供了“重启工具”应用。还有的ROM在主题文件的“关机”菜单里加了Recovery的选项。还有的ROM在“高级设置”里有Recovery操作的选项。 4)其它进Recovery模式方法 3. 刷机 1)进入Recovery模式后,你会看到下面界面: 用音量上下键选取“install zip from sdcard”。见红色方框。然后按电源键确认。 2)进入下一个界面: 用音量上下键选取“choose zip from sdcard”。见红色方框。然后按电源键确认。 3)进入下一个界面: 在这个界面里,你可以看到你SD卡上根目录下的所有目录和文件。注意:在第一步里我们已经把刷机包文件JVP2.3.4_SunnyOK_CN-2.zip拷贝到了SD卡的根目录。所以,你现在应该看到这个文件名。见红色方框部分。 用音量上下键选取“JVP2.3.4_SunnyOK_CN-2.zip”。见红色方框。然后按电源键确认。 4)进入下一个界面: 用音量上下键选取“Yes – Install JVP2.3.4_SunnyOK_CN-2.zip”来确认刷这个文件。见红色方框。然后按电源键确认。 5)进入下一个界面。刷机开始。你会看到下列刷机进度信息和绿色进度条。 6)需要大约一分钟时间,刷机结束,又回到Recovery模式。在屏幕下半部显示下列图像。你会看到刷机结束通知:“Install from sdcard complete.”,告诉你:从SD卡的安装结束了。 在屏幕的上半部出现下列信息。这与前面的第二个界面相同。现在要选取“+++++Go Back+++++”回到上一个(第一个)Recovery界面。按电源键确认。 7)进入主界面。 这时你可以来wipe了。用音量上下键选取“wipe data/factory reset”来清除用户数据,按电源键确认。用音量上下键选取“wipe cache partition”来清除缓存分区数据,按电源键确认。 8)最后用音量上下键选取“reboot system now”重启手机。 9)刷机结束。 注意事项: 1)老话再说,刷机前把你的数据备份好,电池充好电。 2)刷机前多研究一下ROM内的内容是有益的。把zip打开看一下里面有什么文件。做到心中有数。 3)刷机失败怎么办?没关系!进入恢复模式重刷。 4)万一刷机失败,就需要进“挖煤”去“线刷”了。请阅读【第一讲】的刷机方法。所以,你必须学会用Odin程序刷机。 5)你的手机里必须已经安装了ClockworkMod。这取决于上一次刷机的内核。论坛中也有CWM程序,但是只适用于某一个ROM,这里不作推荐。 6)官版ROM的Recovery(2e和3e)功能有限,不能刷机。如果你的底包是官版的ROM,可能需要先刷某个要求的ROM做底包,或刷一个指定的内核,得到ClockworkMod。通常ROM发布者都在刷机指导中对此有明确要求。 7)关于wipe清除以前的用户数据和缓存数据:   a)如果是刷ROM,建议刷后去双wipe。   b)如果是刷特殊补丁,不需要刷后wipe。   c)如果是刷升级包,通常需要wipe。   d)如果是刷内核或基带,不要wipe。 8)有时刷后开不了机,可以试图去双Wipe清除以前的用户数据和缓存数据。许多刷机后的奇怪现象与没有wipe有关。 9)有些升级包给出的文件名为:update.zip。你可以在第一个界面直接选“apply update from sdcard”就可以刷机了。 10)为了便于文件管理,上述的刷机包也可以放到根目录下的子目录内。但是,如果刷机包为update.zip,而且你用“apply update from sdcard”来刷,那只能把它放在根目录下。 I897刷机教程(卡刷或CWM刷机):刷机教程(卡刷或CWM刷机).pdf(480 KB) ADB工具包:ADB-Tools.rar(349.66 KB) 如何制作刷机补丁和CWM刷机包ROM 在第一讲和第二讲中介绍过两种刷机方法:用Odin刷机程序在“挖煤”模式下刷 TAR刷机包(线刷)和在Recovery(恢复)模式下刷zip刷机包(卡刷)。在第五讲中教给大家如何制作或定制Odin刷机包ROM(TAR包)。在这一讲中,我们来介绍一下制作卡刷刷机包的方法。 在第二讲里的开头讲过:“卡刷”或CWM刷机就是用手机里安装的ClockworkMod程序来在Recovery模式下进行刷机。刷机包为单个签名的zip压缩包。在刷机包中有一个脚本文件,里面有一系列命令,规定好把不同的文件内容复制的手机的指定分区,从而达到刷机目的。那么怎样来制备这种zip刷机包呢?那个脚本文件又是什么呢? 本讲的内容包括两个部分:    1.制作刷机补丁    2.制作完整刷机包ROM 通常,两者都称作刷机包。在本文中,我们说“刷机补丁”是指ROM的补充内容。例如:在英文底包上刷中文文件,或者替换字库,替换主题或桌面等等。它们不构成可使手机运行的全部文件,它们仅仅是ROM的一部分。以前,常用update.zip来传播。当我们说“完整刷机包ROM”时,我们是特指一个独立完整的ROM,包含一个刷ROM所具有的所有必要刷机元素。 1. 制作刷机补丁 我们都知道,ROM发布者通常发布刷机补丁来升级ROM。ROM发布后,需要增加、刷新、更改ROM内容或功能时,没有必要重新安装整个ROM。只要把需要更新的部分写成一个“刷机补丁”,刷进手机与已有的系统合并就行了。 在介绍如何制作刷机补丁之前,先让我们来看一个实例:用刷机补丁来更新两个主题文件,把TouchWiz30Launcher.apk和SystemUI.apk复制进手机的/system/app目录。刷机包补丁文件名为:CWM_Update.zip。 用WinRAR打开刷机补丁文件CWM_Update.zip,看到有两个目录:    META-INF     刷机脚本文件和签名    system         要复制的补丁内容 继续打开/system就看到文件夹/app,再下去在 /app下看到要复制的两个主题文件TouchWiz30Launcher.apk和SystemUI.apk(见截图)。从/system目录开始,所有的目录结构和akp文件放置的位置都必须与手机里的内容一一对应。 然后进入META-INF目录(见截图),我们看到有三个文件和一个字文件夹com。这三个文件是签名文件,是签名操作产生的。在Android手机里,所有要刷入手机或在手机里运行的程序都必须经过签名。从com继续向下走,在/META-INF/com/google/android目录下看到有两个文件:    update-binary 刷机包用的二进制文件    updater-script 刷机包脚本文件 这个刷机包脚本文件updater-script规定了要刷什么,刷到哪和怎样刷。 从这个具体的例子,我们可以总结制作刷机补丁的步骤如下: 1)创建一个工作目录:先假定它是CWM_Update。 2)在CWM_Update下产生两个子文件夹:META-INF和system    CWM_Update/META-INF    CWM_Update/system 3)再在CWM_Update/system下产生下一级子文件夹,存放补丁的内容。目录结构和文件放置要与手机里的文件结构完全一致。apk应用程序放在/app下,字库放在/fonts下,主题放在/framework下,触摸键定义放在/usr/keylayout下,库文件放在/lib下,等等。 4)在CWM_Update/META-INF下再产生    /META-INF/com/google/android 到其它的刷机包里去把现成的update-binary和 updater-script复制进/android目录。 我的做法是把META-INF的整个目录内容都一起复制过了,里面已经有了三个签名文件和刷机包用的二进制文件update-binary,一次搞定,省事。不要碰再它们了。 5)现在来编辑脚本文件updater-script,它规定了要复制什么、怎么复制、复制到什么地方。用文本编辑器打开updater-script,看到内容如下:    mount("MTD", "system", "/system");    ui_print("Updating system...");    show_progress(0.100000, 0);    set_progress(1.000000);    package_extract_dir("system", "/system");    show_progress(0.900000, 10);    ui_print("Update complete!");    unmount("/system"); 对脚本文件updater-script内容解释如下: mount("MTD", "system", "/system"); 挂载MTD、system、/system(system是CWM_Update.zip里的/system文件夹,/system是手机空间上的文件夹) ui_print("Updating system..."); 手机屏幕显示提示信息 Updating system... show_progress(0.100000, 0); 是控制进度条状态(进度条当操作完成后前进10%) set_progress(1.000000); 把进度条手动设置到100% package_extract_dir("system", "/system"); 将CWM_Update.zip的system文件夹下的内容复制到手机的/system show_progress(0.900000, 10); 同上,是控制进度条状态(进度条当操作完成后前进90%) ui_print("Update complete!"); 手机屏幕显示提示信息 Update complete! unmount("/system"); 卸载手机/system文件系统,刷机到此结束。 注意:在unmount之后必须有一个空行!这是规定。 6)在CWM_Update目录下,把META-INF和system两个目录打包成一个压缩文件CWM_Update.zip。 7)最后,用签名程序Auto-Sign对CWM_Update.zip进行签名。制作过程结束,刷机补丁就做好了。 注释:如果你打算制作一个刷机补丁的话,原样使用这个脚本文件就行了,不用做任何修改。在实际制作时,可以直接从已有的刷机补丁中把META-INF目录完全复制过来,连签名过程都省了。但是注意检查一下updater-script的内容,以防造成错误后果! 2. 制作完整刷机包ROM 有了上面如何制作刷机补丁做基础,你也不难制作出一个完整的“卡刷”刷机包 ROM。与制作Odin刷机包相比,这里没有复杂的RFS解包和打包过程,不需要Linux环境,所有操作在Windows下就搞定了。编辑 /system目录下的内容直截了当,删减和添加内容都方便。 我们还是从一个实例出发,考察ROM结构和文件的放置,然后归纳制作步骤,介绍制作技巧。 打开我6月22日的“发布定制I897 2.3.4 XXJVP ROM升级中文版本”(http://bbs.gfan.com/android-1705916-1-1.html)中的第二个卡刷ROM JVP2.3.4_SunnyOK_CN-2.zip,截图如下: META-INF目录在上一节介绍过了,存放的是签名文件和重要的刷机脚本文件updater-script。 system目录下的内容就是你手机里/system目录下的内容,一模一样。 与上一节相比,这里多了一个目录updates。它是干什么用的呢?打开就一目了然了。updates目录里面有三个文件:modem.bin,zImage和redbend_ua。大家对modem.bin和zImage不陌生吧?它们分别是基带和内核文件。另一个文件 redbend_ua是刷机用的,不用管它,但是,不能删掉。 最后一个文件installbusybox也不要动它。 现在再回过头来看看刷机脚本文件updater-script。由于现在要刷进手机的内容多了,所以updater-script的内容也就更复杂了。完整的脚本文件给出如下: show_progress(0.200000, 10); set_perm(0, 0, 0777, "/sbin/mount"); run_program("/sbin/mount", "/system"); set_perm(0, 0, 0777, "/sbin/mount"); run_program("/sbin/mount", "/dev/block/stl10", "/dbdata"); set_perm(0, 0, 0777, "/sbin/mount"); run_program("/sbin/mount", "CACHE:"); set_perm(0, 0, 0777, "/sbin/mount"); run_program("/sbin/mount", "/dev/block/mmcblk0p2", "/data"); delete_recursive("/system"); delete_recursive("/dbdata"); delete_recursive("/cache"); delete_recursive("/data/dalvik-cache"); delete_recursive("/data"); mount("MTD", "system", "/system"); package_extract_dir("system", "/system"); package_extract_dir("updates", "/tmp"); show_progress(0.200000, 50); symlink("toolbox", "/system/bin/cat"); symlink("toolbox", "/system/bin/chmod"); symlink("toolbox", "/system/bin/chown"); symlink("toolbox", "/system/bin/cmp"); symlink("toolbox", "/system/bin/date"); symlink("toolbox", "/system/bin/dd"); symlink("toolbox", "/system/bin/df"); symlink("toolbox", "/system/bin/dmesg"); symlink("toolbox", "/system/bin/getevent"); symlink("toolbox", "/system/bin/getprop"); symlink("toolbox", "/system/bin/hd"); symlink("toolbox", "/system/bin/id"); symlink("toolbox", "/system/bin/ifconfig"); symlink("toolbox", "/system/bin/iftop"); symlink("toolbox", "/system/bin/insmod"); symlink("toolbox", "/system/bin/ioctl"); symlink("toolbox", "/system/bin/ionice"); symlink("toolbox", "/system/bin/kill"); symlink("toolbox", "/system/bin/ln"); symlink("toolbox", "/system/bin/log"); symlink("toolbox", "/system/bin/ls"); symlink("toolbox", "/system/bin/lsmod"); symlink("toolbox", "/system/bin/mkdir"); symlink("toolbox", "/system/bin/mount"); symlink("toolbox", "/system/bin/mv"); symlink("toolbox", "/system/bin/nandread"); symlink("toolbox", "/system/bin/netstat"); symlink("toolbox", "/system/bin/newfs_msdos"); symlink("toolbox", "/system/bin/notify"); symlink("toolbox", "/system/bin/printenv"); symlink("toolbox", "/system/bin/ps"); symlink("toolbox", "/system/bin/reboot"); symlink("toolbox", "/system/bin/renice"); symlink("toolbox", "/system/bin/rm"); symlink("toolbox", "/system/bin/rmdir"); symlink("toolbox", "/system/bin/rmmod"); symlink("toolbox", "/system/bin/route"); symlink("toolbox", "/system/bin/schedtop"); symlink("toolbox", "/system/bin/sendevent"); symlink("toolbox", "/system/bin/setconsole"); symlink("toolbox", "/system/bin/setprop"); symlink("toolbox", "/system/bin/sleep"); symlink("toolbox", "/system/bin/smd"); symlink("toolbox", "/system/bin/start"); symlink("toolbox", "/system/bin/stop"); symlink("toolbox", "/system/bin/sync"); symlink("toolbox", "/system/bin/top"); symlink("toolbox", "/system/bin/umount"); symlink("toolbox", "/system/bin/vmstat"); symlink("toolbox", "/system/bin/watchprops"); symlink("toolbox", "/system/bin/wipe"); symlink("/system/bin/dumpstate", "/system/bin/dumpmesg"); symlink("/system/bin/debuggerd", "/system/bin/csview"); set_perm_recursive(0, 0, 0755, 0644, "/system"); set_perm_recursive(0, 2000, 0755, 0755, "/system/bin"); set_perm_recursive(0, 0, 0755, 0755, "/system/etc"); set_perm_recursive(1002, 1002, 0755, 0440, "/system/etc/bluetooth"); set_perm_recursive(0, 2000, 0755, 0755, "/system/vendor/bin"); set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor/etc"); set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor/firmware"); set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin"); set_perm(0, 2000, 0755, "/system/vendor"); set_perm(0, 2000, 0755, "/system/vendor/firmware"); set_perm(0, 2000, 0755, "/system/vendor/bin/launch_gps.sh"); set_perm(0, 2000, 0755, "/system/vendor/bin/gpsd"); set_perm(0, 2000, 0755, "/system/etc/bluetooth"); set_perm(0, 3003, 02755, "/system/bin/netcfg"); set_perm(0, 3004, 02755, "/system/bin/ping"); set_perm(1002, 1002, 0440, "/system/etc/dbus.conf"); set_perm(1014, 2000, 0550, "/system/etc/dhcpcd/dhcpcd-run-hooks"); set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh"); set_perm(0, 0, 06755, "/system/bin/su"); symlink("/system/bin/su", "/system/xbin/su"); set_perm(0, 0, 06755, "/system/xbin/busybox"); set_perm(0, 0, 755, "/tmp/redbend_ua"); show_progress(0.200000, 60); set_perm(0, 0, 0777, "/system/xbin/busybox"); run_program("/system/xbin/busybox", "--install", "-s", "/system/xbin"); show_progress(0.200000, 70); set_perm(0, 0, 0777, "/tmp/redbend_ua"); run_program("/tmp/redbend_ua", "restore", "/tmp/modem.bin", "/dev/block/bml12"); show_progress(0.200000, 80); set_perm(0, 0, 0777, "/tmp/redbend_ua"); run_program("/tmp/redbend_ua", "restore", "/tmp/zImage", "/dev/block/bml7"); show_progress(0.200000, 90); set_perm(0, 0, 0777, "/tmp/redbend_ua"); run_program("/tmp/redbend_ua", "restore", "/tmp/zImage", "/dev/block/bml8"); show_progress(1.000000, 0); set_perm(0, 1000, 0755, "/system/xbin/busybox"); package_extract_file("installbusybox", "/tmp/installbusybox"); set_perm(0, 0, 0777, "/tmp/installbusybox"); run_program("/tmp/installbusybox"); unmount("/system"); 感兴趣的机友可以到机锋论坛或其它论坛去学习脚本文件里的语句和语法,这里不作介绍。也看看参考目录中的链接。值得要提的是下面这两句,用run_program语句把基带文件modem.bin复制到bml12分区,把内核文件zImage复制进bml7分区。    run_program("/tmp/redbend_ua", "restore", "/tmp/modem.bin", "/dev/block/bml12");    run_program("/tmp/redbend_ua", "restore", "/tmp/zImage", "/dev/block/bml7"); 现在给出制作完整刷机包ROM的步骤: 1)创建一个工作目录:先假定它是JVP-ROM。 2)在JVP-ROM下产生三个子文件夹:META-INF,system和updates: JVP-ROM/META-INF JVP-ROM /system JVP-ROM /updates 3)去找一个现成的卡刷刷机包ROM,例如我6月22日发的卡刷包ROM:JVP2.3.4_SunnyOK_CN-2.zip。把解压后得到的 META-INF和installbusybox都复制进JVP-ROM目录,把redbend_ua复制进/updates文件夹。 4)在JVP-ROM/system下准备好所用相应的内容。这个不用教你,自己看一下手机里的/system就清楚了。另外,定制ROM必须会修改和编辑/system。 5)把选好的基带和内核文件放到JVP-ROM/updates目录下。 6)在JVP-ROM目录下,把META-INF,system,updates和installbusybox一起打包成压缩文件JVP-ROM.zip。这就是完成了的完整刷机包ROM了。 注释: 1)以上没有说签名步骤,原因是在第3)步里已经把签名文件都复制过来了,不需要再签名。 2)如果没有借用以前的签名,最后一步就要用签名程序Auto-Sign对JVP-ROM.zip进行签名。 3)以上的制作过程借用了已有卡刷ROM的某些元素,使制作过程大大简化,达到自己的目的。 3. 补充内容:如何单刷基带和内核 1) 单刷基带 当单刷基带时,在/updates文件夹内放基带文件modem.bin和复制文件bmlwrite。刷机脚本文件的内容写为:   ui_print(" ");   ui_print(" ");   ui_print("Flashing I897 modem. Please wait...");   ui_print(" ");   package_extract_dir("updates", "/tmp/updates");   set_perm(0, 0, 755, "/tmp/updates/bmlwrite");   run_program("/tmp/updates/bmlwrite", "/tmp/updates/modem.bin", "/dev/block/bml12");   ui_print("Successful! Please reboot."); 2) 单刷内核 当单刷内核时,在/updates文件夹内放内核文件zImage和复制文件bmlwrite。刷机脚本文件的内容写为:   ui_print(" ");   ui_print(" ");   ui_print("Flashing I897 kernel. Please wait...");   ui_print(" ");   package_extract_dir("updates", "/tmp/updates");   set_perm(0, 0, 0755, "/tmp/updates/bmlwrite");   run_program("/tmp/updates/bmlwrite", "/tmp/updates/zImage", "/dev/block/bml7");   ui_print("Successful! Please reboot."); 附件: 1. 签名程序 Auto-sign.rar (201.18 KB)  2. 刷机补丁模板 Update-Template.rar (146.04 KB)  3. 完整刷机包ROM模板 ROM-Template.rar (349.79 KB)  4. 单刷基带模板 Phone-Update.rar (188.23 KB)  5. 单刷内核模板 Kernel-Update.rar (188.24 KB)

上一篇:LinkedHashSet类
下一篇:C#控制台冒泡排序 和百钱百鸡

相关文章

相关评论