创建区分大小写的磁盘映像

Mac系统默认磁盘,文件系统运行不区分大小写。Git 并不支持此类文件系统,而且此类文件系统会导致某些 Git 命令(例如 git status)的行为出现异常。因此,建议始终在区分大小写的文件系统中对 AOSP 源文件进行操作。

有两种方式可以创建磁盘映像,具体操作如下:

由于AOSP比较大,但是我们存放在移动硬盘上,更大的空间能够更好地满足未来的需求,所以预留200G+的空间。
可以通过 shell 使用以下命令创建磁盘映像:

hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 220g /Volumes/zza/aosp/android.dmg

在双击这个镜像,将其挂载。这样在Mac Finder中就可以看到我们刚刚的创建的镜像了。

Android源码下载更新

Android 源代码树位于由 Google 托管的 Git 代码库中。Git 代码库中包含 Android 源代码的元数据,其中包括与对源代码进行的更改以及更改日期相关的元数据。下面介绍了如何下载特定 Android 代码流水线的源代码树。

安装 Repo

Repo 是一款工具,可让您在 Android 环境中更轻松地使用 Git。要安装 Repo,请执行以下操作:

mkdir ~/bin # 创建文件夹
PATH=~/bin:$PATH #设置环境变量
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo #下载repro 到/bin/repo文件里
chmod a+x ~/bin/repo # 给repo 文件权限

更新 Repo

repo的运行过程中会尝试访问官方的git源更新自己,如果想使用tuna的镜像源进行更新,可以将如下内容复制到你的~/.bashrc

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

source ~/.bashrc

替换国内清华的镜像

用第三方工具打开repo文件,替换国内清华的镜像

https://android.googlesource.com/ 全部使用 https://aosp.tuna.tsinghua.edu.cn/ 代替即可。

由于使用 HTTPS 协议更安全,并且更便于灵活处理,所以强烈推荐使用 HTTPS 协议同步 AOSP 镜像。

由于 AOSP 镜像造成CPU/内存负载过重,限制了并发数量,因此建议:

  1. sync的时候并发数不宜太高,否则会出现 503 错误,即-j后面的数字不能太大,建议选择4。
  2. 请尽量选择流量较小时错峰同步。

使用每月更新的初始化包(使用该方法)

由于首次同步需要下载约 30GB 数据,过程中任何网络故障都可能造成同步失败,强烈建议使用初始化包进行初始化。

下载 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar (可以使用三方工具下载,支持断点续传),下载完成后记得根据 checksum.txt 的内容校验一下。

由于所有代码都是从隐藏的 .repo 目录中 checkout 出来的,所以我们只保留了 .repo 目录,下载后解压 再 repo sync 一遍即可得到完整的目录。

使用方法如下:

wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
tar xf aosp-latest.tar
cd AOSP   # 解压得到的 AOSP 工程目录
# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录 ,可以使用ls -al
repo sync # 正常同步一遍即可得到完整目录
# 或 repo sync -l 仅checkout代码

此后,每次只需运行 repo sync 即可保持同步。

可以选择该命令同时发起四个并发请求,之所以选择4是因为清华的镜像的并发请求的限制的上限就是4个。

repo sync -j4

注意:出现奇奇怪怪得bug,可以重复执行一下,很多bug是由网络原因造成的。

一定要确保文件都下载成功,否则编译时会出现一些问题。

也可以写个脚本,自动执行

#!/bin/bash
repo sync -j4
while [ $? = 1 ]; do echo "================sync failed, re-sync again =====" sleep 3 repo syncdone

传统初始化方法(不推荐)

建立工作目录:

mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY

初始化仓库:

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest

如果提示无法连接到 gerrit.googlesource.com,请参照“更新 Repo”。

同步源码树(以后只需执行这条命令来同步):

repo sync

切换版本

如果需要某个特定的 Android 版本:

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-10.0.0_r30

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.0.1_r1

默认是master,是android11版,我选择了Android10。我使用Android11

Android 编译

设置文件描述符限制

在macOS中,默认限制的同时打开的文件数量很少,不能满足编译过程中的高并发需要,因此需要在shell中运行命令:

$ ulimit -S -n 2048

环境设置

在源码根目录下调用下面的命令:

$ source build/envsetup.sh

选择设备

在命令行输入下面的命令选择打算编译的源码类型

$ lunchYou're building on DarwinLunch menu... pick a combo:1. aosp_arm-eng2. aosp_arm64-eng3. aosp_mips-eng4. aosp_mips64-eng5. aosp_x86-eng6. aosp_x86_64-eng7. full_fugu-userdebug8. aosp_fugu-userdebug9. mini_emulator_arm64-userdebug10. m_e_arm-userdebug11. m_e_mips-userdebug12. m_e_mips64-eng13. mini_emulator_x86-userdebug14. mini_emulator_x86_64-userdebug15. aosp_dragon-userdebug16. aosp_dragon-eng17. aosp_marlin-userdebug18. aosp_sailfish-userdebug19. aosp_flounder-userdebug20. aosp_angler-userdebug21. aosp_bullhead-userdebug22. hikey-userdebug23. aosp_shamu-userdebugWhich would you like? [aosp_arm-eng]

根据后缀可以判断出使用的场景如下:

类型 用途
user 权限少,用于刷机使用
userdebug 和“user”类似,但可以root,并且可以调试
eng 具有开发配置,并且有额外的调试工具

根据需要选择对应的类型,比如我选择arm “1”。(推荐采用x86的,模拟器速度快一些)

============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=10
TARGET_PRODUCT=aosp_arm
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=generic
HOST_ARCH=x86_64
HOST_OS=darwin
HOST_OS_EXTRA=Darwin-17.7.0-x86_64-10.13.6
HOST_BUILD_TYPE=release
BUILD_ID=QQ2A.200305.002
OUT_DIR=out
============================================

开始编译

为了加快编译的速度,最好并发来编译

$ make -j4

我的机器比较老,2线程,所以采用了-j4。

编译结束以后,会显示下面的日志:

#### build completed successfully (11:16:35 (hh:mm:ss)) ####

启动模拟器

emulator

Android Studio查看源码

编译源码idegen模块

mmm development/tools/idegen/

这行命令的意思是编译idegen这个模块项目,然后生成idegen.jar文件。

编译结束以后,会显示下面的日志:

#### build completed successfully (27:28 (mm:ss)) ####

mmm指令就是用来编译指定目录。通常来说,每个目录只包含一个模块。

  - croot: Changes directory to the top of the tree.- m: Makes from the top of the tree.- mm: Builds all of the modules in the current directory.- mmm: Builds all of the modules in the supplied directories.- cgrep: Greps on all local C/C++ files.- jgrep: Greps on all local Java files.- resgrep: Greps on all local res/*.xml files.- godir: Go to the directory containing a file.

生成AS配置文件

接着执行如下脚本:

development/tools/idegen/idegen.sh

这行命令的意思是在根目录生成对应的android.ipr、android.iml IEDA工程配置文件。

等待片刻得到类似如下信息说明OK:

Read excludes: 217ms
Traversed tree: 3605277ms

推荐采用x86的,模拟器速度快一些。我这个机器启动arm架构的模拟器花费很长时间。

导入源码

启动Android Studio,然后选择打开一个已存在的Android Studio工程,选择源码根目录的android.ipr,经过的加载过程以后,Android 源码就已经成功的加载到了Android Studio中。

OK,至此我们就完成了在macOS上下载AOSP并编译导入Android Studio的完整过程。

参考:

1.https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

2.https://mirrors.tuna.tsinghua.edu.cn/help/git-repo/

3.https://blog.csdn.net/YuDBL/article/details/86129195

4.https://blog.csdn.net/YuDBL/article/details/86496890

欢迎关注我的公众号,持续分析优质技术文章

Android10源码下载与编译(Mac移动硬盘)相关推荐

  1. Android12 源码下载、编译、刷机、单编调试Framework

    文章目录 说明 1. 代码下载 1.1 下载Repo工具 1.2 安装和配置Git 1.3 创建工程目录 1.4 初始化Repo仓库 1.5 同步代码 2. 驱动下载 2.1 下载对应机型的驱动 2. ...

  2. 《深入理解Android内核设计思想(第2版)(上下册)》之Android源码下载及编译

    本文摘自人民邮电出版社异步社区<深入理解Android内核设计思想(第2版)(上下册)> 购书地址:http://item.jd.com/12212640.html 试读地址:http:/ ...

  3. 《深入理解Android内核设计思想(第2版)(上下册)》之Android源码下载及编译...

    本文摘自人民邮电出版社异步社区<深入理解Android内核设计思想(第2版)(上下册)> 购书地址:item.jd.com/12212640.ht- 试读地址:www.epubit.com ...

  4. WebRTC 开发(二)源码下载与编译

    转载:http://depthlove.github.io/2019/05/02/webrtc-development-2-source-code-download-and-build/ 在使用任何工 ...

  5. VLC for Android源码下载和编译

    Project Hosting on 点击打开链接 最受欢迎的开源项目 点击打开链接 由Android的核心开发团队提供了15个优秀的示例项 目,包含了游戏.图像处理.时间显示.开始菜单快捷方式等. ...

  6. ros源码下载及编译

    Ros1 源码下载及编译 准备工作 Setup your sources.list Setup your computer to accept software from packages.ros.o ...

  7. WebRTC源码下载与编译

    WebRTC源码编译 1 几种源码下载方案对比 1.1 拉别人下好的代码 1.2云服务器 1.3 国内镜像 1.4 挂代理(推荐) 2 源码编译环境准备 2.1 环境要求 2.2 代理服务器配置 2. ...

  8. SELinux零知识学习四、Audit应用层源码下载、编译和安装

    接前一篇文章:SELinux零知识学习三.SELinux应用层源码下载.编译和安装 在前篇文章中编译SELinux源码时,出现了如下错误: seusers_local.c:11:10: 致命错误:li ...

  9. Android 4.0.1 源码下载,编译和运行

    [牛人分享]Android 4.0.1 源码下载,编译和运行 转自 http://blog.csdn.net/rambo2188/article/details/6943382 ----------- ...

最新文章

  1. 分布式架构:并发重复请求和幂等场景技术实现总结
  2. 使用PyTorch从零开始实现YOLO-V3目标检测算法 (一)
  3. 4.28—013—周日
  4. 计算机二级的编程题,计算机二级编程题(范文).doc
  5. python写一个路径选择app_django下创建多个app并设置urls方法
  6. 【转】C#事件和委托的理解
  7. python实现图灵机器人帮你回复微信好友消息
  8. phpMyAdmin无法导入大的数据库文件的解决方法
  9. php 无刷新上传,php 无刷新上传文件的代码
  10. 王者经典猎马技术之昨日重现
  11. angular 9.2升级10.2.2
  12. 自动驾驶 5-1 比例积分微分 (PID) 控制Lesson 1: Proportional-Integral-Derivative (PID) Control
  13. 抓包工具之MitmProxy
  14. 慎用某60软件清理垃圾,导致三星SSD T5不识别了,折腾了一下午,终于弄好了
  15. python playsound播放时关闭_使用playsound modu停止音频
  16. 编程入门之C语言入门
  17. 携程2019校招 LRU Cache
  18. 【力扣动态规划基础专题】:509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 62. 不同路径 63. 不同路径 II 343. 整数拆分 96. 不同的二叉搜索树
  19. Flutter 页面更新流程剖析
  20. 信贷系统搭建——实现登录界面与验证

热门文章

  1. python中的取整
  2. EChart配置--基准线(坐标轴指示器axisPointer)的配置
  3. 安利一个程序员学习法
  4. 大二的第一次社会毒打
  5. 数学建模中数据处理类型题目的主要处理流程与方法
  6. Windows Mobile 开发常见问题集(转自zsu_darkwind的专栏)
  7. 安卓java代码ping网关_Android代码中使用Ping命令
  8. 咸鱼Micropython—SPI
  9. 四十二、Docker-虚拟化入门
  10. DWCS6搭建jsp开发环境及使用ajax实现用户注册(基于文件)