Mac OS上编译Android源码

一、制作一个大小写敏感的磁盘分区

1.1.Mac OS磁盘工具

这里我使用一块移动硬盘,将移动硬盘的一个分区使用Mac OS的硬盘工具,抹掉数据,选择MacOS扩展(区分大小写,日志式),创建成大小写敏感的分区。

这里会遇到一个问题,抹掉分区数据的时候,会报错:“Mac OSX 抹盘发生错误:Mediakit 报告设备上空间不足以执行此操作”,这里的原因是磁盘没有大于200M的UEFI分区。

1.2.制作UEFI分区

我是在windows上操作的,
使用DiskGenius工具,在移动硬盘的第一分区前部,划分出200MB的空间。
在cmd命令行下运行下列命令,记得分步执行啊,小心出错,数据无价。

1
2
3
4
5
diskpart
list disk
select disk 1 ###这里选中要分区的磁盘,因为我是移动硬盘,index是1,这里应该会看到选择光标不要选错了

create partition efi size=200

详细的图文请参考:

Mac OSX 抹盘发生错误:Mediakit 报告设备上空间不足以执行此操作的解决办法

二、下载Android源码

2.1.repo sync 出错

1
2
3
4
error: RPC failed; result=56, HTTP code = 200<br>
fatal: The remote end hung up unexpectedly<br>
fatal: early EOF<br>
fatal: index-pack failed

repo sync时会出现如上错误,安装gnutlswget后,
并参考stackoverflow解决。

2.2.如何选择驱动

Source Code Tags and Builds

Android原生设备驱动

详细的图文请参考:

Android源码的下载、编译与导入到Android Studio

Mac OS X下编译Android M源码

三、编译

一定要下载并安装驱动,下载nexus5 6.0.1_r17版本为例,需要下载执行下图三个sh

1
2
3
4
$chmod a+x ./*****.sh
$./*****.sh

输入I ACCEPT完成安装
1
2
3
4
5
$source build/envsetup.sh

$lunch

$make -j16

四、如何将编译好的Android img刷入模拟器

需要设置ANDROID_PRODUCT_OUT变量到~/.bash_profile文件中

1
2
3
4
#Android 源码编译目录
export PATH=$PATH:/Volumes/AOSP/android-6.0.1_r17-x86_64/out/host/darwin-x86/bin
export ANDROID_PRODUCT_OUT=/Volumes/AOSP/android-6.0.1_r17-x86_64/out/target/product/generic_x86_64
export PATH=$PATH:$ANDROID_PRODUCT_OUT

使用命令启动emulator,加载指定的kernel内核和img

1
2
3
kans-MacBook-Pro:android-6.0.1_r17-x86_64 Ivonhoe$
emulator -kernel /Volumes/AOSP/android-6.0.1_r17-x86_64/prebuilts/qemu-kernel/x86_64/kernel-qemu -sysdir ./out/target/product/generic_x86_64/ -system /Volumes/AOSP/android-6.0.1_r17-x86_64/out/target/product/generic_x86_64/system.img -data /Volumes/AOSP/android-6.0.1_r17-x86_64/out/target/product/generic_x86_64/userdata.img -ramdisk /Volumes/AOSP/android-6.0.1_r17-x86_64/out/target/product/generic_x86_64/ramdisk.img

参考老罗的博客在Ubuntu上下载、编译和安装Android最新源代码

五、刷入Nexus6真机

Nexus6关机状态下,长按音量下+电源,进入recovery模式

然后在源码根目录下(Android根目录下)执行下面命令:

1
fastboot -w flashall

使用mmm framework/base单独编译framework代码

adb push可能会提示 Read-only file system

failed to copy 'out/target/product/shamu/system/framework/framework.jar' to '/system/framework/framework.jar': Read-only file system

通过下列命令解决:

1
2
3
4
5
6
adb root
adb remount
adb disable-verity
adb reboot
adb root
adb remount

六、参考文档

Android系统源码下载与编译、刷机–Nexus6实测

转载请标明出处病已blog https://ivonhoe.github.io/