MacOS 10.15 下 Android(安卓)Q 源码 下载 编译 详解
最近换了台新的 MacBook Pro 之前没有在MacOS 下下载过编译过Android 源码,这次准备试一试,同时记录下遇到的问题。
考虑到很多人是为了深入学习Android 的源码才来看这个文章都是新手上车,所以我准备从准备工作图文 一步步详细解释。
准备工作
1. 硬盘空间,至少150G 建议搞个200G 或者更大 毕竟空间多了没事。少了就难受了。(下载完大概60G源码不包含.repo/文件夹 我编译了一个 x86版本后是 130G 左右,这里我还是删除了 .repo 文件的情况下,你可能还喜欢多编译几个版本也不一定)本地磁盘不够 只能外接移动一盘了。
2.好用的梯子。(好用的梯子记得分享,我用的Veee 平时看个网站还行,下载文件500M宽带下载起来 100kb)
创建磁盘映像
1 找到电脑里的磁盘工具打开
2. 打开之后 桌面顶部工具栏 文件 ->新建窗口-> 空白映像
这里要注意划红线的部分 特别是 格式不能错哦。创建好之后我们下载安装Repo
下载安装Repo
https://source.android.com/setup/build/downloading
这个网页有详细步骤,我当下搬运工
1.打开终端,输入以下的命令,创建bin文件夹,并加入到临时环境变量中:
mkdir ~/bin //创建bin文件夹 PATH=~/bin:$PATH //将该文件夹路径加到临时环境变量中
2.下载 Repo 启动器,并确保它可执行
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo
3.(可选)验证启动器与我们的签名是否匹配:
gpg --recv-key 8BB9AD793E8E6153AF0F9A4416530D5E920F5C65 curl https://storage.googleapis.com/git-repo-downloads/repo.asc | gpg --verify - ~/bin/repo
初始化 Repo 客户端
1.创建一个空目录来存放您的工作文件。如果您使用的是 MacOS,必须在区分大小写的文件系统中创建该目录。这一步先cd 到你创建的映像文件下
cd /Volumes/ASOP //cd 到创建的ASOP mkdir WORKING_DIRECTORY //创建一个文件夹 cd WORKING_DIRECTORY //进入到这个文件夹下
2.使用您的真实姓名和电子邮件地址配置 Git。要使用 Gerrit 代码审核工具,您需要一个与已注册的 Google 帐号相关联的电子邮件地址。确保这是您可以用来接收邮件的有效地址。您在此处提供的姓名将显示在您提交的代码的提供方信息中。(这里我用的Google的gmail 邮箱。其他邮箱我没有尝试)
git config --global user.name "Your Name" git config --global user.email "you@example.com"
3.运行 repo init
以获取最新版本的 Repo 及其最新的问题修复。您必须为清单指定一个网址,该清单用于指定 Android 源代码中包含的各个代码库将位于工作目录中的什么位置。
repo init -u https://android.googlesource.com/platform/manifest
这里 manifest 是默认拉的主分支也就是Google一直在更新的分支。还有很多其他分支 查看分支
查看可切换的分支 cd .repo/manifests git branch -a | cut -d / -f 3
这里有很多Release稳定版本。我使用的是 android-10.0.0_r33 这个版本
切换到10.0分支repo init -b android-10.0.0_r33
这里是成功拉取分支的显示
接下去就是下载 使用repo sync来同步源码,
repo sync
这里耗时很长要 网速非常慢,时间我是不会告诉你们的。反正很久很久。
在这个过程中会报错好几次 各种出错,不要慌 出错了就 repo sync 重新来,反正会检查已经下载好的内容不会重复下载。
经过漫长的等待(记得去睡觉电脑开着就行,不要天真的等在电脑前以为可以看着他下载完)
看到finished successfully 。很开心 终于下载完了。接下去就是要编译源码了
报错
这里repo 会有一些问题
1. repo init 时
解决 :网络代理设置一下,找到网络偏好设置里的代理 看一下网络代理服务器IP 端口
然后
git config --global http.proxy "127.0.0.1:15236"//每个人端口应该不一样
2.第二个是这个问题 找到这个文件加一行代码 就能解决。
.
源码编译
cd /Volumes/ASOP/WORKING_DIRECTORYsource ./build/envsetup.shlunch
这三行代码上去我们看到所有可以编译的版本
这里我选择了23. aosp_x86-eng 首先我们肯定是需要 -eng 版本的 因为我们要debug 的 另外 电脑CPU 是 x86 架构的,X86模拟器打开速度很快,选择 arm 的兄弟,边吃饭边等吧。
Buildtype | 用途 |
---|---|
user | 有限的权限;适合一般用户 |
userdebug | 类似user模式,但有root权限和debug能力,适合debug |
eng | 带有额外的debug工具的开发配置。 |
所以我们选择
lunch 23
这里可能之前 先 lunch 了默认 是第一个 会问你 Which would you like? [aosp_arm-eng] 回车之后再lunch 23
然后 执行
make -j10
使用make -jx 来编译源码(x一般取你的cpu核心数*2+2) 我这里是6核的CPU 我还是选择了 10 反正CPU性能是死的估计选再大也没用。
报错
1.这里如果和我一样新的电脑装的都是 10.15 的系统,会报错。
Could not find a supported mac sdk: ["10.10" "10.11" "10.12" "10.13" "10.14"]
vim build/soong/cc/config/x86_darwin_host.go
然后找到
darwinSupportedSdkVersions = []string{ "10.10", "10.11", "10.12", "10.13", "10.14", }
光标移到10.14 末尾 按 i (insert)加入 "10.15", 然后esc 光标 移到 文件末尾 按大写的 ZZ 就可以保存退出
2. 第二个报错是编译过程中
找到我们源码 system/sepolicy/tests/文件夹下的 Android.bp 文件
删除红色的一行 保存退出 然后重新编译
最后编译成功显示
build completed successfully
表示编译成功,我们可以启动模拟器了
source build/envsetup.sh lunchemulator
总结
基本上Mac 下 Android 源码的下载和编译 就是这样的一个过程 如果编译完一个版本后想重新编译一个,可以使用
make clobber
命令。可以清除之前编译生成的文件。我们编译产生的文件都在 out文件夹下。
更多相关文章
- Android中使用javah生成jni头文件的正确方法
- android 7.0 兼容多语言切换总结
- 基于Bmob的Android即时通讯应用源码解析
- Android(安卓)Q(10.0)版本新特性以及兼容性适配
- Android使用Ant多渠道打包
- android安全学习之2—android中.pem和.pk8是什么文件?
- Journey of Android(安卓)for Mac
- android实现连连看,附源码
- Android笔记(一):Android工程目录介绍