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
同步源码到本地
初始化仓库之后,就可以开始正式同步代码到本地了,命令如下:
出现……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
为了应对下面的错误需要加点内容:
在当前用户的.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/
#该命令执行成功后,我们会得到了一些有用的命令,比如下面要用到的lunch命令
lunch aosp_arm64-eng
#我手机架构为arm64
开始编译
通过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)) ###表示你编译成功了.
运行模拟器
在编译完成之后,就可以通过以下命令运行Android虚拟机了,命令如下:
source build/envsetup.sh
lunch aosp_arm64-eng #选择刚才你设置的目标版本
emulator
如果你是在编译完后立刻运行虚拟机,由于我们之前已经执行过source及lunch命令了,因此现在你只需要执行命令就可以运行Android虚拟机:
emulator
不出意外,在等待一会之后,你会看到运行界面: