Android ROM开发(三)——精简官方ROM并且内置ROOT权限,开启Romer之路


相信ROM的相关信息大家通过前几篇的学习都是有所了解了,这里就不在一一提示了,这里我们下载一个官方包,我们还是以之前的红米note为例子;

一.精简

相对于各个厂商的推广软件,你可以毫不留情的把他删掉

1.厂商内置APK

一般厂商的ROM还是会放一点点软件在里面的,不纯在纯净ROM之说,产商内置的软件在system/vendor/app目录下,你全部删掉就是了

MIUI一般不放在这个目录,放在data/目录下

2.系统APK

在system/app下,有些软件也是我们不想要的,比如应用商店,收音机之内的,我们也可以删掉,不过,那都是需要自己斟酌下了,删错了可是要付出代价的哦

3.推广软件

一般官方包不会有这个目录,只有第三方才有,这里主要是我们用recovery刷ROM的时候推送到手机安装的一些aok,我们叫他推广软件,目录为data/app下,小米的结构好像要多一点(每个厂商的目录都有细微的变化)system/miui/app下

4.去掉官方recovery

这里我们只要把根目录下的recovery文件夹删掉就行

5.去掉标识

一些官方自带的东西都可以删掉,比如uboot.img,logo.img,这里我把他们都删掉了,只剩下

二.修改刷机脚本updater-script

既然前面我们把该删掉的都删掉了,那么刷机脚本也是要修改一下咯

1.删除机型效验

getprop("ro.product.device") == "lcsh92_wet_tdd" || abort("This package is for \"lcsh92_wet_tdd\" devices; this is a \"" + getprop("ro.product.device") + "\".");
mount("ext4", "EMMC", "/dev/block/mmcblk0p3", "/data");

2.删除官方recovery解压

这里他是要把刚才根目录的官方recovery拷贝到手机里去,但是我们都已经精简了,所以这里就不用了

package_extract_dir("recovery", "/system") || abort("Failed to extract dir from \"recovery\" to \"/system\".");

recovery还没有删除干净哦,我们Ctrl+F搜索一些recovery

很明显,这两个我们也是不要滴

这里要注意,你精简了什么东西,脚本中都有清单,你要对应的删掉

三.添加ROOT权限

这里是这样的,我们拿着一个机型,我们找到与他对应的root卡刷包,这里我就随便下了一个做示例

注意,这里我只是找了个root包做演示,如果你要添加ROOT权限的话,要找对应型号的ROOT包

1.编译内核

因为厂商在boot中有一个反root的机制,所以,我们需要把boot里的一些东西去掉,这里提供了一个比较方便的编译内核的工具,下载地址:链接: http://pan.baidu.com/s/1i3MqggH 密码: 4g7q

使用方法也是很简单,就不需要使用我们的厨房了,这个操作方便点,这里我们拷贝boot.img放在这个目录下,执行MTK解压boot.bat

解压完成之后同目录下就有一个boot的文件夹了

我们用notpad++打开boot/rmdisk/init.rc

我们滑动到最末尾,删掉这么一段话(每个机型不同,大体位置差不多)

这是另一个机型找的,MIUI是没有的

然后再删除boot/rmdisk/sbin/coolsec

然后执行根目录的MTK打包boot.bat打包回来替换到原来的ROM中去

2.ROOT脚本

我们先来看看ROOT的脚本是什么样子的

//输出
ui_print("***********************************");
ui_print("  ROOTPKG for DASHEN, E.Y. v2.0  ");
ui_print("***********************************");
//进度
show_progress(0.500000, 0);

ui_print("Extract files...");
//写入这三个文件
package_extract_file("busybox", "/tmp/busybox");
package_extract_file("updater.sh", "/tmp/updater.sh");
package_extract_file("root.zip", "/tmp/UPDATE-SuperSU.zip");

//设置权限
set_perm(0, 0, 0770, "/tmp/busybox");
set_perm(0, 0, 0770, "/tmp/updater.sh");
set_perm(0, 0, 0660, "/tmp/UPDATE-SuperSU.zip");

ui_print("Install busybox...");
run_program("/tmp/busybox", "--install", "-s", "/sbin");
//执行
ui_print("Mount system partition...");
mount("ext4", "EMMC", "/system", "/system");

show_progress(0.200000, 0);
show_progress(0.200000, 10);

ui_print("Updating...");
run_program("/tmp/updater.sh", "/tmp/UPDATE-SuperSU.zip");

ui_print("Unmounting system...");
unmount("/system");

show_progress(0.100000, 0);
ui_print("Installation complete!");

这里不难看出,只是把ROOT包下的三个文件写入到了手机,也就是我选中的这三个文件

既然如此,那就好办了,我们把这三个文件解压到我们的ROM中去

我们根据ROOT的脚本来看,她就做了三件事,解压,设置权限,执行,那我们照着改就是了,但是记住,Android4.2和Android4.4以及5.0,6.0的指令是不一样的,这里我们都是Android4.2的话,可以直接使用,我们就把这些放在挂载指令之前把

show_progress(0.500000, 0);

ui_print("Extract files...");
package_extract_file("busybox", "/tmp/busybox");
package_extract_file("updater.sh", "/tmp/updater.sh");
package_extract_file("root.zip", "/tmp/UPDATE-SuperSU.zip");

set_perm(0, 0, 0770, "/tmp/busybox");
set_perm(0, 0, 0770, "/tmp/updater.sh");
set_perm(0, 0, 0660, "/tmp/UPDATE-SuperSU.zip");

ui_print("Install busybox...");
run_program("/tmp/busybox", "--install", "-s", "/sbin");

ui_print("Mount system partition...");
mount("ext4", "EMMC", "/system", "/system");

show_progress(0.200000, 0);
show_progress(0.200000, 10);

ui_print("Updating...");
run_program("/tmp/updater.sh", "/tmp/UPDATE-SuperSU.zip");

ui_print("Unmounting system...");
unmount("/system");

我们现在其实就可以去测验了,首先,我没有这手机,所以也不好测试,其次,有真机的小伙伴野不要去测试,因为这篇博客只是抛砖引玉而已,并没有讲的多详细,我们只是把这个步骤和思想走下去,以后我们会用更高端的工具来测试

想继续连接的话,可以时刻关注一下,下一篇主要是分析从recovery中备份出来的ZIP包制作成ROM包

最新文章

  1. C语言static
  2. iOS开发之微信聊天工具栏的封装
  3. SQL 语言 - 数据库系统原理
  4. C2C,B2C,F2C三种电商运营模式的比较
  5. Mac查看端口占用情况
  6. php排序之快速排序
  7. CDH5 安装过程
  8. MySQL单列索引和组合索引的区别介绍
  9. xml配置与使用
  10. JD . 简单的网站构成、引入图标、去除 图片间距/加粗/倾斜/下划线/蓝色外边框 禁止文本拖拽、文字居中、做logo、模拟鼠标 、不使用hover外部css样式实现hover鼠标悬停改变样式
  11. 基于ssh,shell,python,iptables,fabric,supervisor和模板文件的多服务器配置管理
  12. C++重载输入流复习
  13. SpringBoot基础系列-使用Profiles
  14. vim 多标签和多窗口
  15. 1489 ACM 贪心
  16. linux c使用socket进行http 通信,并接收任意大小的http响应(二)
  17. python爬虫 scrapy框架(一)爬取壁纸照片
  18. 第18章 SysTick—系统定时器
  19. 编程语法分析之“优先级”和“结合律”
  20. SVN版本控制系统搭建(结合http服务)

热门文章

  1. bmp格式图像的读写函数(对一个开源代码的封装)
  2. 14 ListFragment 代码案例
  3. (NO.00005)iOS实现炸弹人游戏(十):游戏主角(三)
  4. Java基础---Java---网络编程---TCP的传输、客户端和服务端的互访、建立一个文本转换器、编写一个聊天程序
  5. Servlet3.0注解@WebInitParam和@WebServlet
  6. 高通8x12平台开机画面制作工具
  7. linux中echo的用法
  8. 11 PopupMenu菜单和代码例子
  9. Hadoop:Hadoop基本命令
  10. android fragement报nullexcption错误