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包

Android ROM开发(三)——精简官方ROM并且内置ROOT权限,开启Romer之路的更多相关文章

  1. Android ROM开发(二)——ROM架构以及Updater-Script脚本分析,常见的Status错误解决办法

    Android ROM开发(二)--ROM架构以及Updater-Script脚本分析,常见的Status错误解决办法 怪自己二了,写好的不小心弄没了,现在只好重新写一些了,上篇简单的配置了一下环境, ...

  2. Windows下Nexus 5的Android 5.0以上版本官方ROM的刷机教程

    博客链接:http://blog.csdn.net/qq1084283172/article/details/52334452 折腾Android逆向的时候,经常需要给Nexus 5刷机.最近给Nex ...

  3. uni-app&H5&Android混合开发三 || uni-app调用Android原生方法的三种方式

    前言: 关于H5的调用Android原生方法的方式有很多,在该片文章中我主要简单介绍三种与Android原生方法交互的方式. 一.H5+方法调用android原生方法 H5+ Android开发规范官 ...

  4. C#-Xamarin的Android项目开发(三)——发布、部署、打包

    前言 部署,通常的情况下,它其实也是项目开发的一个难点. 为什么这么说呢?因为,它不是代码开发,所以很多开发者本能的拒绝学习它. 并且一个项目配置好一次以后,部署的步骤和部署的人通常很固定,所以大部分 ...

  5. Android动态换肤(一、应用内置多套皮肤)

    动态换肤在很多android应用中都有使用,用户根据自己的喜好设置皮肤主题,可以增强用户使用应用的舒适度. Android换肤可以分为很多种,它们从使用方式,用户体验以及项目框架设计上体现了明显的差异 ...

  6. Python开发【第五篇】内置函数

    abs() 函数返回数字的绝对值 __author__ = "Tang" a = -30 all() 函数用于判断给定的可迭代参数iterable中的所有元素是否都为True,如果 ...

  7. 解剖Nginx·模块开发篇(5)解读内置非默认模块 ngx_http_stub_status_module

    1 Background ngx_http_stub_status_module 是一个 Nginx 的内置 HTTP 模块,该模块可以提供 Nginx 的状态信息.默认情况下这个模块是不被编译进来的 ...

  8. 【转】玩转Android Camera开发(三):国内首发---使用GLSurfaceView预览Camera 基础拍照demo

    http://blog.csdn.net/yanzi1225627/article/details/33339965 GLSurfaceView是OpenGL中的一个类,也是可以预览Camera的,而 ...

  9. 玩转Android Camera开发(三):国内首发---使用GLSurfaceView预览Camera 基础拍照demo

    GLSurfaceView是OpenGL中的一个类,也是能够预览Camera的,并且在预览Camera上有其独到之处. 独到之处在哪?当使用Surfaceview无能为力.痛不欲生时就仅仅有使用GLS ...

随机推荐

  1. 前端面试题-----js和jquery的区别是什么?

    最近我有一个朋友问我js和jquery的区别是什么,于是我打算写一篇文章说下到底有什么区别. 首先你要知道: 1.js是网页的脚本语言,记住哈,js是语言! 2.jquery是用js语言写出来的一个框 ...

  2. How to speed up Remote Desktop Connection in Win7

    run following command in DOS window: netsh interface tcp set global autotuninglevel=disabled or nets ...

  3. Android时遇到R.java was modified manually! Reverting to generated version!

    欢迎关注公众号,每天推送Android技术文章,二维码如下:(可扫描) 进入 eclipse后clipse Menu >Projects > clean 这么做就把R文件删了,但是别担心, ...

  4. LATEX TEMPLATE (SPRINGER) (*.BST)

    该模板在哪里下载? http://www.springer.com/computer/image+processing/journal/11263, Instructions for Authors, ...

  5. Android简易实战教程--第十一话《获取手机所有应用信息Engine类详解》

    如果想要获取系统手机应用的详细信息,那么下边代码可以直接作为模板使用.笔者对每一行代码都做了注解,供您参考.直接上代码: package com.example.itydl.engines; impo ...

  6. UNIX网络编程——TCP带外数据小结

    带外数据概念实际上时向接收端传送三个不同的信息:(1)发送端进入紧急模式这个事实.接收进程得以通知这个事实的手段不外乎SIGURG信号或select调用.本通知在发送进程发送带外字节后由发送端TCP立 ...

  7. Aandroid TV 基于Leanback支持最新MD设计的TV开发框架

    原文地址:http://blog.csdn.net/sk719887916 作者:skay 基于6.0最新的API 支持TV的框架 Android 6.0已完美支持TV开发,之前的5.0后Recycl ...

  8. (七十八)使用第三方框架INTULocationManager实现定位

    前面(第七十五.七十六篇)讲述了如何通过CoreLocation获取位置,授权.获取等相当复杂,如果借助于第三方框架,可以简单的实现授权与定位. 首先在GitHub中搜索LocationManager ...

  9. 【如何快速的开发一个简单的iOS直播app】(代码篇)

    开篇([如何快速的开发一个完整的iOS直播app](原理篇)) 好久没写简书,因为好奇的我跑去学习直播了,今天就分享一下我的感慨. 目前为止直播还是比较热点的技术的,简书,git上有几篇阅读量和含金量 ...

  10. iOS中 UIMPMediaPickerController播放系统音乐

    布局如下: 引入框架: #import <AVFoundation/AVFoundation.h> #import <MediaPlayer/MediaPlayer.h> 遵循 ...