`
dss16694
  • 浏览: 148402 次
社区版块
存档分类
最新评论

全面认识Android手机 (MIUI ROM适配之旅第一天——认识Android手机 )

 
阅读更多

在MIUI论坛里读了读“MIUI ROM的适配教程",觉得很不错,我觉得对大家很有帮助,我就转载了
原文章论坛地址 :http://www.miui.com/forum-forumdisplay-fid-38-page-1.html

总共六部分:

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

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

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

第四部分:移植MIUI Framework

第五部分:移植MIUI APP

第六部分:制作刷机包

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


MIUI ROM适配之旅第一天——认识Android手机


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

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

1. bootloader
  当我们拿到一款手机,第一件事应该就是按下电源键开机,那么从开机到进入到桌面程序这中间发生了些什么呢,我们从下面这张简化了的手机结构图开始:

 

  注意:该结构图并不反映手机的实际分区顺序和位置,只是一个逻辑结构图。

  大家可以简单的把手机的ROM存储类比为我们电脑上的硬盘,这个硬盘被分成了几个分区:bootloader分区,boot分区,system分区等等。后面我们会逐渐介绍各个分区的用途。所谓的刷机我们可以简单的理解成把软件安装在手机的某些分区中,类似于我们在电脑上安装Windows系统。

  当按下电源键手机上电启动后,首先从bootloader分区中一个固定的地址开始执行指令,如图所示,bootloader分区分成两个部分,分别叫做primary bootloader和secondary stage bootloader。Primary bootloader主要执行硬件检测,确保硬件能正常工作后将secondary stage bootloader拷贝到内存(RAM)开始执行。Secondary stage bootloader会进行一些硬件初始化工作,获取内存大小信息等,然后根据用户的按键进入到某种启动模式。比如说大家所熟知的通过电源键和其它一些按键的组合,可以进入到recovery,fastboot或者选择启动模式的启动界面等。我们在论坛上看到的bootloader通常指的就是secondary stage bootloader。不过我们不需要关心太多的细节,可以简单的理解为bootloader就是一段启动代码,根据用户按键有选择的进入某种启动模式。

  fastboot模式:fastboot是android定义的一种简单的刷机协议,用户可以通过fastboot命令行工具来进行刷机。比如说fastboot flash boot boot.img这个命令就是把boot.img的内容刷写到boot分区中。一般的手机厂商不直接提供fastboot模式刷机,而是为了显示他们的牛B之处,总是会提供自己专有的刷机工具和刷机方法。比如说三星的Odin,摩托的RSD,华为的粉屏等等。但是其本质实际上是相同的,都是将软件直接flash到各个分区中。
    
  recovery模式:recovery是android定义的一个标准刷机协议。当进入recovery模式时,secondary stage bootloader从recovery分区开始启动,recovery分区实际上是一个简单的Linux系统,当内核启动完毕后,开始执行第一个程序init(init程序是Linux系统所有程序的老祖宗)。init会启动一个叫做recovery的程序(recovery模式的名称也由此而来)。通过recovery程序,用户可以执行清除数据,安装刷机包等操作。一般的手机厂商都提供一个简单的recovery刷机,而大名鼎鼎的CWM Recovery就是一个加入了很多增强功能的recovery,要想用上CWM Recovery前提是recovery分区可以被刷写。大家在论坛上看到的解锁bootloader,通常指的就是解锁recovery或fastboot,允许刷写recovery分区,这样大家就可以用上喜爱的CWM Recovery了。

  手机除了普通的CPU芯片以外,还有MODEM处理器芯片。该芯片的功能就是实现手机必需的通信功能,大家通常所的刷RADIO就是刷写modem分区。

2. 正常启动

  当我们只是按下电源键开机时,会进入正常启动模式。Secondary stage bootloader会从boot分区开始启动。Boot分区的格式是固定的,首先是一个头部,然后是Linux内核,最后是用作根文件系统的ramdisk。
    
  一般针对每个机型的完整刷机包中会有一个boot.img文件,这就是boot分区镜像文件。如何编辑该镜像文件可以参照这篇文章http://android-dls.com/wiki/inde ... Re-Pack_Boot_Images。
    
  当Linux内核启动完毕后,就开始执行根文件系统中的init程序,init程序会读取启动脚本文件(init.rc和init.xxxx.rc)。启动脚本文件的格式大家可以在网上找到很多参考资料,这里就不写了,而且我们在原厂ROM上移植MIUI的原则是不修改boot分区,因为有一些机型无法修改boot分区。
    
  根文件系统中有一个重要的配置文件,叫default.prop,该文件的内容一般为:
#
# ADDITIONAL_DEFAULT_PROPERTIES
#
ro.secure=1
ro.allow.mock.location=1
ro.debuggable=0
persist.service.adb.enable=1。
  文件中的每一行对某个属性赋值,在后续的文章中我们还会谈到属性。这里面大家需要注意的两个属性:ro.secure和ro.debuggable。如果ro.secure=0允许我们运行adb root命令。在下一篇我们会详细介绍adb,这是我们做ROM移植的利器。通常大家说得内核ROOT指的就是ro.secure=0。ROOT权限只是的手机上有一个名为授权管理的程序(Superuser.apk)可以授予程序root用户的权限。ro.deguggable=1允许调试系统APP。
    
  init程序读取启动脚本,执行脚本中指定的动作和命令,脚本中的一部分是运行system分区的程序,下一节我们就来看看system分区的结构。

3. 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/framework: 该目录下存放的是框架层的JAR包,其中对MIUI移植来说有3个最重要的JAR包(framework.jar, android.policy.jar, services.jar)。后续的文章会重点介绍这3个包。

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

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

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

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

system/build.prop: build.prop和上节说得根文件系统中的default.prop文件格式一样,都称为属性配置文件。它们都定义了一些属性值,代码可以读取或者修改这些属性值。属性值有一些命名规范:
  ro开头的表示只读属性,即这些属性的值代码是无法修改的。
  persist开头的表示这些属性值会保存在文件中,这样重新启动之后这些值还保留。
  其它的属性一般以所属的类别开头,这些属性是可读可写的,但是对它们的修改重启之后不会保留。
  很多ROM制作者都会修改一下build.prop信息,里面的一些以ro.build开头的属性就是你在手机设置中的关于手机里看到的。可以通过修改build.prop文件来将这个ROM打上自己的印记(XXX所修改)。我见过一个只是删了system/app的一些程序,然后修改build.prop中的ro.build.display.id和ro.build.version.incremental中的两个属性值打上自己的大名的ROM。

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

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

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

5. data和cache分区
  这一节简单的介绍一下data和cache分区。当我们开机进入桌面程序后,一般来说我们都会下载安装一些APP,这些APP都安装在data/app目录下。所有的Android程序生成的数据基本上都保存在data/data目录下。wipe data实质上就是格式化data分区,这样我们安装的所有APP和程序数据就都丢失了。
    
  cache分区从名字上来看是用来缓存一些文件的,比如说一些音乐下载的临时文件,或者下载管理下载的内容基本上放在这个分区。

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

分享到:
评论

相关推荐

    判断android手机是华为小米魅族系统

    不同厂商如华为(EMUI)、小米(MIUI)和魅族(Flyme)会基于Android源码进行深度定制,形成自己独特的ROM,提供了各自特有的功能和用户体验。 在实现这个工具类时,开发者通常会依赖Android提供的`Build`类,该类...

    适配小米手机的拍照相册选择方案

    2. **小米手机特有的适配**:小米手机可能有自己的定制化ROM,这可能导致系统级别的行为与其他Android设备有所不同。例如,小米手机可能对存储路径、相册访问方式或者拍照接口有特殊处理。适配方案需要考虑到这些...

    安卓Android源码——小米系列之小米文件管理器.zip

    【标题】"安卓Android源码——小米系列之小米文件管理器.zip" 提供的是关于小米公司MIUI系统中内置文件管理器的源代码分析。这个压缩包可能包含了用于理解和研究小米文件管理器运行机制的各个组件和功能的源代码。在...

    安卓Android源码——MIUI文件管理器.zip

    【安卓Android源码——MIUI文件管理器】 在Android操作系统中,MIUI是小米公司推出的一个深度定制的用户界面,它以其丰富的功能和独特的设计深受用户喜爱。本压缩包文件包含的是MIUI文件管理器的源代码,对于开发者...

    Android源码——MIUI小米录音机源码.zip

    MIUI小米录音机是小米公司为其定制的Android操作系统MIUI中的一个重要组件,它为用户提供录音功能,具有良好的用户界面和高效的操作体验。本压缩包包含了MIUI小米录音机的源代码,这对于Android开发者来说是一份宝贵...

    小米ROM提取工具

    【小米ROM提取工具】是一款专为小米手机设计的刷机辅助软件,主要用于从官方更新文件中提取出完整的ROM包,方便用户进行个性化定制或者备份恢复系统。刷机是指更换手机的操作系统或系统组件,通常用于优化性能、增加...

    安卓Android源码——小米系列之小米便签.zip

    《安卓Android源码——小米系列之小米便签》是一份深度剖析小米便签应用程序源代码的资源集合。这个压缩包包含了一系列的图片文件,可能是为了辅助理解源代码中的关键概念和设计模式。从标签"安卓 android 源码"我们...

    Android 悬浮窗权限各机型各系统适配大全(总结)

    4. 还有一个方法就是发动人力资源去找,看看已经适配该手机机型的 app 公司是否有自己认识的人,或者干脆点,直接找这个手机公司里面是否有自己认识的手机开发朋友,直接询问,方便快捷。 在判断手机的机型时,办法...

    史上最全 最新 安卓 android 手机刷机教程 root MIUI ROM 卡编程资料刷 机刷.docx

    ### 安卓手机刷机教程:详解...通过本文的介绍,相信您已经对安卓手机刷机有了一个较为全面的认识,尤其是针对HTC G12卡刷MIUI ROM的操作流程。希望这些知识能够帮助您更好地掌握刷机技巧,享受个性化手机带来的乐趣。

    Android源码——MIUI小米录音机源码.7z

    MIUI小米录音机是小米公司为其定制的Android操作系统开发的一款录音应用,它的源码对于开发者来说是一份宝贵的学习资源,可以深入理解Android音频处理、UI设计以及应用优化等多个方面的技术。下面将详细解析MIUI小米...

    Android源码——小米系统之便签源码.zip

    在本压缩包“Android源码——小米系统之便签源码.zip”中,我们主要探讨的是小米手机系统中便签应用的源代码。这个源代码分析对于深入理解Android开发,尤其是定制系统应用的开发有着重要的价值。以下是关于Android...

    史上最全 最新 安卓 android 手机刷机教程 root MIUI ROM 卡刷 机刷.doc

    本文将详细介绍安卓 Android 手机刷机教程,主要面向 HTC G12 手机,并且提供了 MIUI ROM 的刷机方法和 Recovery 安装方法。 刷机前的准备 1. 首先,需要确保手机已经是 S-OFF 状态。 2. 确保 SD 卡是 FAT32 格式...

    安卓Android源码——小米系统之便签源码.zip

    本资源是关于"安卓Android源码——小米系统之便签应用"的压缩包,它提供了小米手机内置便签应用的源代码,这对于想要了解Android系统级应用开发,尤其是小米定制系统MIUI的开发者来说,是一份宝贵的学习资料。...

    Android源码——小米系统之便签源码.7z

    在"Android源码——小米系统之便签源码.7z"中,我们可以研究到以下关键知识点: 1. **Android应用程序结构**:便签应用源码会展示一个典型的Android应用结构,包括`MainActivity`、`Fragment`、`Service`、`...

    安卓Android源码——小米系列之小米录音机.zip

    本文将以“安卓Android源码——小米系列之小米录音机”为主题,深入探讨小米录音机的源码实现,帮助读者了解安卓录音功能的底层机制和优化策略。 首先,小米录音机作为一款内置在小米手机中的应用,其源码为我们...

    Android手机管家源码.rar

    Android手机管家是一款针对Android平台设计的系统优化与安全管理应用,它集合了清理垃圾、内存加速、病毒查杀、电池管理等多种功能,旨在为用户提供一个安全、高效的手机环境。本文将从源码角度出发,深入探讨其背后...

    安卓Android源码——高仿小米launcher(ZAKER)跨屏拖动item.zip

    本压缩包"安卓Android源码——高仿小米launcher(ZAKER)跨屏拖动item.zip"提供了对小米Launcher(ZAKER风格)跨屏拖动item功能的实现,这对于开发者来说是一个宝贵的资源,可以帮助他们学习如何构建类似的应用启动器...

    安卓Android源码——MIUI指南针.zip

    这份“安卓Android源码——MIUI指南针.zip”文件很可能是包含了一个完整的指南针应用源代码,供开发者学习和参考。下面,我们将深入探讨与这个项目相关的几个关键点。 1. **Android SDK**: Android软件开发工具包...

    安卓Android源码——MIUI小米录音机源码.zip

    在Android操作系统中,MIUI小米录音机是一款非常常见的应用,它提供了录音、编辑和分享录音文件的功能。深入理解MIUI小米录音机的源码有助于开发者更好地掌握Android音频处理、UI设计以及系统服务的交互等关键知识点...

Global site tag (gtag.js) - Google Analytics