MacBooK pro编译Android 8.1源码

工具

  1. macbook pro 18款,16G内存,500G硬盘
  2. 系统版本:10.14.6
  3. java 8,xcode是最新的10.3

原料

1.Android源码一份 https://pan.baidu.com/s/113Bp4qial-wzRhJmwIOfRQ
2.macPorts 一份 https://www.macports.org/install.php
3.macOS 10.12 SDK一份 https://github.com/phracker/MacOSX-SDKs/releases
4.HAXM 一份 https://github.com/intel/haxm/releases

操作步骤

开始之前请先确认自己的java环境已经Android环境已经配置好,你要是Android开发,一般没什么问题

1. 下载源码

下载Android8.1的Android源码,得到android-8.1.0_r1压缩包,自己也可以去下载,不过这个时间会非常的长,根据个人口味选择

2. 创建磁盘映像

创建一个不少于150G的磁盘映像,我编译下载实际占用120G多一点

通过命令创建

$ hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 190g ~/自己想要配置的路径/android.dmg

通过磁盘工具创建

[外链图片转存失败(img-3ilcqyWq-1568632750179)(https://raw.githubusercontent.com/adonis-lsh/image_storage/master/19-9-16/15686221154315.jpg)]
[外链图片转存失败(img-Cvkfi6bR-1568632750180)(https://raw.githubusercontent.com/adonis-lsh/image_storage/master/19-9-16/15686222064457.jpg)]

note:

  1. 这个稀松硬盘镜像是可以和你的mac共享磁盘空间的,你磁盘空间实际使用多少就占用多少
  2. 名称主要注意,一定要用英文,不能使用默认中文的未命名,不然编译的时候会报一个某个文件找不到的错
  3. 一定要用英文,不能使用默认中文的未命名
  4. 一定要用英文,不能使用默认中文的未命名

3.安装macPorts软件

如果不出意外的话,你在安装macPorts肯定会卡住,因为这个软件同步源的默认网址那是相当的慢,有人说开全局VPN,实际上还是不行,那怎么办?先强制退出安装器,点击mac的重启按钮是,它会自动弹出来一个安装进程的一个弹窗,在强制退出,当然你通过命令找到它关掉也可以.然后然后是更换源,手动更新,一般安装的时候环境变量就自动配置好了.

$ cd /opt/local/etc/macports/

找到下面的sources.conf文件夹,通过vi编辑器来修改这一行代码

rsync://rsync.macports.org/macports/release/tarballs/ports.tar [default]

改为

https://distfiles.macports.org/ports.tar.gz [default]

再来手动进行更新源

$ sudo port -d sync

安装Make、Git 和 GPG 软件包

POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg

4.下载Mac SDK 10.12

正常情况下你现在编译肯定会报错:Could not find a supported mac sdk: [“10.10” “10.11” “10.12” “10.13”]

所以我们直接下一个10.12 SDK放进去,网上有人说修改文件什么的,在我电脑上面我也没有找到那个文件,还是添加SDK方法的好使,一劳永逸

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/

把下载的sdk包解压到上面的路径即可

5.解除文件数量限制

解除mac同时打开文件数量的限制:
$ sudo vi ~/.bash_profile

添加

# set the number of open files to be 1024
ulimit -S -n 1024

也可以再大一点

6.设置bison

这个一般都会有问题,所以编译之前先测试一下,cd到你解压Android源码的地方,执行

prebuilts/misc/darwin-x86/bison/bison --version

如果显示是Abort trap: 6,则是有问题,如果不处理的话,编译的过程中则会报

ninja: build stopped: subcommand failed.
ninja failed with: exit status 1

解决方案:

有人说安装bison通过软连接来进行处理,实测不行,

1.创建patch-high-sierra.patch

cd external/bison
touch patch-high-sierra.patch
sudo vi patch-high-sierra.patch

插入以下内容

With format string strictness, High Sierra also enforces that %n isn't used
in dynamic format strings, but we should just disable its use on darwin in
general.
 
--- lib/vasnprintf.c.orig   2017-06-22 15:19:15.000000000 -0700
+++ lib/vasnprintf.c    2017-06-22 15:20:20.000000000 -0700
@@ -4869,7 +4869,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *
 #endif
                   *fbp = dp->conversion;
 #if USE_SNPRINTF
-# if !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
+# if !defined(__APPLE__) && !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
                 fbp[1] = '%';
                 fbp[2] = 'n';
                 fbp[3] = '\0';

2.编译

patch -p0 < patch-high-sierra.patch  
mm

如果没有mm命令,在源码根目录执行,然后回来在执行

source build/envsetup.sh
lunch 24

3.拷贝

cp ./out/host/darwin-x86/obj/EXECUTABLES/bison_intermediates/bison ./prebuilts/misc/darwin-x86/bison/bison 

4.验证

最后通过命令验证是否设置成功

prebuilts/misc/darwin-x86/bison/bison --version

正常会提示一个版本号,我的提示是2.7

7.设置JVM的最大堆栈

为了防止OOM,直接提前设置一下.
sudo vi ./prebuilts/sdk/tools/jack-admin
编辑文件,找到

JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8}"

在后面添加-Xmx8192M,这个根据自己电脑的内存大小自己设置.

JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8 -Xmx8192M}"

8.下载驱动

驱动不要下载错,选择android-8.1.0_r1和对应的版本

https://developers.google.com/android/drivers

最后解压到源码根目录,执行.sh文件,会在源码中创建vendor文件夹

9.编译

1.清除一下原来的缓存
make clobber

2.设置环境
source build/envsetup.sh

3.选择版本,我选择的是6
lunch

4.编译
根据自己的实际情况选择合适的线程数
make -j8

5.等待奇迹出现

10.模拟器

1.编译好以后,运行emulator,不出意外,你会得到:

Failed to open the hax module
Warning: requested RAM 2048M too high for your system. Reducing to maximum supported size 0M
Hax is enabled
Hax ram_size 0x0
Failed to open the hax module
No accelerator found.
failed to initialize HAX: Operation not supported by device

明明自己AS里面的模拟器加速没问题,为什么还是提示不能加速呢,解决方案,自己下一个安装一下就好,地址在上面.最后你就可以把自己编译的Android源码跑在模拟器上面了.

参考链接

  1. https://www.cnblogs.com/ryanchi/archive/2016/07/18/5682186.html
  2. https://blog.csdn.net/qq_36006553/article/details/82860806
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值