苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

其实早在 2016 年的时候,我就使用 ubuntu 编译过 Android 的源码,可是那个时候并没有深耕,所以一直也没有再进行过相关文章的发布。

时隔至今,当我想再深入 framework 的时候,我已经没有设备来安装 Linux 系统了,因为现在一直都是用 Mac os 电脑来开发。

不过翻阅了 Android Developer 官网,发现现在 Mac os 也能够编译 Android 源码了,这是惊喜万分啊!

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

那么如果你也有学习 framework 的想法,或者想单纯的编译一下源码,那么就继续读下去吧~~~

其实按照官网给的流程走一遍就能够成功了,不过由于我在走流程的过程中不是那么顺利,所以写下这篇文章,算为各位读者老爷趟一下。


从准备工作到编译一共分为 9 步:

第一步、创建区分大小写的磁盘映像

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

上图是官网的提示操作,当然不建议自己去磁盘工具那去搞,只需要直接在 terminal 中用下方的命令创建即可

hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS ' -size 200g ~/android.dmg

这样,我们就创建了大小为 200 G 的磁盘映像文件。该文件在装载后可用作具有 Android 开发所需格式的存储卷。为什么这么大呢?因为后期的源码和编译需要用到这么大的空间,所以最好是准备这么大了。

如果你的电脑存储不够大,那么也可以使用下方的命令对大小进行调整。

hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage

比如

hdiutil resize -size 60g ~/android.dmg.sparseimage

这样就把刚才的映像文件调整为 60G 大小。

建立好之后,我们先不要急着挂载操作,我们先看后面的步骤。


第二步、安装 JDK

我们都安装过 JDK ,所以本步骤略。


第三步、安装 xcode

去官网安装对应的 xcode 版本即可,我电脑系统是 10.14

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

安装的 xcode 11.3.1

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

同时也安装了 11.3 版本的 xcode 命令行工具。

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)


第四步、安装MacPorts

通过 macports.org 安装 MacPorts。

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

需要注意的是,我的电脑在进入安装过程的时候很慢,不知道是不是都这样,如果你的安装也很慢,那么就多等会儿吧,我大概等了5分钟

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

安装完后,修改 ~/.bash_profile 配置文件

export PATH=/opt/local/bin:$PATH

添加到配置文件 ~/.bash_profile中。

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)


第五步、通过 MacPorts 获取 Make、git 和 GPG 程序包

使用下面命令即可

POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg

同样,安装过程依旧很慢,主要和获取程序包的速度有关系,这一步我等了几十分钟…

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

不过耐心点,最后都是能装好的。


第六步、设置文件描述符数量上限

在 Mac os 中,可同时打开的文件描述符的默认数量上限太低,在高度并行的编译流程中,可能会超出此上限。

要提高此上限,请将下列行添加到 ~/.bash_profile 中:

ulimit -S -n 1024

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

这样我们就把「可同时打开的文件描述符的默认数量上限」调整为了 1024 个。


第七步、准备源代码

① 安装 Repo

首先确保主目录下有一个 bin/ 目录,并且该目录包含在路径中

mkdir ~/binPATH=~/bin:$PATH

然后下载 Repo 工具,并确保它可执行:

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a x ~/bin/repo

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

② 初始化 Repo 客户端

创建一个空目录来存放工作文件。WORKING_DIRECTORY 名字自己定义

mkdir WORKING_DIRECTORYcd WORKING_DIRECTORY

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

然后,配置 git 信息

git config --global user.name "Your Name"git config --global user.email "you@example.com"

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

最后,初始化 Repo

repo init -u https://android.googlesource.com/platform/manifest

如果报 repo: command not found 的问题,那么只需执行下方命令即可

echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc export PATH=$PATH:$HOME/bin

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

很可惜,这一步不能顺利进行下去了…

这个时候我们只能通过「镜像」来解决了,这里我们用「清华镜像」,整个镜像大小为 80 G 左右,所以一定要将电脑的剩余空间多腾一些… 或者是外接移动硬盘。

继续下载,于是开始了漫长的等待…

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

功夫不负有心人,终于下载完了。

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

不过下一步,该看下你的电脑硬盘的剩余空间了,因为这个压缩版就有80 G,那么解压之后就会超过100G,所以如果你的电脑剩余空间没有100 G 以上,那么建议把这个源码包放到移动硬盘里面,然后再从移动硬盘解压吧。

解压

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

解压完成后,我们会得到一个.repo 的文件夹

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

然后,我们将源码进行同步

repo sync

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

同步时间很长,我这个电脑同步了差不多25分钟,这样我们的Android 源码就准备好了,同步完成后的 aosp 结构如下

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)


第八步、准备编译

① 下载预览二进制文件

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

下载下来后,解压得到

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

② 然后运行这个 sh 文件

sh  文件名.sh

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

需要看下协议

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

安装完成

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

③ 安装完成后,会在执行 su 命令的目录下创建一个 vendor 的文件夹

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

将此文件夹复制到源代码的根目录下,即 aosp 目录下。

④ 然后执行

make -f Makefile clobber

以避免之前进行的 build 干扰到接下来的 build。

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)


第九步、开始编译

① 先初始化环境

source build/envsetup.sh

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

② 然后使用 lunch 展示要编译的目标

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

这里我选择了 24,所以后期可以直接执行 lunch 24 即可,注意这里的选择跟你手上有什么型号的设备有关系,由于我手头上没有 Google 亲儿子的机器,所以这里就随便编译一个了。

现在我们直接进入下一步:编译阶段


使用 make 编译代码,如果想增加编译速度,可以借助 -jN 参数处理并行任务,比如我的电脑是双核4线程的,最快编译速度可以达到 8个线程同时编译,所以可以使用

make -j8

进行编译。第一次编译的时间很长很长,建议早上把电脑打开,然后让他开始编译去吧,我是快要吃晚饭的时候发现编译好了…

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

看到绿色的字出现,我就松了一口气,这几天的折腾没有白费啊!

#### build completed successfully (01:04:37 (hh:mm:ss)) ####

这样我们的源码就算编译好了,在

苹果电脑能编译 Android 源码吗?(苹果电脑编程android系统)

aosp->out->target->product 下就有我们要用的源码了。


运行模拟器

如果在 Linux 系统下,直接运行 emulator 命令就能将我们编译好的 aosp 跑到虚拟机里面去。

而 Mac os 则比较费劲了,反正我尝试了各种办法,最终还是没有将编译好的代码跑到虚拟机上。

这两天考虑搞个 nexus 手机或者 pixel 手机,来刷下 aosp 源码。

现在先将输入的流程标记一下,等手机送到时再开搞,到时候说不定我会再发一个后续的文章。

将 “编译后的代码” 刷入到真机流程

① 插上真机

② 执行

sudo adb reboot bootloader

让手机重启成为 fastboot 模式

如果此时手机界面展示

DEVICE_STATE – locked

那么需要再执行

fastboot oem unlock

让手机解锁

③输入

fastboot flashall -w

刷入我们编译好的 “源码”,然后等待即可。

由于目前没有真实的测试刷入的流程是否会有异常,这里我就不多说了。

如果看了这篇文章的朋友,恰好手头上有 nexus 手机 或者 pixel 手机,一定要先搜索了解自己的手机可以恢复原系统的方法之后,再进行本文章的刷机操作;

并且在编译源码的时候,一定要先选择自己手机支持的源码,再进行后续操作。

否则手机刷成砖后就刷不回来,那就浪费了~~~

本篇文章就到这里,虽然历时将近一周,其实本身并不难,只要按照流程一步一步来就行,只不过由于下载源码、解压、同步、编译会耗费点时间,所以拖到了今天。

后续有关 framework 的文章也会持续输出,敬请期待!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023年4月26日 下午4:37
下一篇 2023年4月26日 下午4:47

相关推荐