android源码rom
‘壹’ 如何把Android源码编译成手机的Rom(我有4.3sdk和unyaffs)
SDK是开发包,不是完整源代码吧。你可能需要在Linux上repo完整4.3源代码(25G左右,精简后8个多G)。如果手机内核不是3.0以上可能还要重新编译更新内核(Android4.3貌似一定要3.0以上内核版本)。其实我也不知道如何制作Rom,但略懂下载编译Android源代码和内核源代码,也想知道如何从源代码制作rom,希望能与楼主交流!
‘贰’ 大牛们是怎么阅读 Android 系统源码的
由于工作需要大量修改framework代码, 在AOSP(Android Open Source Project)源码上花费了不少功夫, Application端和Services端都看和改了不少.
如果只是想看看一些常用类的实现, 在Android包管理器里把源码下载下来, 随便一个IDE配好Source Code的path看就行.
但如果想深入的了解Android系统, 那么可以看下我的一些简单的总结.
知识
java
Java是AOSP的主要语言之一. 没得说, 必需熟练掌握.
熟练的Android App开发
Linux
Android基于Linux的, 并且AOSP的推荐编译环境是Ubuntu 12.04. 所以熟练的使用并了解Linux这个系统是必不可少的. 如果你想了解偏底层的代码, 那么必需了解基本的Linux环境下的程序开发. 如果再深入到驱动层, 那么Kernel相关的知识也要具备.
Make
AOSP使用Make系统进行编译. 了解基本的Makefile编写会让你更清晰了解AOSP这个庞大的项目是如何构建起来的.
Git
AOSP使用git+repo进行源码管理. 这应该是程序员必备技能吧.
C++
Android系统的一些性能敏感模块及第三方库是用C++实现的, 比如: Input系统, Chromium项目(WebView的底层实现).
硬件
流畅的国际网络
AOSP代码下载需要你拥有一个流畅的国际网络. 如果在下载代码这一步就失去耐心的话, 那你肯定没有耐心去看那乱糟糟的AOSP代码. 另外, 好程序员应该都会需要一个流畅的Google.
一台运行Ubuntu 12.04的PC.
如果只是阅读源码而不做太多修改的话, 其实不需要太高的配置.
一台Nexus设备
AOSP项目默认只支持Nexus系列设备. 没有也没关系, 你依然可以读代码. 但如果你想在大牛之路走的更远, 还是改改代码, 然后刷机调试看看吧.
高品质USB线
要刷机时线坏了, 没有更窝心的事儿了.
软件
Ubuntu 12.04
官方推荐, 没得选.
Oracle Java 1.6
注意不要用OpenJDK. 这是个坑, 官方文档虽然有写, 但还是单独提一下.
安装:
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java6-installer
sudo apt-get install oracle-java6-set-default
Eclipse
估计会有不少人吐槽, 为什么要用这个老古董. 其实原因很简单, 合适. 刚开始搞AOSP时, 为了找到效率最优的工具, 我尝试过Eclipse, IntelliJ IDEA, Vim+Ctags, Sublime Text+Ctags. 最终结果还是Eclipse. 主要优点有:
有语法分析 (快速准确的类, 方法跳转).
支持C++ (IntelliJ的C++支持做的太慢了).
嵌入了DDMS, View Hierarchy等调试工具.
为了提高效率, 花5分钟背下常用快捷键非常非常值得.
调整好你的classpath, 不要导入无用的代码. 因为AOSP项目代码实在是太多了. 当你还不需要看C++代码时, 不要为项目添加C++支持, 建索引过程会让你崩溃.
Intellij IDEA
开发App必备. 当你要调试系统的某个功能是, 常常需要迅速写出一个调试用App, 这个时候老旧的Eclipse就不好用了. Itellij IDEA的xml自动补全非常给力.
巨人的肩膀
这个一定要先读. 项目介绍, 代码下载, 环境搭建, 刷机方法, Eclipse配置都在这里. 这是一切的基础.
这个其实是给App开发者看的. 但是里面也有不少关于系统机制的介绍, 值得细读.
此老罗非彼老罗. 罗升阳老师的博客非常有营养, 基本可以作为指引你开始阅读AOSP源码的教程. 你可以按照博客的时间顺序一篇篇挑需要的看.但这个系列的博客有些问题:
早期的博客是基于旧版本的Android;
大量的代码流程追踪. 读文章时你一定要清楚你在看的东西在整个系统处于什么样的位置.
邓凡平老师也是为Android大牛, 博客同样很有营养. 但是不像罗升阳老师的那么系统. 更多的是一些技术点的深入探讨.
Android官方Issue列表. 我在开发过程中发现过一些奇怪的bug, 最后发现这里基本都有记录. 当然你可以提一些新的, 有没有人改就是另外一回事了.
一定要能流畅的使用这个工具. 大量的相关知识是没有人系统的总结的, 你需要自己搞定.
其它
代码组织
AOSP的编译单元不是和git项目一一对应的, 而是和Android.mk文件一一对应的. 善用mmm命令进行模块编译将节省你大量的时间.
Binder
这是Android最基础的进程间通讯. 在Application和System services之间大量使用. 你不仅要知道AIDL如何使用, 也要知道如何手写Binder接口. 这对你理解Android的Application和System services如何交互有非常重要的作用. Binder如何实现的倒不必着急看.
HAL
除非你对硬件特别感兴趣或者想去方案公司上班, 否则别花太多时间在这一层.
CyanogenMod
这是一个基于AOSP的第三方Rom. 从这个项目的wiki里你能学到很多AOSP官方没有告诉你的东西. 比如如何支持Nexus以外的设备.
DIA
这是一个Linux下画UML的工具, 能够帮你梳理看过的代码.
XDA
这里有最新资讯和最有趣的论坛.
想到了再补充.
‘叁’ 如何移植android2.1源代码到自己的手机上
一,准备好android2.1源码编译环境以及手机USB调试环境。
二,将手机上硬件驱动程序以及相关的配置文件通过ADB命令保存好。
三,针对不同的手机机型,制作相应的vendor配置文件。
四,编译源码。
五,通过手机提供的bootloader刷机或者直接以recovery的方式更新ROM。
在以上五个步骤中,其中最难处理的便是第2个步骤,这个步骤需要熟悉每个手机机型的硬件参数,并且能够在手机上找到相关的驱动程序以及了解他们如何配置。而CyanogenMod团队公布的源码当中,己经将相关的工作做好了,编译源码之前仅仅需要执行相应的shell命令,便可顺利的下载相应的手机驱动程序以及配置文件。
下面是移植步骤,供参考:
一,首先需要下载CyanogenMod 5.0.8的源码:
$ mkdir android-cm5
$ cd android-cm5
$ repo init -u git://github.com/CyanogenMod/android.git -b eclair
$ repo sync
二,下载CyanogenMod需要的一些共同文件,如果想最终版本中不需要这些APK,也可以通过配置/vendor/cyanogen/cyanogen.mk文件将这些需要的APK COPY命令注释掉。
$ cd vendor/cyanogen/
$ ./get-rommanager #下载一个RomManager.apk包,主要是刷ROM用的。我没用过。
$ ./get-google-files #其它的一些google开发的android apk包,我也没有用过!
三,下载针对htc legend(g6)的vendor.
$ cd ../../vendor/htc
$ git clone git://github.com/aleho/android_vendor_htc_legend.git #下载针对htc legend(g6)手机的vendor,里面包括相关的配置参数,以及从手机上下载驱动程序的SHELL命令。
$ mv android_vendor_htc_legend/ legend
$ cd legend
$ ./extract-files.sh #确保这个命令执行将你的手机连接好电脑并且开了手机USB调试,adb命令可以连接手机。这个过程主要是下载htc legend(g6)驱动程序以及配置文件。
四,针对CyanogenMod 5.0.8源码打上htc legend(g6)的补丁包,这个补丁包主要是wifi和触摸屏的,如果不做,触摸屏将无法触摸以及wifi功能无法启动。
‘肆’ android源码编译后如何制作成rom
SDK是开发包,不是完整源代码吧。你可能需要在Linux上repo完整4.3源代码(25G左右,精简后8个多G)。如果手机内核不是3.0以上可能还要重新编译更新内核(Android4.3貌似一定要3.0以上内核版本)。其实我也不知道如何制作Rom,但略懂下载编译Android源代码和内核源代码,也想知道如何从源代码制作rom,希望能与楼主交流!
‘伍’ Android ROM包定制(解包,增删模块,打包)
以前刚用手机的时候,经常可以在玩机论坛上看到很多发ROM包的帖子,譬如什么大深度定制ROM,什么大深度深度精简纯净版ROM...相信很多喜欢搞机的都有见过这类帖子。后来自己不满每次刷机后都要手动设置一大堆东西,遂按照论坛上的教程改了Defy+的cm11的ROM,集成了绿色守护,默认允许安装未知来源的应用,默认电池百分号显示等等。时隔4年,又玩起了ROM包定制,感慨颇多
假设有一个名为update.zip的ROM包,我们要在Ubuntu下对它进行定制。首先把 system.transfer.list 和 system.new.dat.br (有些旧版的系统的镜像可能是system.new.dat)从update.zip解压出来,转成system.img(原始镜像格式),修改完后又按步骤打包回原来的格式。本文只写了system分区的定制方法,但是对于其他分区也是类似的,都要转成原始镜像格式后才能对它修改。如果使用 file system.img 命令来查看system.img文件信息,会得到类似下面的信息:
brotli -d system.new.dat.br
挂载后可以通过 df -h 来查看挂载点 /mnt/system 剩余空间有多少,如果没有剩余,就要对它进行扩容,下面的例子是给它增加128M的空间,扩容之前要先取消挂载
现在,可以在/mnt/system目录下根据自己的需求增删文件了
增删文件需要注意:
打包其实就是解包的逆过程
成功后会在当前目录下生成system_new.img。如果发生错误,根据错误进行调整参数,直到没有错误提示为止。
转换之前可以对之前解压出来的文件进行备份:
开始转换
成功后会在当前目录下生成system.transfer.list和system.new.dat
在有些刷机包里,它里面包含的system.img镜像是 sparse image 格式的,如果用file命令查看它的信息,显示如下:
对于这种格式的镜像,如果想把它挂载和修改,就要转成我们上面提到的raw image(原始镜像)格式,命令如下:
修改完成后,取消挂载,再使用下面的命令将 raw image 转成 sparse image :
相对于修改Android源码的方式,直接修改镜像的方法对PC配置要求低很多。如果我们只想增加一些现有的模块和删除不必要的模块,这是很好的方式。而且对于一些手机厂商,他们没有提供Android源码,我们就只能用直接修改镜像的方式来定制我们的ROM。修改ROM的方法是灵活的,总结下来就是,看见一个镜像,可以根据后缀名和file命令确认它的格式,看情况将它转成原始镜像格式并挂载,就可以修改了,修改后又转回它原来的格式,最后替换刷机包中原有的镜像