• macOS High Sierra 版本 10.13.4
  • Xcode 9.3
  • aosp分支:android-8.1.0_r20

准备编译环境

具体参考官方文档

  1. 安装 jdk8u45 or newer
  2. 安装xcode命令行
xcode-select --install
  1. 安装编译需要用到的其他包

使用Homebrew安装(官方文档使用的是MacPorts)

brew install gmake libsdl git gnupg

_NOTE_: gmake 可以不用安装,使用xcode自带的就可以

  1. 设置可以同时打开的文件数限制,避免编译时超出限制

在 ~/.bash_profile 添加如下语句

# set the number of open files to be 1024
ulimit -S -n 1024
  1. 创建区分大小写的APFS宗卷

官方文档创建的是区分大小写HFS+磁盘镜像,我们这边使用区分大小写的APFS卷宗

1. 打开磁盘工具按下图步骤操作:

2. 设置宗卷大小

具体大小根据自己情况设定,配额大小最好不要小于200G

下载源码

具体参考官方文档-下载源码。
本文使用清华大学aosp镜像下载源码,具体步骤参考清华大学aosp镜像提供的教程。

  1. 下载repo
mkdir ~/bin
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod +x ~/bin/repo

在~/.bash_profile中将刚才创建的~/bin目录添加进PATH

export PATH=~/bin:$PATH
  1. 建立工作目录
mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
  1. 初始化仓库

指定master分支

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

若要指定android版本,如下:

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.1.0_r20
  1. 同步源码树

repo sync 或者 repo sync -j4 # 指定并发数
NOTE: repo sync有时会失败,可能要运行多次,才能同步完源码,可以使用以下循环脚本:

#!/usr/bin/env bash
repo sync -j4
while [ $? -ne 0 ]
dorepo sync -j4
done

编译源码

具体参考官方文档-编译源码

source build/envsetup.sh
lunch aosp_x86_64-eng # 或者直接运行lunch, 在出现的选项中选择编译目标
make -j8 # 根据cpu核心数(物理线程)选择并发数,公式:并发数=cpu核心数(物理线程) x 2

编译过程比较漫长,在我的机子上大概用了2个多小时

编译遇到的问题

  1. mac sdk10.13 不支持编译,如下:

internal error: Could not find a supported mac sdk: ["10.10" "10.11" "10.12"]

[44/44] bootstrap out/soong/.minibootstrap/build.ninja.in
[4/4] out/soong/.bootstrap/bin/minibp out/soong/.bootstrap/build.ninja
[860/861] glob external/clang/utils/TableGen/Android.bp
[54/54] out/soong/.bootstrap/bin/soong_build out/soong/build.ninja
FAILED: out/soong/build.ninja
out/soong/.bootstrap/bin/soong_build -t -b out/soong -d out/soong/build.ninja.d -o out/soong/build.ninja Android.bp
internal error: Could not find a supported mac sdk: ["10.10" "10.11" "10.12"]
ninja: build stopped: subcommand failed.
20:24:32 soong failed with: exit status 1

解决方法
修改AOSP/build/soong/cc/config/x86_darwin_host.go文件,添加10.13支持,如下

darwinSupportedSdkVersions = []string{"10.10","10.11","10.12","10.13", // 添加mac sdk 10.13
}
  1. 遇到bison错误

FAILED: out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.c out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.h
BISON_PKGDATADIR=external/bison/data prebuilts/misc/darwin-x86/bison/bison -d --defines=out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.h -o out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.c external/selinux/checkpolicy/policy_parse.y

解决方法
bison打补丁,重新编译(Patch bison fix for High Sierra and build bison:):

cd AOSP/external/bison
git cherry-pick c0c852bd6fe462b148475476d9124fd740eba160
mm
cp AOSP/out/host/darwin-x86/bin/bison AOSP/prebuilts/misc/darwin-x86/bison/

将源码导入IntelliJ IDEA

导入IDEA前 - 配置

  1. 运行如下命令,生成IDE工程信息文件 android.iprandroid.iml
source build/envsetup.sh # 在新终端下需要执行这一步
mmma development/tools/idegen
development/tools/idegen/idegen.sh
  1. 由于aosp工程很大,在导入IDEA前需要先修改配置:

    1. 修改VM内存大小
      打开IDEA 菜单栏 Help > Edit Custom VM Options,添加
-Xms1g
-Xmx5g
  1. 修改文件大小限制,打开区分大小写选项

    打开IDEA 菜单栏 Help -> Edit custom properties, 添加
idea.max.intellisense.filesize=100000
idea.case.sensitive.fs=true

NOTE: 重启IDEA使配置生效

  1. 用IDEA找到AOSP目录下的android.ipr文件,打开AOSP工程,耐心等待,索引需要一定时间

导入IDEA后 - 配置

  1. 创建SDK 1.8 (No Libraries),确保代码跳转到是aosp源码,而不是系统安装的JDK,如下

NOTE 注意要删掉Classpath里面所有的jar

  1. 删除Modules中的dependencies,只保留<Module source>1.8 (No Libraries)

  1. 将生成的资源文件ID目录out/target/common/R添加进源码目录,避免R资源索引找不到,如图:

最后 Synchronize 整个工程同步下(打开IDEA菜单 File -> Synchronize),稍稍等待后就可以愉快的阅读Android源码了。

Mac下编译Android源码,并导入IntelliJ IDEA进行源码阅读相关推荐

  1. mac下编译android源码避坑指南(新)

    截至目前mac环境下android源码编译最新避坑指南 避坑方法 配置(不说配置的都是耍流氓) 下载 编译 烧录 注意事项 避坑方法 源码.SDK.机型版本一定要清楚,有些特殊的版本需要特殊的方法,官 ...

  2. mac下编译android下libaac,Mac系统下编译FFmpeg(支持libx264)for iOS

    前言 iOS平台的FFmpeg(支持libx264)已经编译完成.经过之前Android平台上的编译过程,iOS平台的编译总体来说少走了很多弯路,但还是遇到了一些问题,现在做一下总结. 一.编译x26 ...

  3. mac下编译android下libaac,Mac 下编译SOX for android (.a静态库)

    1.下载 sox源码: git clone https://git.code.sf.net/p/sox/code sox-code 3.配置NDK环境变量(如果有不熟悉mac下配置环境变量的请参考Ma ...

  4. mac下编译安卓源码

    资源 Mac OS10.12 编译Android源码8.1 aosp编译-需翻墙 Mac下编译安卓源码 手把手教你在Mac OS下载.编译及导入Android源码 步骤 准备 磁盘空间大于180G 安 ...

  5. 【转】ubuntu 11.10(32位系统)下编译android源码

    原文网址:http://www.cnblogs.com/dwayne/archive/2011/11/16/2251734.html 本文介绍在ubuntu 11.10系统下编译android 2.3 ...

  6. 在Mac下编译ijkplayer os文件

    在Mac下编译ijkplayer os文件 第一步: 1.安装homebrew ruby -e "$(curl -fsSL https://raw.githubusercontent.com ...

  7. iOS架构-C/C++lame库在Mac下编译通用静态库.a库(13)

    C/C++ 有很多成熟的库,还有很多特殊功能的库,有时候iOS 平台开发一些比较前沿或者冷门的功能时,iOS并没有提供解决方案,这时候就可以研究C/C++的一些库,为我们使用.但是在Xcode编译C/ ...

  8. 安卓9.0刷linux,Ubuntu系统下编译Android 9.0系统

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 前言 在Ubuntu系统下编译Android系统.哎呀不知道是不是换了新电脑的缘故,这次编译居然从安装JDK和配置环境下 ...

  9. mac下编译hadoop-3.0.3

    文章目录 1.编译前准备 2. 源码目录下执行 3.编译 5.错误集锦 5.1 Apache Hadoop Pipes编译失败 5.1.2 解决: 5.2 hadoop-client-check-te ...

最新文章

  1. 怎样把字符1变成数字1
  2. 面试系列-SpringMVC那些事(一)
  3. JSON.parse 解析json字符串时,遇换行符报错
  4. html超市代码,前端 CSS : 5# 纯 CSS 实现24小时超市
  5. mysql 查询优化 ~ 多表查询基础知识
  6. JUnit5 断言示例
  7. oauth2四种授权方式小结
  8. NLP自然语言处理库系列教程——gensim库
  9. 技术团队管理实践及心得
  10. 学计算机每天应该吃什么,长期坐在电脑前的上班族吃什么食物好
  11. html按钮位置设置吗,html改变button按钮位置
  12. uniapp:广告API使用总结
  13. GBase 8a Mpp Cluster集群产品性能优化篇之行列混存优化
  14. 现有一循环队列,其队头指针为front,队尾指针为rear;循环队列长度为N。其队内有效长度为?
  15. ORACLE XE在centos平台下安装方法
  16. P3802 小魔女帕琪 期望
  17. 7-3 IP地址转换
  18. 湖大OJ-实验A---- ADFA的可判定性
  19. 郭炜实用Python程序设计慕课:chapter13面向对象程序设计
  20. web.。。。。。。。

热门文章

  1. pycharm中python解释器的配置
  2. Java项目-Javaweb实现个人博客
  3. 临近期末,图书管理系统课设项目安排上(附源码)
  4. Numpy 从数值范围创建数组
  5. Postgresql的使用
  6. 网络攻击与防御技术第三次实验
  7. JDK动态代理小例子
  8. hadoop 1.0.1集群安装及配置
  9. 在网页中加入百度搜索条
  10. 解决VC++ Error spawning cl.exe 问题·