安卓MIUI的移殖

所需积分/C币:39 2013-07-21 20:46:48 560KB PDF
25
收藏 收藏
举报

安卓系统的秘密及MIUI的移殖 “工欲善其事,必先利其器”。在开始定制MIUI ROM 之前,我们需要搭建好必要的开 发环境。 本教程的主旨是如何基于原厂ROM 修改。我们所涉及的修改理论上说是不需要源码的, 对源码开发感兴趣的可以参照http://source.android.com。对于ROM 开发者来说,我们建议 你下载一份google 发布的android 源代码,这不是必需的,但是对于理解排查ROM 适配中 的一些错误有很大帮助。
第一章搭建开发环境 “L欽善其事,必先利其器”。在开始定制 MIUI RON之前,我们需要搭建好必要的开 发环境。 木教程的主旨是如何基于原ROM修改。我们所涉及的修改理论上说是不需要源码的, 对源码开发感兴趣的可以参照htp:/ source. android. com。对于ROM开发者来说,我们建议 你下载‘份 google发布的 android源代码,这不是必需的,但是对于理解排查ROM适配中 的一些错误有很大帮助。 1.操作系统 定制 MIUT ROM所涉及的技术本身对操作系统没有特殊要求, Windows, Linux和Mac 系统都可以。但是 matchroom项目是基于 Linux开发的,确切的说,是基于 Ubuntu开发的, 我们推荐使用 Ubuntu10以上的版本。 2.安装 Android sdK 本节简要介绍如何在 Ubuntu系统上安装 Android sdk。 Windows和Mac用户请参照 http:/developer.androidcom/sdk/installing.htm 21安装JDK 首先需要安装Java开发上具包,本文中统约定S表示 Terminal中的命令提示符,其后 的文字表示输入的命令 Ssudoadd-apt-repositorydebhttp:/archive.canonicalcom/lucidpartner sudo apl-gel S sudo apt-get install sun-java6-jdk 22下载 Android sdK包 从以下地址下载AndroidSDK包htt:/dl.google.com/android/android-dkrl6-linux.tgz 解压到你的home目录卜,假定解压后的目录为home/ patcher/ android-sdk-inux。 接下来编辑home目录下的 bashrc文件,修改PATH环境变量: export PATH=-/android-sdk-linux/platform-tools: /android-sck-linux/tools: SPATH 运行命令. bashrc来使对PATH环境变量的修改生效。 S. bashrc 23安装 运行命令 android来启动 Android SDK Manager 启动结果如下图所示: Android SDK Manager □2 Packages Tools SDK Path: /home/wangwenjun/android-sdk-linux Packages Name API Rev. status vO Tools I Android SDK Tools 14 Update available: rev.16 v x Android SDK Platform tools 8 Update available. rev. 10 口 Android40.3(AP15) DE Documentation for Android SDK 15 号 Not installed 口 SDK Platform 15 ↓ Not installed 口 C Samples ForSK 15 号 Not installed p ARM EAB/ via System image 5 ↓ Not installed O E Sources for Android SDK j5 ↓ Not installed Show: V Updates/New M Installed D Obsolete Select New/Updates Install 7 pa< Sort by: O API level O Repository Deselect all Delete 4 pa ■同 Done loading packages 选中 Android sdk tools和 Android sdk platform- tools,然后点击安装,接下来跟随应 用程序的说明进行安装。这一步完成后,我们所需要的 Android sdK也安装完毕了 注:在http://developer.androidcom/sdk/installing.htm网页中,人家会看到需要安装eclipse 定制 MIUI ROM不需要安装上 Eclipse,这个是开发 Android程序所需要的,但是强烈建议你 有 Android程序廾发基础。 2,4 adb Android SDK中对我们最重要的工具是adb( android debug bridge)。在移植 MIUI ROM过 程中,最常用的命令是 adb logcat,该命令会打印出详细的调试信息,帮助我们定位错误 为了验证adb是否工作,同时也是验证上述的步骤是否成功,打开手机中的系统设置, 选择应用程序一开发,桷保选中“USB调试”,然后用USB线连接你的手机,在Uυ untu shell 下运行命令 adb devices,如果显小和下面的信息类似,恭喜你,adb可以识别你的手机了 List of devices attached 304D1955996BE28E device 注意 (1)在 Windows下,必须安装手机相应的驱动才能成功识别手机。 (2)在 Ubuntu下,有可能会提示“ no such permissions”,这个时候有两种办法,第一种是以 root的身份运行adb。第:种办法 a)运行 Asus命令,对」我的三星手机,输出如下: Bus o02 Devicc oo1 id 1 d6b 0002 Linux Foundation 2.0 root hub Bus 00l Device 098: ID 04e8: 685e Samsung Electronics Co, Ltd 找到手机对应的那一行,记录下04e8:685e,这个分别表示该设备的 vendor和 producd。如果不确定手机对应的是哪一行,叮以在连上手机前后运行 Isusb,找 到区别的那一行 b)在/ etc/udev/ ules. d目录下新个文件99- android.rules。编辑如下: SUBSYSTEMS="usb", ATTRS id Vendor)=04e8", ATTRSidProduct;=685e MODF="066, OWNER="登录用户名 重启usb服务, sudo restart udey,重连手札。 3. patch。m项自 下血介绍 panchro的目录结构以及各目录的作用。 android:该目录下有2个了目录: systen和src。其中sc目录和将要介绍的 mlui/src目 录是一对一的关系。 android/ src是 google发布的 android源码, mui/src是miui在 google 源码基础上所做的修改。为了节省空间,在这两个目录,我们只放miui修改过的文件, 要下载完整的 android源码,请参照hip:/ Source. android. com/source/ downloading. html。 systcm日录下存放的是由gog发布的 android派码编译而成的个jar包: framework. jal, android. policy. jar和 services.ar。这些jar包的作用在之后的章节会详细阐 述 ● build:该目录是一些与编译相关的脚本 ●tols:该目录存放一些工具程序和脚却木,在定制ROM和编译过程中需要使用这些程序。 miui:该目录下有2个子目录: systcm和sre。 systcm目录下存放的是由miui源代码编 译后的部分文件,这些文件是我们定制 MIUI ROM所需要用到的所有文件。之后的章 节会详细阐述 ●i9100:针对每一个要定制的机型,创建一个单独的目录。该目录存放的是和三星19100 相关的一些修改和文件。之后的章节会以19100为例详细阐述 接下来我们开始编译生成9100的定制 MIUI ROM,假定当前目录为 / home/patcher/patchrom目求, S. build/cnvsctup sh S cd 19100 S make zipfile 以上命令运行完毕后,在1100目录下会生成一个.buid子目录,该子目录下的 MIUI9100.zip文件即是我们发布的9100刷机包 第二章认识 Android手机 写这篇文章时想起我的第一部 Android于机 HTC Hero。买回来后,同事告诉我可以去 刷机玩玩。刷机,怎么刷?同事说,你个土人,刷机都不知道,很多刷机论坛的,你去逛逛, 挺简单的。我去逛了逛机锋论坛(那时还不知道MIUI),打开一看,什么 recovery, radio,root 各种词汇扑面而来, oh my lady gaga,这么复杂。但是为了不被鄙视,而且闲着也是闲着, 还是刷着玩玩吧。后来就结识MIUI来到了小米。 在这纷纷扰扰的 Android世界里,如何找到那条刷机大道呢,或许它只是个传说,我们 只是一直在探索。让我们从零开始来看一看,看能发现点什么。 1. bootloader 当我们拿到一款于机,第一件事应该就是按下电源键开机,那么从开机到进入到桌面程 序这中间发生了些什么呢,我们从卜面这张简化了的手札结构图开始: modem分区 bootloader分区 boot分区 recovery分区 systen分区 data分区 cache分区 注意:该结构图并不反映于机的实际分区顺序和位置,只是一个逻辑结构图 大家可以简单的把手机的ROM存储类比为我们电脑上的硬盘,这个硬盘被分成了几个 分区: bootloader分区,boot分区, system分区等等。后面我们会逐渐介绍各个分区的用途。 所谓的刷机我们可以简单的理解成把软件安装在手机的某些分区中,类似于我们在电脑上安 装 Windows系统。 当按卜电源键手札上电启动后,首先从 bootloader分区中一个固定的地址开始执行指令, bootloader分区分成两个部分,分别叫做 primary bootloader和 sccondary stage bootloader Primary bootloader主要执行硬件检测,确保硬件能正常⊥作后将 secondary stage bootloader 拷贝到内存(RAM开始执行。 Secondary stage bootloader会进行一些使件初始化工作,获取 内存大小信息等,然后根据用户的按键进入到某种启动模式。比如说大家所熟知的通过电源 键和其它一些按键的组合,可以进入到 recovery, fastboot或者选择启动模式的启动界面等 我们在论坛上看到的 bootloader通常指的就是 secondary stage bootloader不过我们不需要关 心太多的细节,可以简单的理解为 bootloader就是·段启动代码,根据用户按键有选择的进 入某种启动模式。 asabot模式: Fastboot是 android定义的一种简单的刷机协议,用户可以通过 Fastboot 命令行工具来进行刷机。比如说 fastboot flash boot boot. img这个命令就是把 boot.img的内容 刷写到bot分区中。一般的手机厂商不直接提供 fastboot模式刷机,而是为了显示他们的牛 B之处,总是会提供自己专有的刷机工只和刷机方法。比如说三星的Odin,摩托的RSD, 华为的粉屏等等。但是其本质实际上是相同的,都是将软件直接fash到各个分区中 recovery模式:当进入 recoverv模式时, secondary stage bootloader从 recovery分区开始 启动, recoverv分区是一个独立的 Linux系统,当 recovery分区上的 Linux内核启动完毕后, 开始执行第一个程序 inil(init程序是 Linux系统所有程序的老祖宗)。ini会启动一个叫做 recovcry的程序( recovery模式的名称也由此而来)。通过 recovery程序,用户可以执行清除 数据,安装刷机包等操作。一般的手机厂商都提供一个简单的 recovery程序,而大名鼎鼎的 CWM Recovery就是一个加入了很多增强功能的 recovery程序,要想用上 CWM Recovery前 提是 Recovery分区可以被刷写。大家在论坛上看到的解锁 bootloader,通常指的就是解锁 recovery或 Fastboot,允许刷写 recovery分区,这样大家就可以用上喜爱的 CWM Recovery 于机除了普通的CPU芯片以外,还有 MODEM处理器芯片。该芯片的功能就是实现于 机必需的通信功能,大家通常所的刷 RADIO就是刷写moem分区 2.正常启动 当我们只是按下电源键丌机吋,会进入正常启动模式。 Secondary stage bootloader会从 boot分区开始启动。Boot分区的格式是固定的,首先是一个头部,然后是 Linux内核,最 后是用作根文件系统的 ramdisk 当 Linux内核启动完毕后,就开始执行根文件系统中的init稈序,init稈序公读取启动 脚本文件 (init. ro和 nit.xxxx.rc)。启动本文件的格式大家可以在网上找到很多参考资料, 这里就不写了,而且我们在原厂ROM上移植MIUI的原则是不修改boot分区,因为有一些 机型无法修改boot分区 根文件系统中有一个重要的配置文件,叫 default. prop,该文件的内容一般为 # ADDITIONAL DEFAULT PROPERTIES # ro. secure=l ro allow. mocklocation =1 ro debuggable=0 persist. service. adb enable=l 文件中的每一行对某个属性赋值,在后续的文章中我们还会谈到属性。这里面大家需要 注意的两个属性:ro. ecure和 ro debuggable。如果r. secure=0则允许我们运行 adb root命令。 通常大家说得内核ROOT指的就是ro. secure0。而一般所说的ROOT权限指的是手机上有 个名为授权管理的程序( Superuser. apk)可以授予程序root用户的权限。 init程序读取启动脚本,执行脚本中指定的动作和命令,脚本中的一部分是运行 systcm 分区的程序,卜一节我们就来看看 system分区的结构 3. System分区 在讲 system分区之前,我们先来看下面这张 Android的软件系统架构图。 核心应用层 框架层 JN|层 dalvik虚拟 本地厍 HAL 厂家适配层 Liux内核 从上到下依次为: 核心应用层:这层就是大家平常所接触的各种各样的系统自带应用,比如联系人,电 话,音乐等。应用层往下就是开发人员所接触的。 ●框架层:这一层是 Android系统的核心,它提供了整个 Android系统运作的机制,像窗 口管,程序安装包管理,廾发人员所接触的 Activity, Service. broadcast等等 ●JNI层:JN层是Java程序和底层操作系统通信的一个机制,它使得Java代码可以调用 CC++代码来访问底层操作系统的API ● Dalvik虚拟机: Android开发使用Java语言,应用程序的Jaa代码会被编译成 dalvik 虚拟机字节码,这些字节码由 dalvik虚拟机解释执行。 本地库:本地库一般是由C/C++语言所开发,直接编译成相应CPU的机器码,这其中 包含标准C库,用以绘制图形的skia库,浏览器核心引擎 webkit等 ●HAL:硬件抽象层,为了和各个厂家的不同硬件工作, Android定义了一套硬件接口, 比如说为了使用相机,厂家的相机驱动必须提供的接口方法。这样使得上层的代码可以 独立于不同的硬件运行 ●厂家适配层:本来 Android定义的HAL层是直接和厂家提供的设备驱动打交道的,但 是目前厂家不想开源HAL部分的代码,因此很多厂家都提供了一个我称之为厂家适配 层的代码,这样在HAL层接口的实现只是一个简单的对厂家适配层接口函数的调用 ●内核:这一层就是人家熟悉的 Linux内核,内核中包含有各种硬件驱动,这些驱动不同 的手机厂商不同的手机是不样的。 Linux内核是支持驱动模块化机制的,简单的说就 是允许用户动态的加载或者卸载某个馊件驱动,但是目前来看,手机厂商除∫提供wIFI 驱动单独加载外,其它驱动都是和内核绑定在一起的。 从这张软件结构图来看,除了内核是放在boot分区外,其它层的代码都是在 system分区中。 下面结合这张图来介绍 system分区的主要目录内容: ● system/app:app目下存放的是核心应用,也就是大家熟知的系统AP,这些系统自带 的程序是不能简单的卸载的,要通过一些特殊的方式才能删除(大家熟悉的一种方法是 用RE文件管理器) system/lib:ib目录下存放的是组成JNI层, Dalvik虚拟机,本地库,HAL层和厂家适 层的所有动态链接库(0文件) system/framework:该目录下存放的是框架层的JAR包,其中对MIUI移植来说有3个 最重要的JAR包( framework.jar, android, policy. jar, services.jar)。后续的文章会重点介绍 这3个包。 ● system/fonts:该目录下存放的是系统缺省的字体文件。 ● system/media:该日录下存放的是系统所使用的各种媒体文件,比如说开机音乐,动画, 壁纸文件等。不同的手机该目录的组织方式可能不一样。如何修改这些文件请参考网上 对应机型形形色色的教程,这里不再赘叙。 systen/bin:该目汞下存放的是一些可执行文件,基本上是由CC艹+编写的。其中有 个重要的命令叫 app process一节单独介绍。 system/xbin:该目录下存放的是·些扩展的可执行文件,既该目录可以为空。大家常用 的 busybox就放在该目录下。 Busybox所建立的各种符号链接命令都是放在该目录。 ● system/υuild,prop: build.prop和上节说待根文件系统中的 default. prop文件格式一样,都 称为属性配置文件。它们都定义了一些属性值,代码可以读取或者修改这些属性值。属 性值有一些命名规: ro开头的表示只读属性,即这些属性的值代码是无法修改的。 persist开头的表示这些属性值会保存在文件中,这样重新启动之后这些值还保留。 其它的属性一般以所属的类别开头,这些属性是可读可写的,但是对它们的修改重启之 后不会保留。 很多ROM制作者都会修改一下 build prop信息,里面的一些以 ro. build开头的属性就 是你在手机设置中的关于手机里看到的。可以通过修改 build prop文件来将这个ROM打上 自己的印记(XXX所修改)我见过一个只是删了 systcm/app的一些程序,然后修改 build prop 中的ro. build. display. id和ro. build version incremental中的两个属性值打上自己的大名的 ROM ● system/etc:该目录存放一些配置文件,和属性配置文件不一样,这下面的配置文件可能 稍微没那么的有规律。一般来说,一些脚本稈序,还有大家所熟悉GPS配置文件( gps. conf, 和APN配置文件(apns-conf:xm)放在这个目录。像HTC将相机特效所使用的一些文件 也放在这个目录下 4. Zygote(app_process) 上一节提到int会执行一个重要的命令程序叫 app process,一般大家称之为 Zygote ( Zygote是卵的意思,所有的 Android进程都是由它生出来的)。 Zygote首先会加载 dalvik 虚拟机,然后产生一个叫做 systcm server的进程。 systcm 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移植。

...展开详情
试读 35P 安卓MIUI的移殖
立即下载 低至0.43元/次 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
关注 私信
上传资源赚钱or赚积分
最新推荐
安卓MIUI的移殖 39积分/C币 立即下载
1/35
安卓MIUI的移殖第1页
安卓MIUI的移殖第2页
安卓MIUI的移殖第3页
安卓MIUI的移殖第4页
安卓MIUI的移殖第5页
安卓MIUI的移殖第6页
安卓MIUI的移殖第7页

试读结束, 可继续读4页

39积分/C币 立即下载 >