在Ubuntu 18.04编译Android 8.1

在ubuntu 18.04编译android 8.1

2018.08.07

  • 在看了许多教程后自己也动手实施,道路可以说简单也可以说难。

    硬件要求:
    越高越好,不建议在虚拟机内编译
    内存越大越好,推荐200G,在这里就不赘述怎么安装ubuntu双系统了,网上教程很多,有时间写一教程出来传送门

  • 推文:传送门

安装并配置git

sudo apt-get install git -y
git config --global user.name "your name"
git config --global user.email "[email protected]"

安装repo

sudo apt install repo -y

sudo apt-get install curl -y

下载repo工具

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

若下载不了,用下面的方法(推荐)

git clone https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
cp ~/git-repo/repo ~/bin/
chmod a+x ~/bin/repo

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

2.并编辑 ~/bin/repo文件,找到REPO_URL这一行,然后将其内容修改(注释并增加一行)为:

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

顺带说一声清华源用起真爽!

echo " export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/' ">> ~/.bashrc #执行步骤1

vi ~/bin/repo
mkdir ~/android8source #将会存放源码

cd ~/android8source/

初始化仓库
查看分支表:

打开新终端,下载manifests
mkdir ~/tabl
cd ~/tabl
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
cd ~/tabl/.repo/manifests/
git branch -a

同步8.1分支:

我们将上面的source文件夹作为仓库,现在需要来初始化这个仓库了.通过执行初始化仓库命令可以获取AOSP项目master上最新的代码并初始化该仓库,命令如下:
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.1.0_r2

同步源码到本地
初始化仓库之后,就可以开始正式同步代码到本地了,命令如下:

repo sync
在Ubuntu 18.04编译Android 8.1_第1张图片

出现……success…….即同步完成,下面是编译
编译过程易错且过程漫长,需要耐心。 I am too young?!?!?!
我现在在Ubuntu 18.04下编译AOSP主线代码,因此需要安装OpenJDK 8,执行命令如下:

sudo apt-get update
sudo apt-get install openjdk-8-jdk -y

构建依赖

sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib -y
sudo apt-get install -y git flex bison gperf build-essential libncurses5-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 -y
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
sudo apt install make make-guile -y
sudo apt-get install tofrodos -y
sudo apt-get install python-markdown libxml2-utils xsltproc zlib1g-dev:i386

为了应对下面的错误需要加点内容:

在Ubuntu 18.04编译Android 8.1_第2张图片

在当前用户的.bashrc文件中增加:
export LC_ALL=C

echo "export LC_ALL=C" >> ~/.bashrc

加链:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

修改prebuilts/sdk/tools/jack-admin文件,找到文件中的这一行:
JACK_SERVER_COMMAND=”java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir= TMPDIR T M P D I R JACK_SERVER_VM_ARGUMENTS -cp LAUNCHERJAR L A U N C H E R J A R LAUNCHER_NAME”

在 -cp 前加上-Xmx4096m (4096尽量为RAM也就是运行内存或者说swap的一半大小,其实看不见括号这句话也没关系的)如:
JACK_SERVER_COMMAND=”java -Djava.io.tmpdir= TMPDIR T M P D I R JACK_SERVER_VM_ARGUMENTS -Xmx4096m -cp LAUNCHERJAR L A U N C H E R J A R LAUNCHER_NAME”

vi ~/android8source/prebuilts/sdk/tools/jack-admin

# ~/android8source 为刚才同步源码的目录,编译会在这里面进行

cd android8source/prebuilts/sdk/tools/

./jack-admin install-serve jack-launcher.jar jack-server-4.11.ALPHA.jar

重启终端:

# 键入Ctrl + D
#键入Ctrl + Alt +T

初始化编译环境
确保上述过程完成后,接下来我们需要初始化编译环境,命令如下:

cd ~/android8source/

source build/envsetup.sh
在Ubuntu 18.04编译Android 8.1_第3张图片

#该命令执行成功后,我们会得到了一些有用的命令,比如下面要用到的lunch命令

在Ubuntu 18.04编译Android 8.1_第4张图片

lunch aosp_arm64-eng

#我手机架构为arm64

在Ubuntu 18.04编译Android 8.1_第5张图片

开始编译

通过make指令进行代码编译,该指令通过-j参数来设置参与编译的线程数量,以提高编译速度.比如这里我设置8个线程同时编译:

make -j8

#看自己电脑配置选择线程。参与编译的线程并不是越多越好,通常是根据你机器cup的核心来确定:core*2,即当前cpu的核心的2倍.比如,我现在的笔记本是双核四线程的,因此根据公式,最快速的编译可以make -j8.

(通过cat /proc/cpuinfo查看相关cpu信息)

#如果一切顺利的化,在几个小时之后,便可以编译完成.
#看到### build completed successfully (01:41:38 (hh:mm:ss)) ###表示你编译成功了.

在Ubuntu 18.04编译Android 8.1_第6张图片

运行模拟器

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

source build/envsetup.sh
lunch aosp_arm64-eng #选择刚才你设置的目标版本
emulator

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

emulator

不出意外,在等待一会之后,你会看到运行界面:

在Ubuntu 18.04编译Android 8.1_第7张图片


你可能感兴趣的:(安卓学习路线)