Android源码:3、编译详解(最后运行模拟器出现黑屏)

文章目录

一、前言

二、Android源码编译

1、清理

2、设置环境

3、选择编译目标

什么是BUILD?

什么是BUILDTYPE?

Android的版本

4、开始编译

5、再次编译

6、运行模拟器

警告1:

警告2:

警告3:

最后:


一、前言

上篇文章已下载全部的Android源码,其存放路径应该放在 “区分大小写的磁盘映像” 目录下,我的目录如下:

Android源码:3、编译详解(最后运行模拟器出现黑屏)_第1张图片

那么同步源码步骤为:

1、挂载区分大小写的磁盘映像

2、切换到源码目录:cd /Volumes/untitled/WORKING_DIRECTORY

3、执行源码更新:repo sync

解决 repo: command not found 问题,执行命令:

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

export PATH=$PATH:$HOME/bin

Android源码:3、编译详解(最后运行模拟器出现黑屏)_第2张图片

更新源码完毕,如下图:

Android源码:3、编译详解(最后运行模拟器出现黑屏)_第3张图片

二、Android源码编译

切换到源码目录:cd /Volumes/untitled/WORKING_DIRECTORY

1、清理

为了确保新安装的二进制文件在解压后会被适当考虑在内,请使用以下命令删除所有以前编译操作的已有输出

我们在 Android 源码目录下执行如下清理命令:

make clobber

17:31:45 Entire build directory removed     意思是17:31:45删除了整个生成目录(以前的)

没有任何异常。

2、设置环境

source build/envsetup.sh

没有任何异常

3、选择编译目标

执行 lunch 命令后, 会输出一个列表让我们选择

lunch

这里来简单说一说,列表中各项是什么意思?

其实 lunch命令的格式是 lunch BUILD-BUILDTYPE,如果我们后面没有输入BUILD-BUILDTYPE,则会弹出一个列表让我们选择,我们就以aosp_hammerhead_userdebug来看BUILD-BUILDTYPE

aosp_hammerhead是 BUILD

userdebug是 BUILDTYPE

hammerhead其实是 N5 手机的别名

什么是BUILD?

BUILD指的是特定功能的组合的特定名称,即表示编译出的镜像可以运行在什么环境.其中,aosp(Android Open Source Project)代表Android开源项目;arm表示系统是运行在arm架构的处理器上,arm64则是指64位arm架构;处理器,x86则表示x86架构的处理器;此外,还有一些单词代表了特定的Nexus设备,下面是常用的设备代码和编译目标,更多参考官方文档

什么是BUILDTYPE?

BUILD TYPE则指的是编译类型,通常有三种:
-user:代表这是编译出的系统镜像是可以用来正式发布到市场的版本,其权限是被限制的(如,没有root权限,不鞥年dedug等),适合生产环境
-userdebug:在user版本的基础上开放了root权限和debug权限,适合调试
-eng:代表engineer,也就是所谓的开发工程师的版本,拥有最大的权限(root等),此外还附带了许多debug工具

设备型号 设备代码 编译目标
Nexus 6P angler aosp_angler-userdebug
Nexus 5X bullhead aosp_bullhead-userdebug
Nexus 6 shamu aosp_shamu-userdebug
Nexus 5 hammerhead aosp_hammerhead-userdebug

如果不需要刷入到手机上的话,选择 arm 或者 x86 的即可。

Android源码:3、编译详解(最后运行模拟器出现黑屏)_第4张图片

这里我选择直接输入: 2  或者 aosp_arm64-eng

可以得到该版本的基本信息列表,执行结果如下:

Android源码:3、编译详解(最后运行模拟器出现黑屏)_第5张图片

Android的版本

Android Q(按照字母表排序),版本号或将为Android 10.0

Android源码:3、编译详解(最后运行模拟器出现黑屏)_第6张图片

4、开始编译

通过make指令进行代码编译,该指令通过-j参数来设置参与编译的线程数量,以提高编译速度。

比如这里我们设置8个线程同时编译:

make -j8

参与编译的线程并不是越多越好,通常是根据你机器cup的核心来确定:core*2,即当前cpu的核心的2倍.
比如:我的 mac 是4核心 4线程的,所有使用8个线程编译最好

可查看:关于本机-系统报告-核总数

Android源码:3、编译详解(最后运行模拟器出现黑屏)_第7张图片

编译二个小时左右,报错:

external/iptables/include/linux/netfilter_ipv4/ipt_ECN.h:13:10: fatal error: 'linux/netfilter/xt_DSCP.h' file not found

解决方式参考:external/iptables/include/linux/netfilter_ipv4/ipt_ECN.h:13:10: fatal error: 'linux/netfilter/xt_DSC_爱折腾的华哥的博客-CSDN博客

5、再次编译

报错修改后,我再次执行命令:

make -j8

因为太费时间所以晚上睡觉的时候,让它自己运行,花了将近7个小时,编译完成、编译成功:

 build completed successfully (04:13:31 (hh:mm:ss))  表示你编译成功了。

Android源码:3、编译详解(最后运行模拟器出现黑屏)_第8张图片

6、运行模拟器

在编译完成之后,就可以通过以下命令运行Android虚拟机了,命令如下:

source build/envsetup.sh
lunch(选择刚才你设置的目标版本,比如这里了我选择的是2)
emulator

如果你是在编译完后立刻运行虚拟机,由于我们之前已经执行过source及lunch命令了,因此现在你只需要执行命令就可以运行虚拟机:

emulator

Android源码:3、编译详解(最后运行模拟器出现黑屏)_第9张图片

警告1:

emulator: WARNING: Couldn't find crash service executable /Volumes/untitled/WORKING_DIRECTORY/prebuilts/android-emulator/darwin-x86_64/emulator64-crash-service

这个警告一般没影响,是模拟器崩溃时进行处理的程序,对使用者意义不是很大。

警告2:

emulator: WARNING: system partition size adjusted to match image file (813 MB > 800 MB)

调整系统分区大小以匹配图像文件,执行命令:emulator -partition-size 1024

警告3:

WARNING: HAXM 6.0.5 is installed. Please install HAXM >= 6.2.1 to fix compatibility issues on Mac.

WARNING: HAXM 6.0.5 is installed. Please install HAXM >= 6.2.1 to fix compatibility issues on Mac._爱折腾的华哥的博客-CSDN博客

最后:

网上找了很多资料,还是一直卡在黑屏!

期间mac笔记本风扇呼呼响,摸了摸不是很烫,进行了几次尝试:

第一次(将近4个小时): 或者 aosp_arm-eng

第二次(将近7个小时): 2  或者 aosp_arm64-eng 

第三次(将近10个小时):执行make clobber,再次尝试 2  或者 aosp_arm64-eng

Android源码:3、编译详解(最后运行模拟器出现黑屏)_第10张图片

下载源码花了2天多的时间、编译源码也花了2天多的时间,后面就没进行其他尝试了,大家也可以尝试其他版本。

编译还是成功了,只是模拟器运行出现黑屏,它应该不会影响后面看源码吧!

最后运行

cd /Volumes/untitled/WORKING_DIRECTORY
source build/envsetup.sh
lunch 2(选择刚才你设置的目标版本,比如这里了我选择的是2,输入命令:lunch 2)
emulator -partition-size 1280(内存不够,执行此命令:emulator -partition-size 1280)

Android源码:3、编译详解(最后运行模拟器出现黑屏)_第11张图片

Running an x86 based Android Virtual Device (AVD) is 10x faster.
We strongly recommend creating a new AVD.

运行基于x86的Android虚拟设备(AVD)的速度是10倍。
我们强烈建议创建一个新的AVD。

参考资料:

https://www.jianshu.com/p/1513fc9e1a74

https://www.jianshu.com/p/5cf755f05af4

Android各版本 发布时间 及对应API(2020.9.9截至Android最新版本 11)_Chin_style的博客-CSDN博客_android版本

Mac编译android源码中遇到的坑 - 掘金

https://www.jianshu.com/p/367f0886e62b

Mac 10.12 编译 Android 源码_crianzy的博客-CSDN博客

你可能感兴趣的:(#,--Android源码系列,安卓开发,Android,Android源码编译)