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

全面认识Android手机(MIUI ROM适配之旅第二天——准备工作)

 
阅读更多

1. 搭建移植环境

    “工欲善其事,必先利其器”。在制作自己的ROM之前我们必须做好准备工作,搭建好移植环境。

    我们这个系列的主旨是如何基于原厂ROM修改。我们所涉及的修改理论上说是不需要源码的,对源码开发感兴趣的可以参照http://source.android.com。对于ROM制作者来说,我们建议你下载一份google发布的android源代码,这不是必需的,但是对于理解排查ROM适配中的一些错误有很大帮助。

1.1 选择操作系统
    我们MIUI开发组做ROM开发使用的系统是Ubuntu 10以上版本。做ROM移植,Windows(Windows XP和Windows 7)和Mac都可以。但是由于开发组的日常使用是Ubuntu系统,我们将要共享的一些脚本程序都是运行在Ubuntu之上的,以后的介绍基本上是基于Ubuntu的,同时我会尽力提及在Windows下的操作。Mac我用得非常少,这方面很抱歉。但是用Mac来移植是完全可以的,大家可以根据本文介绍所需要的工具,参照网上的一些资料来搭建Mac移植环境。

1.2 安装Android SDK

    关于在Linux, Windows和Mac上详细的如何安装Android SDK的介绍请参照http://developer.android.com/sdk/installing.html。(有人嚷,看不懂鸟语怎么办,首先我真诚的觉得做ROM移植还是懂点基本的鸟语好,第二我必须得承认不懂鸟语也是可以做ROM移植的。这种情况请大家去google搜索一下,网上有很多如何安装Android SDK的中文介绍。)
    
    为了验证这一步是否成功,打开手机中的系统设置,选择应用程序—开发,确保选中“USB调试”,然后用USB线连接你的手机,在Ubuntu Shell或Windows控制台下运行命令adb devices,如果显示和下面的信息类似,恭喜你,adb可以识别你的手机了。
    List of devices attached 
    304D1955996BE28E    device
注意:
(1) 有可能会提示找不到adb,这个时候请确保将adb所在路径添加到系统的环境变量中。
(2) 在Windows下,必须安装手机相应的驱动才能成功识别手机。
(3) 在Ubuntu下,有可能会提示“no such permissions”,这个时候有两种办法,第一种是以root的身份运行。第二种办法:
    (3.1) 运行lsusb命令,对于我的三星手机,输出如下:
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 098: ID 04e8:685e Samsung Electronics Co., Ltd 
。。。
找到手机对应的那一行,记录下04e8:685e,这个分别表示该设备的vendorId和productId。如果不确定手机对应的是哪一行,可以在连上手机前后运行lsusb,找到区别的那一行。
    (3.2) 在/etc/udev/rules.d目录下新建一个文件99-android.rules。编辑如下:
SUBSYSTEMS=="usb", ATTRS{idVendor}="04e8", ATTRS{idProduct}="685e", MODE="0666", OWNER="你的登录身份"
    (3.3) 重启usb服务,sudo restart udev,重连手机。

    adb在我们的移植过程中扮演非常重要的角色,它和接下来要介绍的apktool是移植工作中的双子星座,都是行走江湖必备利器。在以后的章节中我们会多次和它相遇。

1.3 apktool和baksmali/smali
    首先建议大家新建一个目录tools,把将要下载的工具都放在这个目录中。

    apktool: 这个是我们修改ROM最重要的工具,没有之一。我们会在下一章整篇文章中详细的介绍它。地址:http://code.google.com/p/android-apktool/
    smali/baksmali: 它们是Android下dalvik虚拟机的汇编/反汇编器。apktool实际上是基于smali/baksmali的封装,在下一节中我们会介绍它们的使用场合。地址:http://code.google.com/p/smali/

2. 熟悉移植的机型

    “千里之行,始于足下”。做移植之前,首先得熟悉我们要移植的机型。

2.1 逛论坛刷机

    想打人先学会被打,想做刷机包先学会刷机。先去各大论坛逛逛,了解你的机型是如何刷机的。在这里,不得不提到一个必逛的论坛:http://forum.xda-developers.com/

    这个期间一定要掌握所在机型的刷机方法,需要用到什么工具,多刷几个ROM玩玩,尽量熟悉刷机过程。

2.2 寻找合适的原厂ROM,确保root

    什么是合适的原厂ROM呢,首先要版本合适,我们这个系列谈论的是基于原厂ROM移植MIUI,目前2.3的MIUI是基于android2.3.7源码开发的,从android2.3.3到android2.3.7这几个版本变化都不太大,因此2.3.3到2.3.7的原厂ROM版本都是合适的。4.0的MIUI在移植时我们也会给出MIUI基于哪一android4.0版本的源码开发的。
    
    其次检查所安装的ROM是否有root权限。root权限分两种:
一种是手机root:这种root权限外在表现是你的手机上安装了一个授权管理软件,当你使用RE管理器的时候会弹出一个对话框询问是否授予root权限。
一种是内核root: 这种是上一种root权限的超集。
判断上述哪种root权限的方法,在Ubuntu Shell或Windows控制台下运行如下命令:
adb root(该命令的含义是以root权限运行adb)
adb remount(该命令的含义是将system分区的权限设成可读写)
如果这两条命令都成功,是内核root。运行adb shell,可以看到手机shell提示符为#。
如果上述两条命令失败,运行adb shell可以看到手机shell提示符为$。如果此时运行su命令,手机弹出是否授予root权限,这说明手机上安装了授权管理程序。这种情况下运行su命令后,手机shell提示符也会变为#。
我们提供的一些工具是基于你的手机获取了内核root权限,如果是手机root,也是可以的,但是需要修改一下脚本。因为只是手机root,adb remount命令会失败。这个时候需要在手机shell里重新remount system分区,并且修改system的目录权限,这样才能修改system分区的内容,而且需要修改我们提供的某些脚本。(之后不针对只有手机root权限做出特殊说明,我们相信你知道如何在这种模式下修改system分区)。

    一般来说我们都能在网上找到仅做过root的原厂ROM。如果找不到,需要在论坛中找到资料详细的了解如何root,不同机型如何获取root权限不大一样,也不可能在这样的一篇文章中完全列出,大家自己在论坛上多多了解。

    最后检查所选择的ROM可以进入Recovery模式刷机,不一定要求必需是CWM Recovery, 有wipe data/cache和安装zip包等功能的简单Recovery就可以,当然有CWM Recovery更好。

2.3 adb logcat

    前面说过了adb是一个非常重要的命令,其中在机型适配过程中我们最常用的就是adb logcat。通过这个命令我们可以看到详细的log信息。
    每一行的大致格式为:
I/ActivityManager(  585): Starting activity: Intent { action=android.intent.action...}
其中第一个字母表示信息优先级别(E表示错误,W表示警告,I表示普通信息等)。
斜杠后的ActivityManager表示信息标记tag,通常标记表示了打印出相应信息的模块或程序。
可以通过adb logcat tag:* *:S只显示相应tag打印的所有信息。
括号中的数字表示进程ID(pid),表示程序所在的进程ID。
冒号后的句子就是具体的信息说明了,当我们遇到错误的时候adb logcat会给出详细的错误信息,我们通过这些错误信息去定位错误。后续的章节会陆续提到。
在机型适配中常用adb logcat *:E来查看所有的错误信息。

    详细的adb说明可以参考http://developer.android.com/guide/developing/tools/adb.html。在选定好ROM之后,我们要确保在开机之初,差不多是显示开机动画时adb logcat命令就能显示详细的log信息,如果adb logcat只是在桌面程序出现之后才打印信息或者根本不打印任何信息,移植工作很难进行下去。如果只是简单的修改一些图片资源的话可以,但是对于适配MIUI来说我们要求在适配机型一开始就确保adb logcat功能的正常运行。

3. deodex
    当把我们要移植的机型刷好做过内核root,可以进入recovery模式刷机的原厂ROM后,第一件事就是需要做deodex。什么是deodex,啊,这真的是一个long long story。
    
    话说Android发明之日起,准备让开发人员使用Java语言来在Android手机平台上进行应用程序开发(为什么用Java, Java程序员大喊道,谁用谁知道呀)。Java程序一般使用java编译器(javac命令)从源文件(.java结尾的文件)编译成类文件(.class结尾的文件,又被称作字节码),一般很多类文件被打包成一个JAR包(JAR包实际是一个zip压缩包),然后用java虚拟机解释执行这些类文件。采用类文件格式以及使用标准的Java虚拟机需要向Java的所有者(当时是SUN公司,后来被Oracle公司收购,默哀一下)缴纳授权费用并遵守相应的版权协议。Google不想缴纳这笔费用并受协议的约束,于是这丫想出来一个“偷天换日,偷梁换柱”的方法,用的是Java的壳,但是那颗心已不是Java的心。简单来说,就是当编译Android上的Java程序时,第一步还是编译成类文件打包成JAR包,然后会将这个JAR包转换为一个叫classes.dex的文件,这个dex文件是什么玩意呢,这是google发明出来的一个用于它自己的虚拟机上的一个字节码文件格式。Android上得这个虚拟机就叫做dalvik虚拟机(dalvik是冰岛的一个小镇的名字,当时google的工程师在给这个虚拟机苦思冥想一个名字,后来一个主要的工程师Dan Bronstein我的祖先当初生活在冰岛的这个小镇,就以它命名吧。据说Dan本人从没去过冰岛,Android发布后,冰岛很是骄傲,当地的报纸专门登载了这件事并热切欢迎Dan回乡探亲)。那么odex是啥呢,它叫optimized dex,即优化过的dex文件。
    
    讲了这么多,你只需要理解odex是一种优化过的dex文件就行了,至于怎么优化的不在我们讲述的范围内。odex文件是互相依赖的,简单的理解就是我们改了其中一个文件,其它的odex文件就不起作用了。为此,我们必须做一个deodex操作,就是将odex文件变为dex文件。
    
    一般来说原厂ROM发布时都是以odex文件格式发布的,如何判断呢。运行如下命令:
    adb shell ls /system/framework
    如果看到很多以odex结尾的文件,那么该ROM就是做个odex的,大家可以用我们提供在附件中的脚本deodex.sh来自动的做deodex操作。

    该脚本首先确保你安装了smali/baksmali工具,然后从你的手机中pull出system分区下framework和app目录的内容,先把这些目录的内容备份在odex.bak.tar中。然后分别对这两个目录做deodex操作,最后把deodex后的文件push到手机上。具体的大家参照脚本。
    
    Windows用户可以下载http://www.xeudoxus.com/android/xUltimate-v2.3.3.zip这个工具来做deodex,具体的用户请参照该工具的帮助文档。

4. 小结,案例分析
    在本章中我们说到了首先熟悉自己的机型,然后寻找一个内核root,合适版本,能recovery模式刷机的原厂ROM。以i9100为例,首先我们在miui论坛新手上路区找到i9100的odin包刷机方法,然后在网上下载到http://115.com/file/cl7t65xn# I9100_ZCKJ1_wipe.zip这个原厂ROOT ZIP包,通过Recovery模式刷这个ZIP包。验证adb root可用,运行deodex工具做deodex操作,这样我们就有了一个做过deodex的原厂ROM了。
    

    明天我们就重点介绍apktool和smali文件,这是移植工作的关键。

    deodex.sh

分享到:
评论

相关推荐

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

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

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

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

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

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

    小米ROM提取工具

    小米ROM,全称为“MIUI ROM”,是小米公司基于Android系统深度定制的操作界面,以其丰富的功能和独特的设计风格深受用户喜爱。提取小米ROM的过程中,用户需要获取到官方发布的固件升级包,这些通常是以.zip或.simg...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    MIUI_ROM定制教程

    这一过程涉及众多的技术知识点,包括但不限于操作系统的选择、环境搭建、对Android手机系统结构的认识、寻找合适的原厂ROM、ROM的反编译、MIUI Framework和APP的移植,以及最终制作ZIP刷机包。 首先,MIUI ROM定制...

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

    【Android 源码分析:MIUI小米录音机】 在Android操作系统中,MIUI小米录音机是一款非常常见的应用,它提供了录音、编辑和分享录音文件的功能。深入理解MIUI小米录音机的源码有助于开发者更好地掌握Android音频处理...

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

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

    安卓Android源码——小米系列之小米指南针.zip

    本资源"安卓Android源码——小米系列之小米指南针.zip"聚焦于小米公司的一款内置应用——指南针的源代码分析。通过研究这份源码,开发者可以了解到如何在Android平台上实现一个功能完备、性能优异的指南针应用。 ...

Global site tag (gtag.js) - Google Analytics