Android源码编译流程及所需的编译环境

编译过程:

下载源码->搭建编译环境->编译源码->解决编译报错->生成编译固件包

  1. 编译环境

本文使用的是下载好的Android8.1源码,搭建好的虚拟机Ubuntu14.0/Ubuntu16.0(建议分配300G及以上的内存)

下载git

sudo apt-get install git

配置自己的user.name及user.email

git config --global user.email “[email protected]” 
git config --global user.name “fys”

下载jdk1.8

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk   
  1. 开始编译

  1. 进入android源码目录初始化编译环境

source build/envsetup.sh
  1. 初始化完成之后执行lunch选择编译目标

lunch 

输入想要编译的目标号即可

这里如果是自己兴趣开发使用,随便玩玩一般选择1或2即可

开发人员需要自行选择自己项目具体的编译目标

  1. make开启编译

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

make -j4 >build.log

>build.log 代表输出编译日志可以在源码根目录直接查到,编译过程中的报错可以在log中查找

  1. 解决编译报错

编译报错一般会在命令行最后提示如下:

[0;31m#### failed to build some targets (11:11 (mm:ss)) ####[00m

报错1:/bin/bash: m4: command not found

解决方法:

sudo apt-get install m4

报错2: /bin/bash: xmllint: command not found

解决方法:

sudo apt-get install libxml2-utils

报错3:SSL error when connecting to the Jack server. Try ‘jack-diagnose‘

解决方法:

  1. 从 /etc/java-8-openjdk/security/java.security中删除TLSv1, TLSv1.1

一般要重写java.security文件,这个文件赋予最高权限也无法修改保存

这里给出的解决方法是在java.security文件中删除TLSv1, TLSv1.1之后另保存为,取代原先的文件

2、删除完成之后回到源码根目录下执行:

./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server

报错4:Out of memory error (version 1.3-rc7 'Douarn' (445000 d7be3910514558d6715ce455ce0861ae2f56925a by [email protected])).

解决方法:

export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server

报错5:/bin/bash: prebuilts/misc/linux-x86/bison/bison: No such file or directory

解决方法:

sudo apt-get install g++-multilib
sudo apt-get install gcc-multilib
sudo apt-get install lib32ncurses5-dev
sudo apt-get install lib32readline-gplv2-dev
sudo apt-get install lib32z1-dev

编译成功

terminal上编译显示如图即表示编译完成

查看log,显示如下即表示编译成功

猜你喜欢

转载自blog.csdn.net/weixin_44358790/article/details/129568710