重要说明:

看完这个帖子,你将学到:刷机脚本的含义,如何对刷机脚本进行简单修改,如何制作补丁,如何往内核里加入G大脚本,甚至如何制作Rom的zip包。
另外,此贴较长,或许以后还会更长,要想学到东西的机油请耐心看。

我将先以我的Blade-Bingo-2.3 Rom里的脚本为例,讲一讲刷机脚本。
然后再以我此贴的附件 KernelPatch.zip 内核补丁为例,简单讲一讲内核单刷补丁怎么做。

首先,我想说,其实,补丁的本质就是一个不完整的Rom刷机包。
为什么这么说它?我想看完这个帖子大家就明白了。
首先,请把任意一个V880的Rom解压缩(或者直接用双击打开它,当然,前提是这种格式已被压缩软件关联)。
你会看到,根目录下有META-INF、system文件夹和boot.img文件(其他Rom组织方式,如含data、cust等文件夹的Rom暂不细说)。
刷补丁(或者说,刷机),成功的几个要点:正确的文件,准确的脚本,精确的操作。而这样做,的确的有效。

system文件夹里是所有刷机所需文件,今天只教大家做内核补丁,所以暂时不去关心这里是什么。
META-INF\com\google\android\目录下有个edify的updater-script刷机脚本,它与Rom厨房默认的脚本有些不同。
如何不同,那里不同,这也不是今天咱们要讨论的问题,暂此越过。
用记事本或高级一点工具的如NotePad2(建议使用高级工具,自动排列,颜色突出,看起来更有条理)打开脚本文件。
------------------------------------------------------------------------------------------------------
ui_print("");
ui_print("      =================================");
ui_print("                   |     ------==bingo1991==------     |");
ui_print("      ============ 2.3.7-0214 =============");
ui_print("");
ui_print("Updating, plese wait....");
ui_print("");
assert(getprop("ro.product.device") == "blade" || getprop("ro.build.product") == "blade" || getprop("ro.product.board") == "blade");
package_extract_file("system/bin/backuptool.sh", "/tmp/backuptool.sh");
set_perm(0, 0, 0777, "/tmp/backuptool.sh");
run_program("/tmp/backuptool.sh", "backup");
show_progress(0.100000, 3);
format("yaffs2", "MTD", "system");
mount("yaffs2", "MTD", "system", "/system");
package_extract_dir("system", "/system");
show_progress(0.600000, 40);
symlink("busybox", "/system/xbin/[", "/system/xbin/[[",
        "/system/xbin/arp", "/system/xbin/ash", "/system/xbin/awk",
        ......
        "/system/xbin/xz", "/system/xbin/xzcat", "/system/xbin/yes",
        "/system/xbin/zcat");
symlink("toolbox", "/system/bin/cat", "/system/bin/cmp",
        "/system/bin/date", "/system/bin/dd", "/system/bin/dmesg",
        ......
        "/system/bin/wipe");
set_perm_recursive(0, 0, 0755, 0644, "/system");
......
set_perm(0, 0, 06755, "/system/xbin/su");
set_perm(0, 0, 06755, "/system/xbin/tcpdump");
show_progress(0.200000, 5);
package_extract_file("system/bin/backuptool.sh", "/tmp/backuptool.sh");
set_perm(0, 0, 0777, "/tmp/backuptool.sh");
run_program("/tmp/backuptool.sh", "restore");
package_extract_file("system/bin/modelid_cfg.sh", "/tmp/modelid_cfg.sh");
set_perm(0, 0, 0777, "/tmp/modelid_cfg.sh");
run_program("/tmp/modelid_cfg.sh");
package_extract_file("system/bin/verify_cache_partition_size.sh", "/tmp/verify_cache_partition_size.sh");
set_perm(0, 0, 0777, "/tmp/verify_cache_partition_size.sh");
run_program("/tmp/verify_cache_partition_size.sh");
show_progress(0.100000, 2);
assert(package_extract_file("boot.img", "/tmp/boot.img"),
       write_raw_image("/tmp/boot.img", "boot"),
       delete("/tmp/boot.img"));
unmount("/system");
ui_print("");
ui_print("   ***[ Thanks for using Blade-Bingo-2.3 ]***");
ui_print("**[ A compatible stable long time support Rom]**");
......号处为省略相同格式的语句。
-----------------------------------------------------------------------------------------------
很多行代码,是不是?看不太懂,是不是?
没关系,前显得很,我挑几处重要的地方讲一讲你就懂了。

代码段1:
ui_print("");是在recovery刷机屏幕上显示出一行空格。
ui_print("      |     ------==bingo1991==------     |");
是在recovery刷机屏幕上显示括号内的文字,为什么不用中文?
因为汉化的Recovery的中文字库极为有限,仅支持刷机界面的那些必须显示的文字,其他不包含的文字会显示成“?”
至此,你可以随便改刷机界面的显示信息了,不过,可别盗版哦。
比如,拿我的Rom,把里面的 bingo1991 改为你的大名,然后不加修改地再发出去。。。
这样的行为是我坚决不会赞同的,违者罚款。罚款请主动交至中国工商银行XXXXXXXXXX账号处。。。。。。
开个玩笑。。。。

代码段2:
assert(getprop("ro.product.device") == "blade" || getprop("ro.build.product") == "blade" || getprop("ro.product.board") == "blade");
获取手机信息,验证你的手机到底是不是V880,否则将无法刷入。
这是为了防止让一些其他机型的小白误刷咱们V880的Rom从而发生变砖的惨剧。
不加这行的Rom所有机型都可以刷入,建议Rom同行或者补丁制作者们一定要加上,人性化关怀。
当然,你不加这些,但在补丁或Rom发布时仔细说明适用机型的话也是可以的。

代码段:3:
format("yaffs2", "MTD", "system");
mount("yaffs2", "MTD", "system", "/system");
package_extract_dir("system", "/system");
这是非常重要的一段代码,第一步,格式化MTD为yaffs格式,分区命名为system,就是咱们常常说的system分区了;
第二步,以yaffs2格式将此分区挂载到/system挂载点;
最后,解压缩Rom文件里的system目录到/system。
这样,Rom里的system文件夹下所有内容已经写入system分区了。

代码段4:
symlink("busybox", "/system/xbin/[", "/system/xbin/[[",
        "/system/xbin/arp", "/system/xbin/ash", "/system/xbin/awk",
        ......
        "/system/xbin/xz", "/system/xbin/xzcat", "/system/xbin/yes",
        "/system/xbin/zcat");
symlink("toolbox", "/system/bin/cat", "/system/bin/cmp",
        "/system/bin/date", "/system/bin/dd", "/system/bin/dmesg",
        ......
        "/system/bin/wipe");
set_perm_recursive(0, 0, 0755, 0644, "/system");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");
......
set_perm(0, 0, 06755, "/system/xbin/su");
set_perm(0, 0, 06755, "/system/xbin/tcpdump");
这是刷机脚本的主体,是最长的一段代码。
symlink是创建xbin目录下的各种工具与其存放路径的链接,著名的busybox工具也在其中。
set_perm是设置权限,类似Ubuntu下的chmod。这些代码把相应的文件全部设置成正确的权限。
其中,set_perm_recursive(0, 0, 0755, 0644, "/system");与set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");
是以递归方式将目录及目录下的文件设成相应的权限。
余下的代码是把一些特殊的文件设置成需要的权限。
看不懂的机油请直接略过此段。

代码段5:
assert(package_extract_file("boot.img", "/tmp/boot.img"),
       write_raw_image("/tmp/boot.img", "boot"),
       delete("/tmp/boot.img"));
这是今天的重点。
首先,我们要知道boot.img是启动分区boot的镜像文件,而内核就在这个文件里面(至少V880是这样的,三星等其他一些机型不是这样的)。
---------------------------
如果我们用工具解开这个文件(文件夹名称在不同工具里稍有不同),会发现一个文件夹和一个zImage文件。
文件夹内是ramdisk的内容,zImage就是大名鼎鼎的linux内核了(准确地说是内核镜像文件)。
如何加入G大脚本?
解开G大Rom的boot.img,复制ramdisk文件夹里sbin文件夹的内容覆盖目标内核里相同文件夹及内部文件。
修改ramdisk文件夹里的 init.blade.rc 文件(其他机型不同,如华为的机型是init.huawei.rc),在最末位添加
#by geno
service geno /sbin/geno
    oneshot
service optimize /sbin/odex
    disabled
    oneshot
service timing /sbin/timing
    disabled
    oneshot
on property:dev.bootcomplete=1
    start optimize
    start timing
#by geno
为了尊重G大,请务必把首行和末行"#by geno"留着,当然你也可以写一些附加信息,仅限英文或拼音。
这几行的作用是开启G大脚本运行所需的服务。
如何删除G大内核里的开机第二屏(非开机动画)?
仔细看看ramdisk目录下是否有个 initlogo.rle 文件,它就是第二屏了,不想要的删掉就行。
其实第二屏的作用是让你在等待开机的“漫长”时光里有点东西可以看,让你感觉不那么漫长。
你如果需要的话,可以自己制作第二屏,必须在linux系统下(如Ubuntu)制作,方法此处不说了,问度娘。
至此,重新打包boot.img,并替换回去,你就有一个加入了G大脚本的内核了。 3月1日补充:抱歉,忘了一件很重要的事。
就是,G大脚本还需要/etc/目录下有 enhanced.conf 配置文件的配合。
所以,刷了我附件的内核补丁的机油请自己下载enhanced.zip解压,把  enhanced.conf  放到/system/etc目录下,重启即可。
等等,你还没说怎么替换内核呢?
什么,到这步还要说吗?比如你要换B大N361里的最新内核,解包提取zImage替换就行了嘛。
----------------------------
好了,如果你有耐心看了上面的关于boot.img的介绍,我们已经拥有一个加入了G大脚本,并且使用最新N361内核的boot.img了。
而代码段5的作用无疑就是将boot.img镜像刷入boot启动分区。

代码6:
unmount("/system");卸载前面挂载的system分区。

代码7:
刷机脚本中对此出现的show_progress(p, t);
这是个显示进程的脚本,即在t秒的时间内显示的进度条增加p。
如show_progress(0.5, 20);就是指在20秒的时间内让进度条的进度增加20% ,用来显示刷机进度,很有用。
这些代码添加的位置和数据不合适的话,有时会给人刷机进程卡住了或者一下子很快的感觉。

好了,刷机脚本讲到这里,已经差不多了。
接下来,讲讲如何做内核单刷包,相信你已经心领神会了。
最好的办法是找一个现成的补丁,把刷机脚本改成如下内容:
ui_print("Kernel Patch for CM7");
show_progress(0.500000, 0);
ui_print("Installing...");
assert(package_extract_file("boot.img", "/tmp/boot.img"),
       write_raw_image("/tmp/boot.img", "boot"),
       delete("/tmp/boot.img"));       
ui_print("Install complete!");
删掉其他目录,在补丁根目录留下META-INF文件夹,请保证其子目录\com\google\android\里的update-binary和updater-script还在,且updater-script脚本已经改成上述的样子了(当然,ui_print("XXX");语句可以不加或改成你想要的,但要有意义的文字)。
再在根目录加入你想要的boot.img,重新打包,OK,内核单刷包完成了!
如果你不忙的话,在脚本的最前面加上代码段2,很人性化。
当然,条件允许的话,最好还签个名。重要说明:
看完这个帖子,你将学到:刷机脚本的含义,如何对刷机脚本进行简单修改,如何制作补丁,如何往内核里加入G大脚本,甚至如何制作Rom的zip包。
另外,此贴较长,或许以后还会更长,要想学到东西的机油请耐心看。

我将先以我的Blade-Bingo-2.3 Rom里的脚本为例,讲一讲刷机脚本。
然后再以我此贴的附件 KernelPatch.zip 内核补丁为例,简单讲一讲内核单刷补丁怎么做。

首先,我想说,其实,补丁的本质就是一个不完整的Rom刷机包。
为什么这么说它?我想看完这个帖子大家就明白了。
首先,请把任意一个V880的Rom解压缩(或者直接用双击打开它,当然,前提是这种格式已被压缩软件关联)。
你会看到,根目录下有META-INF、system文件夹和boot.img文件(其他Rom组织方式,如含data、cust等文件夹的Rom暂不细说)。
刷补丁(或者说,刷机),成功的几个要点:正确的文件,准确的脚本,精确的操作。而这样做,的确的有效。

system文件夹里是所有刷机所需文件,今天只教大家做内核补丁,所以暂时不去关心这里是什么。
META-INF\com\google\android\目录下有个edify的updater-script刷机脚本,它与Rom厨房默认的脚本有些不同。
如何不同,那里不同,这也不是今天咱们要讨论的问题,暂此越过。
用记事本或高级一点工具的如NotePad2(建议使用高级工具,自动排列,颜色突出,看起来更有条理)打开脚本文件。
------------------------------------------------------------------------------------------------------
ui_print("");
ui_print("      =================================");
ui_print("                   |     ------==bingo1991==------     |");
ui_print("      ============ 2.3.7-0214 =============");
ui_print("");
ui_print("Updating, plese wait....");
ui_print("");
assert(getprop("ro.product.device") == "blade" || getprop("ro.build.product") == "blade" || getprop("ro.product.board") == "blade");
package_extract_file("system/bin/backuptool.sh", "/tmp/backuptool.sh");
set_perm(0, 0, 0777, "/tmp/backuptool.sh");
run_program("/tmp/backuptool.sh", "backup");
show_progress(0.100000, 3);
format("yaffs2", "MTD", "system");
mount("yaffs2", "MTD", "system", "/system");
package_extract_dir("system", "/system");
show_progress(0.600000, 40);
symlink("busybox", "/system/xbin/[", "/system/xbin/[[",
        "/system/xbin/arp", "/system/xbin/ash", "/system/xbin/awk",
        ......
        "/system/xbin/xz", "/system/xbin/xzcat", "/system/xbin/yes",
        "/system/xbin/zcat");
symlink("toolbox", "/system/bin/cat", "/system/bin/cmp",
        "/system/bin/date", "/system/bin/dd", "/system/bin/dmesg",
        ......
        "/system/bin/wipe");
set_perm_recursive(0, 0, 0755, 0644, "/system");
......
set_perm(0, 0, 06755, "/system/xbin/su");
set_perm(0, 0, 06755, "/system/xbin/tcpdump");
show_progress(0.200000, 5);
package_extract_file("system/bin/backuptool.sh", "/tmp/backuptool.sh");
set_perm(0, 0, 0777, "/tmp/backuptool.sh");
run_program("/tmp/backuptool.sh", "restore");
package_extract_file("system/bin/modelid_cfg.sh", "/tmp/modelid_cfg.sh");
set_perm(0, 0, 0777, "/tmp/modelid_cfg.sh");
run_program("/tmp/modelid_cfg.sh");
package_extract_file("system/bin/verify_cache_partition_size.sh", "/tmp/verify_cache_partition_size.sh");
set_perm(0, 0, 0777, "/tmp/verify_cache_partition_size.sh");
run_program("/tmp/verify_cache_partition_size.sh");
show_progress(0.100000, 2);
assert(package_extract_file("boot.img", "/tmp/boot.img"),
       write_raw_image("/tmp/boot.img", "boot"),
       delete("/tmp/boot.img"));
unmount("/system");
ui_print("");
ui_print("   ***[ Thanks for using Blade-Bingo-2.3 ]***");
ui_print("**[ A compatible stable long time support Rom]**");
......号处为省略相同格式的语句。
-----------------------------------------------------------------------------------------------
很多行代码,是不是?看不太懂,是不是?
没关系,前显得很,我挑几处重要的地方讲一讲你就懂了。

代码段1:
ui_print("");是在recovery刷机屏幕上显示出一行空格。
ui_print("      |     ------==bingo1991==------     |");
是在recovery刷机屏幕上显示括号内的文字,为什么不用中文?
因为汉化的Recovery的中文字库极为有限,仅支持刷机界面的那些必须显示的文字,其他不包含的文字会显示成“?”
至此,你可以随便改刷机界面的显示信息了,不过,可别盗版哦。
比如,拿我的Rom,把里面的 bingo1991 改为你的大名,然后不加修改地再发出去。。。
这样的行为是我坚决不会赞同的,违者罚款。罚款请主动交至中国工商银行XXXXXXXXXX账号处。。。。。。
开个玩笑。。。。

代码段2:
assert(getprop("ro.product.device") == "blade" || getprop("ro.build.product") == "blade" || getprop("ro.product.board") == "blade");
获取手机信息,验证你的手机到底是不是V880,否则将无法刷入。
这是为了防止让一些其他机型的小白误刷咱们V880的Rom从而发生变砖的惨剧。
不加这行的Rom所有机型都可以刷入,建议Rom同行或者补丁制作者们一定要加上,人性化关怀。
当然,你不加这些,但在补丁或Rom发布时仔细说明适用机型的话也是可以的。

代码段:3:
format("yaffs2", "MTD", "system");
mount("yaffs2", "MTD", "system", "/system");
package_extract_dir("system", "/system");
这是非常重要的一段代码,第一步,格式化MTD为yaffs格式,分区命名为system,就是咱们常常说的system分区了;
第二步,以yaffs2格式将此分区挂载到/system挂载点;
最后,解压缩Rom文件里的system目录到/system。
这样,Rom里的system文件夹下所有内容已经写入system分区了。

代码段4:
symlink("busybox", "/system/xbin/[", "/system/xbin/[[",
        "/system/xbin/arp", "/system/xbin/ash", "/system/xbin/awk",
        ......
        "/system/xbin/xz", "/system/xbin/xzcat", "/system/xbin/yes",
        "/system/xbin/zcat");
symlink("toolbox", "/system/bin/cat", "/system/bin/cmp",
        "/system/bin/date", "/system/bin/dd", "/system/bin/dmesg",
        ......
        "/system/bin/wipe");
set_perm_recursive(0, 0, 0755, 0644, "/system");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");
......
set_perm(0, 0, 06755, "/system/xbin/su");
set_perm(0, 0, 06755, "/system/xbin/tcpdump");
这是刷机脚本的主体,是最长的一段代码。
symlink是创建xbin目录下的各种工具与其存放路径的链接,著名的busybox工具也在其中。
set_perm是设置权限,类似Ubuntu下的chmod。这些代码把相应的文件全部设置成正确的权限。
其中,set_perm_recursive(0, 0, 0755, 0644, "/system");与set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");
是以递归方式将目录及目录下的文件设成相应的权限。
余下的代码是把一些特殊的文件设置成需要的权限。
看不懂的机油请直接略过此段。

代码段5:
assert(package_extract_file("boot.img", "/tmp/boot.img"),
       write_raw_image("/tmp/boot.img", "boot"),
       delete("/tmp/boot.img"));
这是今天的重点。
首先,我们要知道boot.img是启动分区boot的镜像文件,而内核就在这个文件里面(至少V880是这样的,三星等其他一些机型不是这样的)。
---------------------------
如果我们用工具解开这个文件(文件夹名称在不同工具里稍有不同),会发现一个文件夹和一个zImage文件。
文件夹内是ramdisk的内容,zImage就是大名鼎鼎的linux内核了(准确地说是内核镜像文件)。
如何加入G大脚本?
解开G大Rom的boot.img,复制ramdisk文件夹里sbin文件夹的内容覆盖目标内核里相同文件夹及内部文件。
修改ramdisk文件夹里的 init.blade.rc 文件(其他机型不同,如华为的机型是init.huawei.rc),在最末位添加
#by geno
service geno /sbin/geno
    oneshot
service optimize /sbin/odex
    disabled
    oneshot
service timing /sbin/timing
    disabled
    oneshot
on property:dev.bootcomplete=1
    start optimize
    start timing
#by geno
为了尊重G大,请务必把首行和末行"#by geno"留着,当然你也可以写一些附加信息,仅限英文或拼音。
这几行的作用是开启G大脚本运行所需的服务。
如何删除G大内核里的开机第二屏(非开机动画)?
仔细看看ramdisk目录下是否有个 initlogo.rle 文件,它就是第二屏了,不想要的删掉就行。
其实第二屏的作用是让你在等待开机的“漫长”时光里有点东西可以看,让你感觉不那么漫长。
你如果需要的话,可以自己制作第二屏,必须在linux系统下(如Ubuntu)制作,方法此处不说了,问度娘。
至此,重新打包boot.img,并替换回去,你就有一个加入了G大脚本的内核了。3月1日补充:抱歉,忘了一件很重要的事。
就是,G大脚本还需要/etc/目录下有 enhanced.conf 配置文件的配合。
所以,刷了我附件的内核补丁的机油请自己下载enhanced.zip解压,把 enhanced.conf 放到/system/etc目录下,重启即可。
等等,你还没说怎么替换内核呢?
什么,到这步还要说吗?比如你要换B大N361里的最新内核,解包提取zImage替换就行了嘛。
----------------------------
好了,如果你有耐心看了上面的关于boot.img的介绍,我们已经拥有一个加入了G大脚本,并且使用最新N361内核的boot.img了。
而代码段5的作用无疑就是将boot.img镜像刷入boot启动分区。

代码6:
unmount("/system");卸载前面挂载的system分区。

代码7:
刷机脚本中对此出现的show_progress(p, t);
这是个显示进程的脚本,即在t秒的时间内显示的进度条增加p。
如show_progress(0.5, 20);就是指在20秒的时间内让进度条的进度增加20% ,用来显示刷机进度,很有用。
这些代码添加的位置和数据不合适的话,有时会给人刷机进程卡住了或者一下子很快的感觉。

好了,刷机脚本讲到这里,已经差不多了。
接下来,讲讲如何做内核单刷包,相信你已经心领神会了。
最好的办法是找一个现成的补丁,把刷机脚本改成如下内容:
ui_print("Kernel Patch for CM7");
show_progress(0.500000, 0);
ui_print("Installing...");
assert(package_extract_file("boot.img", "/tmp/boot.img"),
       write_raw_image("/tmp/boot.img", "boot"),
       delete("/tmp/boot.img"));       
ui_print("Install complete!");
删掉其他目录,在补丁根目录留下META-INF文件夹,请保证其子目录\com\google\android\里的update-binary和updater-script还在,且updater-script脚本已经改成上述的样子了(当然,ui_print("XXX");语句可以不加或改成你想要的,但要有意义的文字)。
再在根目录加入你想要的boot.img,重新打包,OK,内核单刷包完成了!
如果你不忙的话,在脚本的最前面加上代码段2,很人性化。

当然,条件允许的话,最好还签个名。

首先声明此贴转载:http://blog.csdn.net/bingo1991/article/details/7768880。

【转】做Rom其实没什么奥秘,浅显易懂的补丁制作教程,带刷机脚本示例相关推荐

  1. 做Rom其实没什么奥秘,浅显易懂的补丁制作教程,带刷机脚本示例

    重要说明: 看完这个帖子,你将学到:刷机脚本的含义,如何对刷机脚本进行简单修改,如何制作补丁,如何往内核里加入G大脚本,甚至如何制作Rom的zip包. 另外,此贴较长,或许以后还会更长,要想学到东西的 ...

  2. Vegas怎么做闪屏特效,闪屏特效制作教程

    随着视频软件的流行,鬼畜视频逐渐走入了大众的视野.与传统视频相比,鬼畜视频添加了很多炫酷的特效,让视频更具魔性,显得十分与众不同.而其中很多是作者通过快速的剪辑配上动感的音乐做出来的闪屏,效果的确让人 ...

  3. 手机点餐怎么做_分享微信点餐小程序制作教程

    现在扫码点餐的小程序都非常普遍,开发制作手机点餐小程序方法如下: 直接购买成熟的手机扫码点餐小程序系统,一般模板的点餐小程序价格费用在2000-4000元左右. 个性定制开发,如果老板对手机点餐小程序 ...

  4. 若川知乎问答:2年前端经验,做的项目没什么技术含量,怎么办?

    知乎问答:做了两年前端开发,平时就是拿 Vue 写写页面和组件,简历的项目经历应该怎么写得好看? 以下是我的回答,阅读量5000+,所以发布到公众号申明原创. 题主说的2年经验做的东西没什么技术含量, ...

  5. 智能电视刷鸿蒙系统刷机教程,智能电视ROM制作教程 手把手教你做刷机包

    导读:今天小编给大家带来的就是智能电视制作ROM的教程,如果你想要学习如何制作智能电视rom的话就一定要来看看哦! 做ROM修改方法很简单,只要你的计算机上有蘑菇ROM助手即可实现个性化的修改制作.首 ...

  6. [rom助手]你不止是一个做rom专家

    有了蘑菇rom助手,原来当个大神如此简单,有了蘑菇rom助手,你不止是一个做rom专家.这句话是我在中关村戴子的贴子中看到的一句话,感触极深.蘑菇rom助手的震撼发布,对我们这些普通人来说,无疑不是受 ...

  7. [教程] ROM定制教程:手把手教你做ROM(已整理到第五部分...)

    教程大体分为以下几部分: 1.ROM基础知识......................................(1) 2.ROM制作工具介绍......................... ...

  8. ROM定制教程:手把手教你做ROM

    授人以渔吧,大家好才是真的好! 很 早就说出个教程了,想了好长时间不知道该怎么出,关于ROM定制,要了解的东西确实比较多,想出个完善的教程不是件容易的事,一来发此类教程贴的工作量非 常之大:二来本人水 ...

  9. ANDROIDROM制作(一)——ROM结构介绍、精简和内置、一般刷机过程

    作为对Rom制作的一个总结,本节主要介绍以下内容: 1.Rom介绍 2.Rom文件结构 3.app的精简与内置 4.Recovery简介 5.radio包简介 6.一般刷机过程.刷机过程中可能造成刷机 ...

最新文章

  1. almost late for work
  2. 使用第三方库(Senparc)完成小程序支付 - z
  3. fastdfs java上传文件_FastDFS java客户端文件上传demo
  4. Android 学习Kotlin吗?
  5. python中的文件I/O
  6. spark自定义函数
  7. 2022年 1月 windows 新型勒索病毒 360Crypt将全部文件后缀改为.360 2022年最新传播勒索病毒
  8. 对有父子关系的层级数据项,递归实现绑定到ListControl进行树状列表化的分层输出...
  9. C#winform实现下载文件的功能
  10. 常用视频格式简述(RMVB\RM\WMV\ASF\AVI\MPEG1\MPEG2\MPEG4\MOV)
  11. 导入Zip bomb detected
  12. 【其他笔记】 双屏显示分辨率低下、屏幕闪烁、暗沉等问题。
  13. 倾囊相授:小编是如何从阿里云转战达摩院并成功上岸de?
  14. 如何把小程序游戏运行到自有app中?
  15. IoT方案|机智云商用设备运营管理 / 租赁共享解决方案
  16. 计算机名和DNS域名的关系,域名、DNS、IP地址的对应关系
  17. nginx支持text html,BT面板重启Nginx提示“nginx: [warn] duplicate MIME type “text/html””解决办法...
  18. 根据xml配置地图服务
  19. css实现聚光灯特效
  20. jQuery快速入门(2)--操作 2021.11.20

热门文章

  1. 微信拍一拍功能上线,网友表示:别扒拉我!
  2. 程序员必备的600个英语词汇(4)
  3. Skype交互过程分析
  4. C#重写RichBox控件获取RTF格式的内容
  5. php 生成 rtf,php 实现html转为rtf格式_PHP教程
  6. 思科服务器连接无线打印机,经典解决方案 : 路由器直接连接打印机USB接口实现网络打印。...
  7. make menuconfig缺少ncurses
  8. 首届全球 Pulsar Hackathon 2021 结果宣布,全球 Top5 团队出炉!
  9. Linux浅析之四——Wine
  10. Pandas的 loc iloc ix 区别