Build Android Source Code on Mac

本文记录下搭建Android源码编译环境的流程。

趁着国庆长假,抽出些时间来记录下最近倒腾的一些内容,第一个需要记录的自然是Android源码编译的流程。上班第一天就干了一件事,编译Android 6.0源码,第二天就是编译Flyme系统啦!但是编完系统之后刷到PRO6里面还有点小鸡冻呢!

Ubuntu系统下的Android源码编译环境搭建

如果是在Ubuntu系统下进行编译的话,中文文档请参考自己动手编译最新Android源码及SDK或者Gityuan写的编译最新的7.0源码的文章搭建Android 7.0的源码环境,英文文档主要看Google官方的文档,包括前提要求篇环境准备篇以及源码编译篇,如果磁盘空间充足并且网络环境通畅的话,编译通过是没啥问题的。

特别需要注意以下几点: 0.磁盘空间的大小 按照Google官方的说法是,checkout代码至少需要100GB空间,单个编译的话至少需要150GB空间,多类型的编译的话至少需要200GB空间(实际我下载完代码之后大约占用了50GB左右)。而且,如果你是在虚拟机的Linux中编译的话,还需要满足至少有16GB的RAM/swap。

1.Ubuntu系统的版本和JDK的版本 Ubuntu系统推荐使用14.04,而且安装好系统之后如果有提示软件更新,建议更新一下。此外,推荐在设置中设置软件更新的远程服务器,将其设置为China下的aliyun服务器,这样速度会快很多。

JDK版本需要根据你要编译的Android系统版本来确定,而且还需要注意是Oracle JDK还是Open JDK!可以在系统中多安装几个版本的JDK,以后使用update-alternatives --config命令来切换。

2.Android源码的分支 详细的分支列表可以在这里查看,当然,repo init的时候也可以不指定分支。

Mac系统下的Android源码编译环境搭建

关于是否在自己的MBP上搭建android编译环境的问题我纠结了很久,原因是自己的磁盘剩余空间真的不多了,后来在网上找到了Mac笔记本的扩容卡,对于我这款MBP来说最大可以扩容256GB!虽然有点贵,但是,为了Android,豁出去啦!

在Mac系统上进行Android源码编译的话可以参考Mac下设置Android源代码编译环境这篇文章,主要步骤分别是创建大小写敏感的磁盘、安装依赖包、下载Android源码然后编译就行了。

对于第一步,创建磁盘操作我是直接将买来的扩容卡格式化成OS X Extended(Case-sensitive Journaled)格式。

第二步是安装JDK、Xcode、MacPorts,这三个在我当前的系统中都已经有了,检查下版本是否可以就行,之后就是通过MacPorts安装几个依赖包,POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg

这一步我遇到了一个坑,简单描述下:我目前的系统一直以来都是通过系统的更新而升级过来的,所以大概有2年左右的时间没有重装了(嗯,我就是在夸Mac系统好☺️),系统环境也慢慢变得相当复杂了。之前用MacPorts,后来用Homebrew,但是大家都知道brew doctor的时候总是会提醒MacPorts如何如何的,建议你移动它的位置,后来我貌似是移动了还是怎么的,系统的MacPorts不能正常工作了,利用安装工具反复安装了很多次都卡在了最后的Running package scripts这个步骤,翻墙状态下安装也是如此,最后的解决方案是利用MacPorts的源码安装一次就好啦!还有就是,不管你的MacPorts是否正常,建议执行一次sudo ports -v selfupdate进行更新升级一次,如果失败可能是网络连接的问题,可以试试MacPorts的其他镜像。

第三步是下载Android源码,大家都知道在国内的话需要找镜像,我选择的是清华大学的TUNA镜像。建议下载它的初始化包,大约20多GB,待解压并且完成repo sync之后建议将这个初始化包保存到移动硬盘中存起来,然后删除本地的初始化包,这样可以省下大量的磁盘空间。

对于Mac系统最后还需要在~/.bash_profile中设置ulimit -S -n 1024以增加最大文件打开数量。

最后一步是执行编译,lunch时我选择aosp_arm64_eng为target,并启动6个线程进行编译make -j6

Anyway,最后我还是没能在Mac上编译成功,貌似机器的配置还是不够,算了,还是用来看代码吧。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏软件测试经验与教训

一个实用的测试技巧

36310
来自专栏智能大石头

[netcore]CentOS安装使用.netcore极简教程(免费提供学习服务器) 新生命团队netcore服务器免费开放计划

本文目标是指引从未使用过Linux的.Neter,如何在CentOS7上安装.Net Core环境,以及部署.Net Core应用。

1670
来自专栏JAVA高级架构

Redis面试题及分布式集群

2511
来自专栏架构师之旅

Git基础和规范-协同开发

关于版本控制 什么是版本控制: 官方说法:版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统,你可以对任何类型的文件进行版本控制。 ...

2845
来自专栏云计算教程系列

如何使用CentOS 7上的TICK堆栈监控系统指标

TICK堆栈是来自时间序列数据库InfluxDB的开发人员的产品集合。它由以下组件组成:

2585
来自专栏MoeLove

Linux上源码编译MongoDB

MongoDB的官网上是有已经编译好的二进制包的,这里选择clone MongoDB在github上的仓库

1003
来自专栏一个会写诗的程序员的博客

Couchbase 中的分布式储存Couchbase 中的分布式储存概述数据储存数据分布复制容错分布式协议跨机房部署Couchbase的分布式及理论总结参考

Couchbase 是一个具有高性能、可扩展性和可 用性强的数据库引擎。它可以让开发人员通过 NoSQL 的键值存储(二进制或者JSON)或者使用 N1QL 的...

2272
来自专栏蓝天

Linux后台开发常用工具

pwdx - report current working directory of a process,格式:pwdx pid 内存分析工具 v...

1382
来自专栏散尽浮华

linux下syslog-ng日志集中管理服务部署记录

2043
来自专栏熊二哥

Maven快速入门

Maven是Java中最为普及的包管理工具,在实际项目中由于依赖的各类jar包非常多,因此概念清晰的处理好各类Jar依赖显得非常重要,接下来通过基础知识,Jar...

5549

扫码关注云+社区