一、准备工作
1.1 软硬件环境
1.1.1 硬件要求
- 如果是 Android 2.3.x (Gingerbread) 及更高版本(包括 master 分支),需要使用 64 位环境。如果是较低的版本,则可以在 32 位系统中进行编译。
- 如果要检出代码,至少需要 100GB 可用磁盘空间;如果要进行编译,则还需要 150GB。如果要进行多次编译,则需要更多空间。
- 如果在虚拟机中运行 Linux,则至少需要 16GB 的 RAM/交换空间。
建议用性能较好的电脑,这样编译什么的能快一点,不能很卡。
1.1.2 软件要求
- 建议采用Ubuntu 16.04版本,目前这个版本比较稳定,很多库都支持。
- 安装openjdk-8
sudo apt-get update
sudo apt-get install openjdk-8-jdk
如果本地有多个jdk版本,需要选择正确的jdk。
sudo update-alternatives --config java
sudo update-alternatives --config javac- 安装python2.x
现在主要是python2.7,我本机是python2.7.12- 安装make软件
- 安装git
1.2 下载源码
- 方便使用google服务:
如果可以快速访问google网站,还是建议使用官方的下载方法,官方的下载链接如下:
android源码google官方下载链接- 不方便使用google服务:
这里推荐一个国内的Android源码镜像,清华大学android源码镜像,也是相当好用的,关键是稳定。
建议大家尽可能购买一个VPN服务,好用稳定,Google上面有非常丰富的学习资料。
1.3 编译源码
1.3.1 设置环境
使用 envsetup.sh 脚本初始化环境。请注意,将 source 替换成 .(一个点)可以省去一些字符,这种简写形式在文档中更为常用。
执行指令:source build/envsetup.sh
1.3.2 选择目标
使用 lunch 选择要编译的目标。确切的配置可作为参数进行传递。例如,以下命令表示针对模拟器进行完整编译,并且所有调试功能均处于启用状态。如果要调试源码的话,执行下面的指令:
lunch aosp_arm-eng
如果您没有提供任何参数就运行命令,lunch 将提示您从菜单中选择一个目标。
所有编译目标都采用 BUILD-BUILDTYPE 形式,其中 BUILD 是表示特定功能组合的代号。BUILDTYPE 是以下类型之一:
编译类型 | 使用情况 |
---|---|
user | 权限受限,适合一般的用户使用环境 |
userdebug | 与“user”类似,但具有 root 权限和可调试性;是进行调试时的首选编译类型 |
eng | 具有额外调试工具的开发配置 |
我们一般都会选择eng类型。因为权限最高,可以任意修改文件来调试。eng 版本会优先考虑平台负责工程师的工程生产力。eng 版本会关闭用于提供良好用户体验的各种优化。否则,eng 版本的运行方式将类似于 user 和 userdebug 版本,以便设备开发者看到代码在这些环境下的运行方式。
1.3.3 编译代码
您可以使用 make 编译任何代码。GNU make 可以借助 -jN 参数处理并行任务,通常使用的任务数 N 介于编译时所用计算机上硬件线程数的 1-2 倍之间。例如,在一台双核 E5520 计算机(2 个 CPU,每个 CPU 4 个内核,每个内核 2 个线程)上,要实现最快的编译速度,可以使用介于 make -j16 到 make -j32 之间的命令。
编译指令:make -j4
1.4 开始运行
您可以在模拟器上运行自己的版本,也可以将其刷到设备上。请注意,因为您之前已使用 lunch 选择编译目标,因此很可能无法在编译目标之外的目标上运行您的编译系统。
- 使用fastboot刷机
要对设备进行刷机,您需要使用 fastboot(编译成功后,它应该会包含在您的路径中)。- 模拟Android设备
编译流程会自动将模拟器添加到您的路径中。要运行模拟器,请输入以下命令:emulator
二、效率工具
2.1 导入源码
本文选择的源码IDE是Intellij工具,大家也可以选择其他的IDE,Android的源码非常庞大,直接导入很慢,所以千万不能直接导入。
2.1.1 导入步骤
1.在一个workspace中创建一个文件夹,例如aosp文件夹。
![](https://img.haomeiwen.com/i3768281/674d9155bbbb2046.png)
创建了aosp文件夹。
2.然后打开intellij ide工具,直接Open 这个aosp文件夹,之后会在aosp文件夹中生成一个.idea隐藏的文件夹。
![](https://img.haomeiwen.com/i3768281/bd9bac2f745d391d.png)
其中有3个文件,我们关注一下aosp.iml文件
3.打开这个文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
修改这个文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/aosp" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
4.再次使用intellij ide打开这个目录,如果想浏览哪个目录下的代码,可以
右击目录--->Mark Directory as--->Source Root
就可以正常浏览器和调用这个目录下的代码了。这样的好处不需要加载全部的代码,只需要架子啊自己选择的那一部分。
2.1.2 intellij 快捷键设置
2.1.3 intellij问题汇总
文件查找功能失效
默认情况下intellij idea的文件查找功能的快捷键是 Shift + Ctrl + N
Go to File快捷键截图.png
有时候这个功能会失效,Enter file 那么窗口输入文字显示红色,毫无反应。这有可能是之前强制关机导致部分IDEA file cache功能失效导致的。选择File -> Invalidate Caches / Restart可以清除缓存并重启,之后可以正常使用。
2.2 画图工具
- processon,一个非常好的在线作图工具,可以小组协作,用来画流程图和UML图非常好,下面做一个广告,分享一个注册链接:processon注册链接
- StarUML,这个作图工具是用来画时序图的,虽然也能画其他的图,但是我觉得不太方便,我一般使用它来画时序图。
网友评论