最近买了个Nexus 5 手机准备学习android4.4.4源码。Nexus 5 刷入从第三方下载的ROM后,总是推送各种第三方APP,于是自己打算下载编译一次官方的源码。小白的学习记录过程分享,大神勿喷,请忽略。 Google官方的教程:https://source.android.com/source/initializing
关于Android各个版本的编译环境的搭建,大家可以参考我去年翻译的Android 官方文档http://blog.csdn.net/u012417380/article/details/51472860。我目前打算用VM虚拟机编译Android 4.4.4 版本,它官方要求的具体环境是:
硬件环境:
注:上述环境是官方以最新版本为要求的环境。我打算用VM 虚拟机运行Lunix编译,目前的方案是 动态分配硬盘大小为150G,内存分配 4GB,交换空间分配8GB。
软件环境
1.操作系统
Linux:
Android 2.3.x (Gingerbread) - Android 5.x (Lollipop): Ubuntu 12.04 (Precise)
2. Java Development Kit (JDK)
Android 2.3.x (Gingerbread) - Android 4.4.x (KitKat): Ubuntu - Java JDK 6, Mac OS - Java JDK 6
3. Key packages
Python 2.6 – 2.7 下载官网 python.org
GNU Make 3.81 – 3.82 下载官网:gnu.org ; Android 4.0.x (Ice Cream Sandwich) 以及之前的版本需要 使用 maker 3.81 来避免编译错误。
Git 1.7 + 下载官网 git-scm.com
虚拟机:动态分配硬盘大小为150G,内存分配 4GB,交换空间分配8GB。
操作系统:ubuntu-12.04.5-desktop-amd64.iso
安装成功后安装VM Tools,这里不介绍
jdk版本:jdk-6u45-linux-x64.bin
详细安装及环境变量配置参考我这篇博文: Ubuntu 下JDK的安装与环境配置
用Ubuntu12.04来编译安卓更旧的版本时,安装下面的安装包:
如果在乌班图系统下编译后,并用USB数据线进行对NEXUS 5 刷机,那么默认情况下普通用户无法直接使用 USB 设备。需要以root用户身份在‘/etc/udev/rules.d/51-android.rules’下创建一个文件。
为此,请运行以下命令来下载本网站附带的 51-android.txt 文件,对其进行修改以包含您的用户名,然后将其放到正确位置
下面的的命令会自动下载51-android.txt
文件,对文件中<username>
字段替换成你的用户名,并将文件放在/etc/udev/rules.d/51-android.rules
文件文件中
如果显示拒绝连接无法下载的话,将51-android.txt文件放在本地目录任意一目录,在该目录中执行下面的命令。
执行完后,为了验证NEXUS 5 与乌班图是否连接,将nexus 5的USB计算机连接方式设置为相机,可以看到乌班图能够识别设备了。
默认情况下,每次编译的输出都会存储在相应源代码树的 out/ 子目录下。如果将源文件和输出存储在单独的存储卷中,编译速度会更快。
要进行这项设置,请导出 OUT_DIR_COMMON_BASE 变量,使其指向将存储输出目录的位置。
对于每个单独的源代码树,其输出目录都将以其存放目录命名。
例如,如果您有源代码树 /source/master1 和 /source/master2,并且 OUT_DIR_COMMON_BASE 设为了 /output,那么输出目录将为 /output/master1 和 /output/master2。这个过程后续会验证
安卓系统源码放在git仓库中
repo 是安卓环境下的命令行工具,对Git部分命令进行封装,将 百多个git库进行更新。
按照如下步骤进行安装Repo.
当你安装完Repo后,设置安卓源码仓库的客户端:
由于我下载的版本是 Android4.4.4_r1所以将WORKING_DIRECTORY替换成Android444_r1:
即:
由于google站无法访问,所以我选择了清华的下载源,用下面的命令下载
repo init 后,会提示你输入名字和邮箱, 两个我都是直接按的回车键,这时它默认将系统用户名和主机名 作为用户名和邮箱,接着我直接按了y,提示repo初始完。
接着就是漫长的等待,如果中间出现中断,只要重复该命令即可。
下载成功后提示:
这时可看到Android444r1文件夹下checkout出的代码:
checkout出的代码有9.4G
进入隐藏的 .repo目录,查看当前分支大小,有64G呢
如果想check out 其它分支代码,将工作目录下check out出的代码删除,保留隐藏的.repo 目录,重新初始化分支执行上述流程就行,这时会快很多。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)