编译Android源码(9.0)

参考了官方文档和前辈们的编译经验,但还是遇到了不少坑,在这里记录一下过程。
官方文档地址:https://source.android.google.cn/source/downloading
下面写一下具体步骤:

1. 新建大小写敏感的磁盘映像

编译需要大小写敏感的环境,mac如果没有自行更改过磁盘格式默认是大小写不敏感的,所以要在mac上划分出一个大小写敏感的磁盘映像。前辈们建议150G,然而我编译后就剩几百M了,打开模拟器运行需要1.5G提示剩余空间不够T_T,所以建议更大一点160G应该可以了,如果是更高版本的源码建议更大。使用mac应用程序列表中的磁盘工具–>文件(左上角)–>新建映像–>空白映像,这里我创建了叫AOSP的盘
在这里插入图片描述

2.系统环境准备

JDK8:这个就不多说了,配好环境变量
Git:按照google的要求需要吧git邮箱设置google邮箱
GnuPG:加密工具,否则连初始化仓库都过不去,参考repo init报错1
XCode:默认自带的XcodeSDK版本过高,一定要下载一个旧版本的,否则编译时报错,参考最后编译报错1
xz解压工具:一定要有否则编译报错,参考最后编译报错2
VPN:最好有一个,主要下载repo用,源码文件比较大总共大概33G还是用镜像地址比较好

3.安装repo

1>确保主目录下有一个 bin/ 目录,并且该目录包含在路径中:
$ mkdir ~/bin
$ PATH=~/bin:$PATH
2>下载 Repo 工具,修改执行权限:
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

4. 创建源码目录

进入到刚才创建的磁盘映像,创建WORKING_DIRECTORY源码目录,依次执行命令

$ cd /Volumes/AOSP
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY

5. 初始化repo

这里就需要考虑网络的问题的,国内Google服务器,VPN网速一般又比较慢,很容易出现问题,所以建议直接用清华的镜像地址,否则此处可能会报错,参考repo报错1(注释掉的是google原地址)
如果要下载全部源代码:

// $ repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest
$ repo init -u https://android.googlesource.com/platform/manifest

只下载某一分支代码:

// $ repo init -u https://android.googlesource.com/platform/manifest
$ repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-9.0.0_r33

建议只下载分支,仅9.0分支就有30多G
如果没有安装GnuPG,这里会报错warning: gpg (GnuPG) is not available,参考repo报错2

6.下载源码

$ repo sync

漫长的等待下载开始了,预计10M/s的网速预计需要一个半小时下载,好在repo同步时会检查是否已下载过,等于多了断点下载机制,不用担心下载中端,每次重新sync就行。这里如果出现错误,参考repo报错3

7.初始化编译环境

仍旧在下载源码目录下执行命令初始化编译环境

$ source build/envsetup.sh

选择要编译的cpu架构

$ lunch

然后会出现一个列表让选择,不知道怎么选直接按enter键,会自动选择一个默认的

8.编译源码

$ make -j30

数字30代表使用的线程数量,前辈们经验CPU并发线程数的1~2倍,我8核的30线程比第一次编译时18线程快了很多,又是漫长的等待预计1~2小时吧
在这里插入图片描述
看到这个画面就大功告成了

9.模拟器运行

$ emulator

试试能跑起来就ok。我没跑起来因为划分的150G提示空间不足,我只是需要源码,就没花时间再重试。

10.源码导入Android Studio

执行命令生成IntelJ工程文件

$ mmm development/tools/idegen/
$ . development/tools/idegen/idegen.sh

点击最后生成的android.ipr即可打开源码,如果这个文件没有倍AS识别,那就先打开AS通过open project的形式打开。

生成的源码目录非常大有140多G,最好把out(60多G)、cts、test等没什么用的文件夹删了,如果不需要再次编译把.repo(30多G)文件夹也删了要不然AS第一次打开会非常非常慢…

报错解决

repo报错

1. fatal: Cannot get https://gerrit.googlesource.com/git-repo

原因:墙的原因,使用镜像地址。
解决方法:找到刚才安装repo创建的bin目录,打开repo文件,修改REPO_URL链接

import os
REPO_URL = os.environ.get('REPO_URL', None)
if not REPO_URL:
  # REPO_URL = 'https://gerrit.googlesource.com/git-repo'
  REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'
REPO_REV = 'stable'
2. warning: gpg (GnuPG) is not available. warning: Installing it is strongly encouraged.

原因:未安装GnuPG
解决方法:
下载安装地址 https://www.gnupg.org/download/
注意:需要导入Google的公钥,要不然会报no public key

$ gpg --import 

然后粘贴公钥

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.2.2 (GNU/Linux)

mQGiBEnnWD4RBACt9/h4v9xnnGDou13y3dvOx6/t43LPPIxeJ8eX9WB+8LLuROSV
lFhpHawsVAcFlmi7f7jdSRF+OvtZL9ShPKdLfwBJMNkU66/TZmPewS4m782ndtw7
8tR1cXb197Ob8kOfQB3A9yk2XZ4ei4ZC3i6wVdqHLRxABdncwu5hOF9KXwCgkxMD
u4PVgChaAJzTYJ1EG+UYBIUEAJmfearb0qRAN7dEoff0FeXsEaUA6U90sEoVks0Z
wNj96SA8BL+a1OoEUUfpMhiHyLuQSftxisJxTh+2QclzDviDyaTrkANjdYY7p2cq
/HMdOY7LJlHaqtXmZxXjjtw5Uc2QG8UY8aziU3IE9nTjSwCXeJnuyvoizl9/I1S5
jU5SA/9WwIps4SC84ielIXiGWEqq6i6/sk4I9q1YemZF2XVVKnmI1F4iCMtNKsR4
MGSa1gA8s4iQbsKNWPgp7M3a51JCVCu6l/8zTpA+uUGapw4tWCp4o0dpIvDPBEa9
b/aF/ygcR8mh5hgUfpF9IpXdknOsbKCvM9lSSfRciETykZc4wrRCVGhlIEFuZHJv
aWQgT3BlbiBTb3VyY2UgUHJvamVjdCA8aW5pdGlhbC1jb250cmlidXRpb25AYW5k
cm9pZC5jb20+iGAEExECACAFAknnWD4CGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIX
gAAKCRDorT+BmrEOeNr+AJ42Xy6tEW7r3KzrJxnRX8mij9z8tgCdFfQYiHpYngkI
2t09Ed+9Bm4gmEO5Ag0ESedYRBAIAKVW1JcMBWvV/0Bo9WiByJ9WJ5swMN36/vAl
QN4mWRhfzDOk/Rosdb0csAO/l8Kz0gKQPOfObtyYjvI8JMC3rmi+LIvSUT9806Up
hisyEmmHv6U8gUb/xHLIanXGxwhYzjgeuAXVCsv+EvoPIHbY4L/KvP5x+oCJIDbk
C2b1TvVk9PryzmE4BPIQL/NtgR1oLWm/uWR9zRUFtBnE411aMAN3qnAHBBMZzKMX
LWBGWE0znfRrnczI5p49i2YZJAjyX1P2WzmScK49CV82dzLo71MnrF6fj+Udtb5+
OgTg7Cow+8PRaTkJEW5Y2JIZpnRUq0CYxAmHYX79EMKHDSThf/8AAwUIAJPWsB/M
pK+KMs/s3r6nJrnYLTfdZhtmQXimpoDMJg1zxmL8UfNUKiQZ6esoAWtDgpqt7Y7s
KZ8laHRARonte394hidZzM5nb6hQvpPjt2OlPRsyqVxw4c/KsjADtAuKW9/d8phb
N8bTyOJo856qg4oOEzKG9eeF7oaZTYBy33BTL0408sEBxiMior6b8LrZrAhkqDjA
vUXRwm/fFKgpsOysxC6xi553CxBUCH2omNV6Ka1LNMwzSp9ILz8jEGqmUtkBszwo
G1S8fXgE0Lq3cdDM/GJ4QXP/p6LiwNF99faDMTV3+2SAOGvytOX6KjKVzKOSsfJQ
hN0DlsIw8hqJc0WISQQYEQIACQUCSedYRAIbDAAKCRDorT+BmrEOeCUOAJ9qmR0l
EXzeoxcdoafxqf6gZlJZlACgkWF7wi2YLW3Oa+jv2QSTlrx4KLM=
=Wi5D
-----END PGP PUBLIC KEY BLOCK-----

Control + D结束输入。导入完毕
如果是安装完毕第一次使用gpg命令会提示需要link到gunpg,按提示输入命令就行了

3. android error: RPC failed; curl 18 transfer closed with outstanding read data remaining fatal: the remote end hung up unexpectedly fatal: early EOF fatal: index-pack failed

原因:不要怀疑!不要相信网上说的是git缓存区太小问题等等!就是你的网不行,找个网速好的地儿重新repo sync代码!

编译报错:

1. Could not find a supported mac sdk: [“10.10” “10.11” “10.12”]

原因:mac支持编译的找不到sdk(xcode的sdk)
解决方法:下载提示版本的sdk解压到系统的sdk目录
别人收集的各版本sdk:https://github.com/phracker/MacOSX-SDKs/releases
Command+Shift+G进入到目录:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/
把解压的sdk放到与系统自带的sdk平级

2. /bin/bash: xz: command not found

原因:未安装xz解压工具
解决方法:下载xz安装:http://tukaani.org/xz/
下载安装包后依次执行命令解压安装:
$ tar -zxf xz-5.2.3.tar.gz
$ cd xz-5.2.3
$ ./configure
$ make
$ make install
执行$ xz -V 验证安装是否成功(能看到版本号就ok)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章