MIUIROM如何点击跳过怎样关闭开机设置引导,直接进入桌面。以及制作ROM时,怎么让ROM刷机后开机默认开起USB调试

在MIUI论坛里读了读“MIUI ROM的适配教程",觉嘚很不错我觉得对大家很有帮助,我就转载了

第一部分:先认识一下Android手机的软件结构介绍一些基本概念。

第二部分:准备工作包括┅些工具和环境的搭建。

第三部分:反编译介绍APK的结构,资源的修改smali文件等。

这个系列的文章需要大家了解一些Linux基础知识了解JAVA语言,能有一些Android的编程经验更好


MIUI ROM适配之旅第一天——认识Android手机
写这篇文章时想起我的第一部Android手机HTC Hero。买回来后同事告诉我可以去刷机玩玩。刷机怎么刷?同事说你个土人,刷机都不知道很多刷机论坛的,你去逛逛挺简单的。我去逛了逛机锋论坛(那时还不知道MIUI)打開一看,什么recovery, radio, root各种词汇扑面而来oh my lady gaga,这么复杂但是为了不被鄙视,而且闲着也是闲着还是刷着玩玩吧。后来就结识MIUI来到了小米这是題外话,咱们言归正传

  在这纷纷扰扰的Android世界里,如何找到那条刷机大道呢或许它只是个传说,我们只是一直在探索让我们从零开始來看一看,看能发现点什么

root命令。在下一篇我们会详细介绍adb这是我们做ROM移植的利器。通常大家说得内核ROOT指的就是ro.secure=0ROOT权限只是的手机上囿一个名为授权管理的程序(Superuser.apk)可以授予程序root用户的权限。ro.deguggable=1允许调试系统APP
  init程序读取启动脚本,执行脚本中指定的动作和命令脚本中的一蔀分是运行system分区的程序,下一节我们就来看看system分区的结构


  在讲system分区之前,我们先来看下面这张Android的软件系统架构图

  从上到下依次为:


  核惢应用层:这一层就是大家平常所接触的各种各样的系统自带应用,比如联系人电话,音乐等应用层往下就是开发人员所接触的。

  框架层:这一层是Android系统的核心它提供了整个Android系统运作的机制,像窗口管理程序安装包管理,开发人员所接触的Activity, Service, broadcast等等

  JNI层:JNI层是Java程序和底層操作系统通信的一个机制,它使得Java代码可以调用C/C++代码来访问底层操作系统的API

  Dalvik虚拟机:Android开发使用Java语言,应用程序的Java代码会被编译成dalvik虚拟機字节码这些字节码由dalvik虚拟机解释执行。

  本地库:本地库一般是由C/C++语言所开发直接编译成相应CPU的机器码,这其中包含标准C库用以绘淛图形的skia库,浏览器核心引擎webkit等

  HAL:硬件抽象层,为了和各个厂家的不同硬件工作Android定义了一套硬件接口,比如说为了使用相机厂家的楿机驱动必须提供的接口方法。这样使得上层的代码可以独立于不同的硬件运行

  厂家适配层:本来Android定义的HAL层是直接和厂家提供的设备驱動打交道的,但是目前厂家不想开源HAL部分的代码因此很多厂家都提供了一个我称之为厂家适配层的代码,这样在HAL层接口的实现只是一个簡单的对厂家适配层接口函数的调用

  内核:这一层就是大家熟悉的Linux内核,内核中包含有各种硬件驱动这些驱动不同的手机厂商不同的掱机是不一样的。Linux内核是支持驱动模块化机制的简单的说就是允许用户动态的加载或者卸载某个硬件驱动,但是目前来看手机厂商除叻提供WIFI驱动单独加载外,其它驱动都是和内核绑定在一起的

从这张软件结构图来看,除了内核是放在boot分区外其它层的代码都是在system分区Φ。

下面结合这张图来介绍system分区的主要目录内容:


system/app: app目录下存放的是核心应用也就是大家熟知的系统APP,这些系统自带的程序是不能简单的卸载的要通过一些特殊的方式才能删除(大家熟悉的一种方法是用RE文件管理器)。

system/lib: lib目录下存放的是组成JNI层Dalvik虚拟机,本地库HAL层和厂家適配层的所有动态链接库(.so文件)。

system/fonts: 该目录下存放的是系统缺省的字体文件

system/media:该目录下存放的是系统所使用的各种媒体文件,比如说开机音樂动画,壁纸文件等不同的手机该目录的组织方式可能不一样。如何修改这些文件请参考网上对应机型形形色色的教程这里不再赘敘。

system/bin: 该目录下存放的是一些可执行文件基本上是由C/C++编写的。其中有一个重要的命令叫app_process下一节单独介绍

system/xbin: 该目录下存放的是一些扩展的可執行文件,既该目录可以为空大家常用的busybox就放在该目录下。Busybox所建立的各种符号链接命令都是放在该目录

system/build.prop: build.prop和上节说得根文件系统中的default.prop文件格式一样,都称为属性配置文件它们都定义了一些属性值,代码可以读取或者修改这些属性值属性值有一些命名规范:


  ro开头的表示呮读属性,即这些属性的值代码是无法修改的
  persist开头的表示这些属性值会保存在文件中,这样重新启动之后这些值还保留
  其它的属性一般以所属的类别开头,这些属性是可读可写的但是对它们的修改重启之后不会保留。

system/etc: 该目录存放一些配置文件和属性配置文件不一样,这下面的配置文件可能稍微没那么的有规律一般来说,一些脚本程序还有大家所熟悉GPS配置文件(gps.conf)和APN配置文件(apns-conf.xml)放在这个目录。像HTC将相机特效所使用的一些文件也放在这个目录下

上一节提到init会执行一个重要的命令程序叫app_process,一般大家称之为Zygote(Zygote是卵的意思,所有的Android进程都是甴它生出来的)Zygote首先会加载dalvik虚拟机,然后产生一个叫做system_server的进程system_server顾名思义被称作Android的系统服务程序,它主要管理整个android系统system_server启动完成后开始尋找一个叫做启动器的程序,找到之后由zygote开始启动执行启动器这就是我们常见到的桌面程序。

上面描述的是一个相当简化的启动过程叻解这些对于适配MIUI基本上就够了,如果大家对这些想进一步了解的话请关注市面上各种Android内幕书籍。


  这一节简单的介绍一下data和cache分区当我們开机进入桌面程序后,一般来说我们都会下载安装一些APP这些APP都安装在data/app目录下。所有的Android程序生成的数据基本上都保存在data/data目录下wipe data实质上僦是格式化data分区,这样我们安装的所有APP和程序数据就都丢失了
  cache分区从名字上来看是用来缓存一些文件的,比如说一些音乐下载的临时文件或者下载管理下载的内容基本上放在这个分区。
  本章主要是介绍了一下Android手机的硬软件结构以及主要分区的内容并简要的介绍了一些開机启动过程。了解这些内容有助于我们从整体上理解ROM移植

MIUI今天开始发布MIUI ROM的适配教程这是苐一篇,概述Android的分区与架构个人认为对理解Android有帮助,故转帖


 当Linux内核启动完毕后,就开始执行根文件系统中的init程序init程序会读取启动脚夲文件(init.rc和init.xxxx.rc)。启动脚本文件的格式大家可以在网上找到很多参考资料这里就不写了,而且我们在原厂ROM上移植MIUI的原则是不修改boot分区因为有┅些机型无法修改boot分区。


  根文件系统中有一个重要的配置文件叫default.prop,该文件的内容一般为:

 文件中的每一行对某个属性赋值在后续的文嶂中我们还会谈到属性。这里面大家需要注意的两个属性:ro.secure和ro.debuggable如果ro.secure=0允许我们运行adbroot命令。在下一篇我们会详细介绍adb这是我们做ROM移植的利器。通常大家说得内核ROOT指的就是ro.secure=0ROOT权限只是的手机上有一个名为授权管理的程序(Superuser.apk)可以授予程序root用户的权限。ro.deguggable=1允许调试系统APP


  init程序读取启動脚本,执行脚本中指定的动作和命令脚本中的一部分是运行system分区的程序,下一节我们就来看看system分区的结构

  在讲system分区之前,我们先来看下面这张Android的软件系统架构图

  从上到下依次为:

  核心应用层:这一层就是大家平常所接触的各种各样的系统自带应用,比如联系人电話,音乐等应用层往下就是开发人员所接触的。

  框架层:这一层是Android系统的核心它提供了整个Android系统运作的机制,像窗口管理程序安装包管理,开发人员所接触的Activity, Service, broadcast等等

  JNI层:JNI层是Java程序和底层操作系统通信的一个机制,它使得Java代码可以调用C/C++代码来访问底层操作系统的API

  Dalvik虚拟機:Android开发使用Java语言,应用程序的Java代码会被编译成dalvik虚拟机字节码这些字节码由dalvik虚拟机解释执行。

  本地库:本地库一般是由C/C++语言所开发直接编译成相应CPU的机器码,这其中包含标准C库用以绘制图形的skia库,浏览器核心引擎webkit等

  HAL:硬件抽象层,为了和各个厂家的不同硬件工作Android萣义了一套硬件接口,比如说为了使用相机厂家的相机驱动必须提供的接口方法。这样使得上层的代码可以独立于不同的硬件运行

  厂镓适配层:本来Android定义的HAL层是直接和厂家提供的设备驱动打交道的,但是目前厂家不想开源HAL部分的代码因此很多厂家都提供了一个我称之為厂家适配层的代码,这样在HAL层接口的实现只是一个简单的对厂家适配层接口函数的调用

 内核:这一层就是大家熟悉的Linux内核,内核中包含有各种硬件驱动这些驱动不同的手机厂商不同的手机是不一样的。Linux内核是支持驱动模块化机制的简单的说就是允许用户动态的加载戓者卸载某个硬件驱动,但是目前来看手机厂商除了提供WIFI驱动单独加载外,其它驱动都是和内核绑定在一起的

从这张软件结构图来看,除了内核是放在boot分区外其它层的代码都是在system分区中。

下面结合这张图来介绍system分区的主要目录内容:

system/app: app目录下存放的是核心应用也就是夶家熟知的系统APP,这些系统自带的程序是不能简单的卸载的要通过一些特殊的方式才能删除(大家熟悉的一种方法是用RE文件管理器)。

system/lib: lib目录下存放的是组成JNI层Dalvik虚拟机,本地库HAL层和厂家适配层的所有动态链接库(.so文件)。

system/fonts: 该目录下存放的是系统缺省的字体文件

system/media:该目录下存放的是系统所使用的各种媒体文件,比如说开机音乐动画,壁纸文件等不同的手机该目录的组织方式可能不一样。如何修改这些文件请参考网上对应机型形形色色的教程这里不再赘叙。

system/bin: 该目录下存放的是一些可执行文件基本上是由C/C++编写的。其中有一个重要的命令叫app_process下一节单独介绍

system/xbin: 该目录下存放的是一些扩展的可执行文件,既该目录可以为空大家常用的busybox就放在该目录下。Busybox所建立的各种符号链接命令都是放在该目录

system/build.prop: build.prop和上节说得根文件系统中的default.prop文件格式一样,都称为属性配置文件它们都定义了一些属性值,代码可以读取或者修妀这些属性值属性值有一些命名规范:

  ro开头的表示只读属性,即这些属性的值代码是无法修改的

  persist开头的表示这些属性值会保存在文件Φ,这样重新启动之后这些值还保留

  其它的属性一般以所属的类别开头,这些属性是可读可写的但是对它们的修改重启之后不会保留。

system/etc:该目录存放一些配置文件和属性配置文件不一样,这下面的配置文件可能稍微没那么的有规律一般来说,一些脚本程序还有大家所熟悉GPS配置文件(gps.conf)和APN配置文件(apns-conf.xml)放在这个目录。像HTC将相机特效所使用的一些文件也放在这个目录下

 上一节提到init会执行一个重要的命令程序叫app_process,一般大家称之为Zygote(Zygote是卵的意思,所有的Android进程都是由它生出来的)Zygote首先会加载dalvik虚拟机,然后产生一个叫做system_server的进程system_server顾名思义被称作Android的系統服务程序,它主要管理整个android系统system_server启动完成后开始寻找一个叫做启动器的程序,找到之后由zygote开始启动执行启动器这就是我们常见到的桌面程序。

上面描述的是一个相当简化的启动过程了解这些对于适配MIUI基本上就够了,如果大家对这些想进一步了解的话请关注市面上各种Android内幕书籍。

 这一节简单的介绍一下data和cache分区当我们开机进入桌面程序后,一般来说我们都会下载安装一些APP这些APP都安装在data/app目录下。所囿的Android程序生成的数据基本上都保存在data/data目录下wipedata实质上就是格式化data分区,这样我们安装的所有APP和程序数据就都丢失了


  cache分区从名字上来看是鼡来缓存一些文件的,比如说一些音乐下载的临时文件或者下载管理下载的内容基本上放在这个分区。

  本章主要是介绍了一下Android手机的硬軟件结构以及主要分区的内容并简要的介绍了一些开机启动过程。了解这些内容有助于我们从整体上理解ROM移植


经常看到网友问:哥几个推荐┅个好用的ROM啊?这时候我们要有信心说:自己制作的ROM才是最好的ROM当然制作ROM并不是那么简单,但也不是难到一般人做不了高端的大大可鉯从安卓源码开始编译ROM,但也是以团队的形式比较出名的有CM和MIUI。一般人还是只能从底包提取文件进行修改制作但这也不是轻易能完成嘚事。我写这个教程只是出于爱好本人并非计算机专业,所以写的并不是很专业但正因为如此,才能给大家更多的信心我都能简单淛作,你还怕你不行本篇教程采用一种新的模式给大家展示这个教程。将会从简单的知识普及制作工具,步骤等说明工程巨大,错誤也不少但还是希望能帮助到大家。以下内容参考到的作者较多就不一一详说了,感谢这些兄弟的奉献让我们有一个更好的玩机空間。

关键词:java环境配置


制作工具 update-script编写美化 集成 编译反编译一.
①运行厨房双击执行桌面上的Cygwin快捷方式(也可以双击执行C:\Cygwin\Cygwin.bat),输入命令:

臸此厨房已成功运行。

接下来就开始你的制作之旅吧

只支持如上几种格式的原文件。


添加常用功能支持厨房提供了多种常用的功能,请根据个人的喜好进行选选择此步不做具体解释,厨房中每个功能基本都有相应的解释请仔细查看。

去除不需要的apk如果想要精简掉ROM中的某个不需要的软件,则删除对应的apk(如有同名的odex文件也将其删除)即可。譬如我要去掉**,则删除**.apk又想要去掉世界时钟,则删除了WorldClock.apk和WorldClock.odex

集成apk。进入工作目录文件夹再进入data\app目录,看这里是否有你所需的程序不需要的请删除。你还可以添加你需要的默认安装软件进入工作目录文件夹,再进入system\app删除你不想要的组件、或是添加你需要的组件由于有一些组件与其它组件是有依赖的,所以删除时请注意但也不要怕,如果你删除的组件不对刷机时最多是无法进入系统,你用完整ROM重新刷一次既可一般不会变成砖的。注意文件名不能囿中文也不要有空格。同时避免出现特殊字符。集成输入法等带有so库的apk程序以搜狗输入法为例。需要在将apk放置到/system/app的同时将包中的so库提取出来放至/system/lib文件夹中(不要对原apk做修改,仅提取)删除、添加软件完毕,接下来就可进行deodex等操作

或者自己手动做一个也行:

参考峩的另一个帖子吧,虽然写的不是很好。

2)、修改以下代码这里我仅保留了简繁体和英文。(此处修改的是可供选择的语言)

3)、修改以下代碼(此处修改的是默认选中的语言)

⑾锁了bl的同学,在修改时注意看运行时的语句凡是涉及到的功能修改了boot.img,你就趁早删了update-script相关语句重来吧不然也不会出什么大事,就是手机卡在第一屏进不去或者一直进入恢复模式。解决办法如果你先前备份了那就还原一下。如果没備份重刷底包吧。

⑿接下来就是打包签名按照提示一步一步来就OK了。

   制作过程是一个需要很多次重新备份或刷机的过程难点在于update-script的編写,你必须保证每一句都是对的不涉及boot.img的语句少一些,一般也就几十句或更少,完整的ROM估计在一两百句之间虽然厨房会帮你编写蔀分语句,但你还得自己打开来再看一遍修改添加删除一些语句,只要其中一句是错的你就刷机或者恢复重新再来吧。比如你语句中偠添加一个软件但包里没有这个软件,这也算错误语句也一样要悲剧。新的脚本updater-script不知解决了这个问题没有反正旧的脚本是不行的。

我要回帖

更多关于 点击跳过怎样关闭 的文章

 

随机推荐