文章目录
工具
- macbook pro 18款,16G内存,500G硬盘
- 系统版本:10.14.6
- 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:
- 这个稀松硬盘镜像是可以和你的mac共享磁盘空间的,你磁盘空间实际使用多少就占用多少
- 名称主要注意,一定要用英文,不能使用默认中文的未命名,不然编译的时候会报一个某个文件找不到的错
- 一定要用英文,不能使用默认中文的未命名
- 一定要用英文,不能使用默认中文的未命名
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源码跑在模拟器上面了.
参考链接
- https://www.cnblogs.com/ryanchi/archive/2016/07/18/5682186.html
- https://blog.youkuaiyun.com/qq_36006553/article/details/82860806