Android8.1源码编译

 

编译须知:

1.本次编译平台Ubuntu18.04。使用的虚拟机来完成的源码编译,本次编译的是android8.1版本。

2.虚拟机的虚拟硬盘最好在150g以上,我的虚拟中分配了268g内存,只安装了Android编译需要的库,编译完Android磁盘占用54%,

环境搭建

1.安装虚拟机Ubuntut虚拟机,为了方便查找编译过程中的资料,我选择了Ubuntu18.4的版本

ubuntu的下载地址是http://mirrors.163.com/ubuntu-releases/18.04/,使用VitralBox进行安装,具体的安装过程就不展示了。

2.安装git

sudo apt-get install git

安装完成之后需要设置用户名和邮箱(如果不设置,拉取repo的时候会拒绝)

git config --global user.name "xx"

git confit --global user.email "[email protected]"

3.下载Repo工具

git clone https://aosp.tuna.tsinghua.edu.cn/git-repo/

chmod a+x git-repo/repo

然后添加repo的目录(比如~/git-repo/repo)到path 环境变量。

export PATH=~/git-repo:$PATH

打开repo文件,把REPO_URL镜像地址设置成为清华镜像地址。

gedit  ~/git-repo/repo

REPO_URL = 'https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

4.下载Android源码

首先新建一个目录用来存放Android的源码,这里在用户的目录下新建了一个android_src目录

mkdir android_src

进入android_src后,执行如下命令

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest

ps:可能自带的python环境不可用,需要手动安装puthon,

等该命令执行结束之后就可以查看目前能够获得的分支了。

cd .repo/manifest.git/

git branch -a

这里我选择了android-8.1.0_r41分支。

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.1.0_r41

repo sync

到这一步,需要时间比较久,我网速比差,断断续续用了一天半的时间,如果中途下载中断,就重复执行上述命令,一直到下载完成。

 

 

出现上述的log日志,就恭喜你,完成编译源码的一半了,

 

5.准备编译环境

然后需要配置java8,这里需要使用openjdk

sudo apt-get install openjdk-8-jdk

 sudo apt-get install openjdk-8-jre

注意配置完成之后,用java -version检查一下jdk版本,如果不是open-jdk,就需要切换程Open-jdk的版本。

接着是安装依赖的库

sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib

sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386

sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386

sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev

sudo apt-get install git-core gnupg flex bison gperf build-essential 

sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib

sudo apt-get install libc6-dev-i386

sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev

sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4

sudo apt-get install lib32z-dev ccache

ps:libesd0-dev可能会出现安装问题,百度搜 libesd0-dev就能找到解决方案。

最后开始执行

source build/envsetup.sh

lunch aosp_arm64-eng

这里的arm64 标识使用arm64 cpu设别,eng表示engineer版本。

最后的一步执行

make -j8;

其中j8表示开8个线程来参与编译源码,这个数字一般满足cup内核数*2,可以通过cat /proc/cpuinfo来查看相关的cpu信息。

稍等一会儿就编译好了              那是不可能的

编译完成后的样子是这样的

Android8.1源码编译_第1张图片

 

6.就解决编译过程中的bug

通常编译错误会是这样的

 

需要注意的一点是

  • 编译过程中,会在home目录中生成    .jack-server目录和  .jack-setting文件。其中.jack-server/logs目录下面会记录编译错误信息的log文件,文件名后缀名中数字较大是最新生成的文件,通过查看这些错误信息就能够解决一些问题。
  • 可以使用andrid_src/prebutils/sdk/tools 目录下面,执行 ./jack-diagnose来查看一些错误信息。

端口占用

出现端口冲突遇到的肯能性很大,jack-admin中配置的端口一般是8076和8077,

可以通过查看lsof -i查看端口是被占用,或者用netstat -ap | grep 8076

如果被占用,使用 kill -9 pid 来杀死相关进程,从而释放端口,

 

我这里使用的是修改端口为8070和8071

首先使用打开jack-admin

gedit  android_src/prebutils/sdk/tools/jack-admin,

修改如下配置

Android8.1源码编译_第2张图片

 

然后修改~/.jack-server/confit.properties中对应的端口地址。

然后在修改.jack-settings文件中的端口地址。

这三者修改完成之后,如果还是报无法连上jack-server,可以执行下面两个操作。

1.检查上述三个位置文件是否一致。

2.检查端口是被占用,如果被占用,就杀死该进程。

通过上面的2个方法就可以彻底排除端占用问题。

下面的这些都是我从网上摘抄的问题解决方案

Out of memory erro

这个问题我没有遇到,但是我也把相关的信息修改加进去了。

export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m"

~/android_src/prebuilts/sdk/tools/jack-admin kill-server

~/android_src/prebuilts/sdk/tools/jack-admin start-server

sizeof (_nl_value_type_LC_TIME[0]))’ ??? 

执行

export LC_ALL=C

No Jack server running. Try ‘jack-admin start-server’

执行

jack-admin kill-server

jack-admin start-server

 

 

7.编译成功

编译成功之后的展示

Android8.1源码编译_第3张图片

如果没有下面的那行build completed successfully, 接下来启动模拟器可能会失败,再次编译,完成之后就出了上图中的绿色字体。

 

然后执行 emulator命令,就开始启动模拟器了,启动会花费几分钟,耐心等待,

Android8.1源码编译_第4张图片

8.第二次无法启动

第一次运行emulator可以成功,后面报emulator找不到,需要设置环境变量

export PATH=$PATH:~/Android/out/host/linux-x86/bin 

export ANDROID_PRODUCT_OUT=~/Android/out/target/product/generic

source build/envsetup.sh

选择你的版本

lunch aosp_arm-eng

然后再执行emulator

 

参考文章

https://blog.csdn.net/m0_37302832/article/details/79278478

 https://blog.csdn.net/Yoryky/article/details/81813717

https://blog.csdn.net/bible1/article/details/77848036

 

 

 

 

 

你可能感兴趣的:(Android8.1源码编译)