美文网首页CS
编译移植Android ARM源码

编译移植Android ARM源码

作者: Joe_HUST | 来源:发表于2018-01-05 16:14 被阅读118次

[TOC]

编译移植Android ARM源码

android源码编译的四个流程:1. 源码下载; 2. 构建编译环境; 3.编译源码; 4.运行.

由于Android源码比较大,建议在需要编译的Android的文件系统当中留下大概200G的空间,同时机器的内存建议至少为4G,缓存至少为4G.

源码下载

由于被墙,建议使用国内的镜像源进行源码下载,如果你的VPN速度很快,你也可以选择从google官网下载,镜像源可以选择科大源或者清华源, 在此我是用的清华源.

根据清华源网站中的提示步骤,先下载repo工具(可以按照提示在HOME目录下建立bin文件夹然后将其加入环境变量,但是我在此处直接将repo工具下载到/user/local/bin/目录下,就不用在添加环境变量了):

sudo curl https://storage.googleapis.com/git-repo-downloads/repo > /usr/local/bin/repo
//若无法使用,则可以使用下面的镜像下载
sudo curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > /usr/local/bin/repo

chmod +x /user/local/bin/repo

//repo的运行过程中会尝试访问官方的git源更新自己,如果想要使用tuna的镜像源进行更新,可以将如下内容复制到你的~/.bashrc里,并重启终端
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'

repo下载完成以及加入环境变量之后,下载源码在不建议直接在浏览器中下载tar文件,本人在浏览器中下载了两次都失败了,每次都是下载到20G的时候突然失败了,还没法继续下。然后又得从头开始下. 建议直接在命令行中使用wget工具下载源码;在HOME目录下建立工作目录AndroidBuild 将初始化包下载到这个工作目录中,源码大概50G左右,我下了几个小时.

mkdir ~/AndroidBuild
wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar -P ~/AndroidBuild # 下载初始化包
cd ~/AndroidBuild/
tar -xvf aosp-latest.tar
cd aosp/   # 解压得到的 AOSP 工程目录
# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
repo sync # 正常同步一遍即可得到完整目录
# 或 repo sync -l 仅checkout代码

此后每次运行repo sync即可保持同步。 由于我们已经下载了初始话包,就不需要在使用repo init-u https://aosp.tuna.tsinghua.edu.cn/mirror/manifest --mirror这种方式了,只要用上面的repo sync就可以了。

安装openJDK

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt update
sudo apt install openjdk-8-jdk

安装需要的编译依赖

sudo apt-get install -y libx11-dev:i386 libreadline-dev:i386 libgl1-mesa-dev g++-multilib git flex bison gperf build-essential libncurses5-dev:i386 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 dpkg-dev libsdl1.2-dev libesd0-dev git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev libgl1-mesa-dev libxml2-utils xsltproc unzip m4 lib32z1-dev ccache

初始化编译环境

source ~/AndroidBuild/aosp/build/envsetup.sh

编译源码

切换到我们需要的Android版本来编译.我们选择编译Android 8.0

repo init -b android-8.0.0_r36
repo sync -l #从本地将8.0这个版本checkout出来.若出现错误或者缺少文件,需要从远程来完成这一过程命令如下repo sync # 若上一个命名执行错误,则从远程服务端来获取源码,不加-l参数表示从远程获取

获取完成之后,刚克隆下来的代码是没有分支的,使用repo start命令来创建并切换分支,repo start实际上是对git checkout-b命令的封装.为指定的项目或者是所有的项目(--all参数),以文件清单中为设定的分支,创建特定分支,这条指令与git checkout-b还是有很大的区别,git checkout -b是在当前所在的分支的基础上创建特定分支,而repo start是在清单文件设定分支的基础上创建特定的分支.执行如下命令:

repo start android-8.0.0r36 --all #我们直接使用android-8.0.0r36这个分支名 

之后我们就可以使用lunch指定来设置编译目标,即选择生成的镜像要运行在什么样的设备上,我们这里要运行在32位的ARM设备上,选择aosp_arm-eng

lunch aosp_arm-eng
# 运行成功之后在make
make -j4 

编译过程需要的时间比较长,视机器的性能而定.

在编译过程中可能出现JAVA的堆栈不足的情况,解决办法为:

建立一个err.sh文件,将其扩大到4g内容如下:

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

chmod +x err.sh

source err.sh

然后再重新执行make -j4 make完成之后生成的代码都位于out目录下.至此编译就完成了.

相关文章

网友评论

    本文标题:编译移植Android ARM源码

    本文链接:https://www.haomeiwen.com/subject/hrjsnxtx.html