安卓MIUI的移殖


-
安卓系统的秘密及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移植。

1KB
MIUI移植教程
2014-11-08miui与LEWA移植教程: 开机报错Android.process.acore已停止 解决办法把CM包底包中的libsqlite.so换成LeWa包中的libsqlite.so 录像后白屏 解决办法:将CM包底包的libandroid_runtime.so替换成LeWa的libandroid_runtime.so 以上教程可以用与MIUI移植,经测试成功
525KB
miui移植官方教程
2013-03-08很全的教程 基于原生Android系统深度开发,超过200项改进 针对中国用户习惯设计,创造最好的电话、短信体验 原创主题系统,独享全球最大的手机美化主题库
525KB
安卓系统移植
2013-12-24MIUI ROM定制教程 安卓系统移植
2.43MB
MIUI指南针android源码
2014-02-05MIUI指南针android源码
1.9MB
android 小米UI 自定义音量
2013-11-30此自定义音量可以移植到android 原生系统中修改原生系统中的音量组件
37KB
patchrom Android6.0移植材料
2018-06-09此为适用于Android6.0的pachrom文件,该文件旨在帮助开发者更方便地移植MIUI到所需手机上,以减少移植开发量,提高效率。
942KB
android_安卓_ROM修改定制教程(初级.pdf
2013-04-10android_安卓_ROM修改定制教程(初级.pdf
1.80MB
android仿百度搜索条,仿MIUI v5自带浏览器搜索条风格
2013-12-16最近有个项目,发现MIUI v5自带浏览器的百度搜索条效果不错,想模仿写一个,但总是不像,网上找了好多资料都不太对,花了一下午的时间好好研究了一番。 demo代码量非常精简,模块化设计,移植方便,适合新手学习。 demo简介,这个demo的入口是MainActivity,search bar是用widget组件的形式动态加载的,联网用android-support-v4.jar包,解析百度返回的json用了android-async-http-1.4.3.jar包,这个不固定死,大家见仁见智。别忘了AndroidManifest.xml加入联网权限<uses-permission android:name="android.permission.INTERNET" />。搜索之后使用intent跳转,当然也可以用android自带的webview组件实现。 不足的地方是没有动态的显示/隐藏效果,看起来比较生硬,跟原版效果的有一定的差距。 希望对大家有所帮助,UI设计方面大家一起进步!
15.2MB
小米遥控器apk 其他android机器可用
2013-09-26小米遥控器apk 其他android机器可用
676KB
MIUI特效提取自MIUI卡刷包
2013-10-26完整移植MIUI特效,三星4.1以上可用,其他机型未测试
12.50MB
电脑版小米商城
2013-03-06电脑版小米商城是使用谷歌安卓技术将安卓软件移植到电脑上,使得小米抢购更加方便快捷,验证码输入更加简单,抢购效率陡增!!
12.51MB
小米Pad2错误代码解决
2019-01-05小米平板开机BootLoader Error Code 03错误 将开发者模式打开 进入开发者模式设置OEM解锁 然后关机 音量上+音量下+电源进入dnx模式 然后在下载的文件里面可以执行《键解决BOOTLOADER ERROR CODE 03开机提示.bat》
40KB
Android_Porting_Guideline_A1200.pdf
2009-09-01A1000 Android 移植,分别从工具链准备,硬件需求及移植过程进行介绍,
4.30MB
手机ROM移植手册
2018-06-28小米手机,华为手机等手机的ROM烧写手册,适用download源码去编译烧写
3.64MB
小米订单查询工具v0.1免费版.zip
2019-09-03软件介绍: 1、本程序采用Java语言编写,需运行在安装有Java环境的机器。(就像.net的程序要安装.net framework 一个道理,安装一次以后此类程序都可以直接打开)。★由于没有将jre一起打包进程序,所以请未安装JDK的用户需要下载jdk-7u55-windows-i586.exe。2、下载完安装JDK后,32位系统的用户请运行对应的“[32位].exe", 64位系统的用户请运行对应的的“[64位].exe"3、之所以采用Java语言编写,除了作者编程习惯之外,还考虑到兼容性和移植性的问题,Java编写的程序可以很方便的移植到Windows、Linux、Mac等PC上,也可以稍加修改移植到移动终端Android上。后期有时间做个手机App大家玩玩。4、该软件为方便大家,免费使用。当然,毕竟不是什么宝贝,能满足基本使用就行。5、出于作者技术水平和时间有限,可能会存在很多问题和很多需要优化的地方。后期有时间再好好完善,开发更多功能更多模块。
4.0MB
android adb 4.2
2013-09-05从android4.2中移植过来,在2005下编译成功,测试2.2版本及以上,4.2版本及以上手机验证和连接成功,加入了对小米手机支持,大家可以添加对国产手机的支持(增加VID)。
7.79MB
机器人+C+语言+机+电+一体化+接口
2010-04-02机器人+C+语言+机+电+一体化+接口,很好的参考资料!!
263KB
adb 中 sqlite3 程序和依赖库支持(Android 4.0 以上和以下版本)
2016-01-25小米手机4 移植 sqlite3 , 解决 sqlite3
2.44MB
android 日历无限滑动demo
2015-08-25一个类似小米日历的demo 完全可以移植到项目中。
-
下载
立讯精密:2020年年度报告.PDF
立讯精密:2020年年度报告.PDF
-
下载
20210418-华创证券-利率周报:债市“钱多”来自哪里?.pdf
20210418-华创证券-利率周报:债市“钱多”来自哪里?.pdf
-
下载
Win32DiskImager-1.0.0-多国语含中文版.rar
Win32DiskImager-1.0.0-多国语含中文版.rar
-
下载
抖音x-Gorgon,抖音设备注册(did,iid等),快手sig,快手did注册 算法版
抖音x-Gorgon,抖音设备注册(did,iid等),快手sig,快手did注册 算法版
-
下载
火星人:2020年年度报告.PDF
火星人:2020年年度报告.PDF
-
下载
MySQL数据库常用方法汇总.xlsx
MySQL数据库常用方法汇总.xlsx
-
下载
双成药业:2020年年度报告.PDF
双成药业:2020年年度报告.PDF
-
下载
20210415-银河证券-医药健康行业:关注中药转型机遇,拥抱创新和消费主线.pdf
20210415-银河证券-医药健康行业:关注中药转型机遇,拥抱创新和消费主线.pdf
-
下载
android休眠wifi不关闭.txt
android休眠wifi不关闭.txt
-
下载
20210420-申万宏源-保险行业中小险企新重疾定义产品观察与分析:重疾产品“价格战”回眸与展望.pdf
20210420-申万宏源-保险行业中小险企新重疾定义产品观察与分析:重疾产品“价格战”回眸与展望.pdf
