苹果电脑能编译 Android 源码吗?

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

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

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

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

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


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

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

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

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

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

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

hdiutil resize -sizeg ~/android.dmg.sparseimage

比如

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

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

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


第二步、安装 JDK

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


第三步、安装 xcode

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

安装的 xcode 11.3.1

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


第四步、安装MacPorts

通过 macports.org 安装 MacPorts。

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

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

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

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


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

使用下面命令即可

POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg

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

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


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

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

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

ulimit -S -n 1024

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


第七步、准备源代码

① 安装 Repo

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

mkdir ~/binPATH=~/bin:$PATH

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

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

② 初始化 Repo 客户端

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

mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY

然后,配置 git 信息

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

最后,初始化 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

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

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

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

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

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

解压

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

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

repo sync

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


第八步、准备编译

① 下载预览二进制文件

下载下来后,解压得到

② 然后运行这个 sh 文件

sh  文件名.sh

需要看下协议

安装完成

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

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

④ 然后执行

make -f Makefile clobber

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


第九步、开始编译

① 先初始化环境

source build/envsetup.sh

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

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

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


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

make -j8

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

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

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

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

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)

相关推荐

  • 如何源码安装ansible

    ansible可以采用yum的方法进行安装,yum源中是什么版本就只能安装什么版本.如果想要安装最新版本或者历史版本,那只能采用编译源码的方式进行安装了. 操作方法 01 安装一些基础软件包 yum ...

  • Linux源码包安装过程及注意事项

    众做周知RedHat Linux使用RPM包管理器安装rpm包,但是RPM包是由红帽编译打包的,通常相对于最新版落后了很多,甚至可能缺少我们所要使用的功能.如果你需要定制想要的软件功能.自定义安装路径 ...

  • 三星 I9300 基于Cm27号源码编译 完整汉化

    操作方法 01 介绍 Android版本:4.3 UI类型:Cm10.2 内核版本:3.0.64 ROM介绍 基于最新的Cm源码编译而成的卡刷版本; 更新了Cm官方的更新内容,完整汉化.bug修复.框 ...

  • 三星GT-I9100 基于CM官方最新源码自编译

    操作方法 01 前言 很久没有腾出时间来做rom了,这次给大家带来的是我自己编译的I9100的CM10+官方最新6.0.1.9 recovery 恢复系统 .本rom为基于CM官方最新4.1源码自主编 ...

  • 三星s3基于源码编译3.10.25 乐蛙官方唯一认证

    操作方法 01 [乐蛙OS 5]三星i9300基于源码编译3.10.25 乐蛙官方唯一认证 by齐殿 ROM名称       齐殿 Android版本       4.1.2 启动器版本        ...

  • Linux源码包编译和安装

    源代码的用处无非是以下两点; 1、软件根据用户的需要加以定制; 2、二次开发;注:要根据软件的许可证书约定为准,开发者许可二次开发才行; LINUX本是开源的,看大家的倔劲有多大了,呵呵,好了,下面正 ...

  • 小米2 AOSP源码最新编译4.3原生版刷机包

    本rom基于最新aosp源码编译而成以及基于秋大内核编译.感谢他们...添加一些人性化设置 操作方法 01 制作相关 ROM名称    AOSP源码最新编译4.3原生版[添加来电归属地百分比电量状态栏 ...

  • Android怎么实现打电话源码

    Android怎么实现打电话源码,Andriod打电话源码及其可运行程序,Android开发环境搭建好,这里介绍一个简单的开发打电话的功能 操作方法 01 Activity对应的xml的布局 < ...

  • 小米2 CM源码最新编译4.2原生版第一波来袭

    本rom基于最新cm源码编译而成以及基于秋大内核编译.感谢他们... 操作方法 01 制作相关 ROM名称    CM源码最新编译4.2原生版[添加来电归属地] ROM版本    4.2 基于版本   ...

  • 苹果电脑下如何更新vim版本?在Mac下升级vim8.0版本的方法介绍

    苹果电脑下怎么升级vim8.0版本?话说vim更新出了版本 8.0,其实我不用 vim 也好长时间了,也只有在登录远程服务器或者一些比较特殊的情况下才用用 vim,但是这依然不影响 vim 在我心目中 ...