首先 需要一个台式电脑,有个i7处理器,有一个1T的机械+ 500G的固态,如果条件允许改一个服务器也可以。我这里是一个台式电脑。

在台式电脑上安装一个虚拟机,基本是使用的VMware ,应该这个虚拟机有一个好处就是把每次成功的结果做成一个快照,就相当于做了一个备份,可以回退。

安装好虚拟机你就可以在创建虚拟机, 编译android 源码我用的Ubuntu 18.4 ,在虚拟机中安装即可。不会的自行百度,我这里不做赘述。

android syudio 虚拟机 权限 android8虚拟机_vim

安装完系统 再启动虚拟机,这个时候需要  aosp 系统镜像

AOSP | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

我下载的不是最新的,最新的现在要 95G,很浪费磁盘空间。

Index of /aosp-monthly/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror   在这个链接中可以看到

android syudio 虚拟机 权限 android8虚拟机_vim_02

本人下载的是   这个版本,这个版本刚好有 Android 9,相对小了很多

android syudio 虚拟机 权限 android8虚拟机_vim_03

下载完成之后   执行文件MD5 完整性校验,看看是不是 文件有损害,

md5sum  aosp-20190401.tar

android syudio 虚拟机 权限 android8虚拟机_git_04

再通过命令来解压 

tar  xf  aosp-20190401.tar

解压完成之后就 配置编译的环境

编译android 8.0以上的源码需要 配置 jdk8

##安装openjdk

sudo apt-get update

sudo apt-get install openjdk-8-jdk

sudo apt-get install openjdk-8-jre

##安装编译依赖的库文件
首先需要更新软件源,这里使用阿里源

编辑如下文件:

sudo apt update vim #先安装vim

sudo apt install vim -y

sudo vim /etc/apt/sources.list #或者sudo gedit /etc/apt/sources.list

末尾添加如下内容
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb http://kr.archive.ubuntu.com/ubuntu/ xenial main universe
deb-src http://kr.archive.ubuntu.com/ubuntu/ xenial main universe

上述软件源添加完成以后,需要先做更新操作:

sudo apt-get update
  • ###安装依赖库文件
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib 
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 lib32z-dev ccache
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4

安装并配置git
 

sudo apt-get install git -y

git config --global user.name "your name"

git config --global user.email "your@example.com"

在根目录 
 

sudo gedit ~/.bashrc 

PATH=~/bin:$PATH           

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


保存以后退出

安装repo

sudo apt install repo -y

同步源码

cd  aosp 

repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-8.0.0_r2

repo  sync

android syudio 虚拟机 权限 android8虚拟机_git_05

这里就等待 大概1小时 ,如果同步不成功  就在 执行   repo  sync  ,多次执行除非同步成功。

同步成功如下

android syudio 虚拟机 权限 android8虚拟机_ubuntu_06

需要下载对应的驱动

https://developers.google.com/android/drivers#sailfishopm4.171019.021.p1  

下载这两个 压缩文件  并解压得到两个脚本  ,拷贝到 aosp 目录下  运行,

./extract-google_devices-sailfish.sh

./extract-qcom-sailfish.sh

android syudio 虚拟机 权限 android8虚拟机_ubuntu_07

 输入      I ACCEPT

android syudio 虚拟机 权限 android8虚拟机_ubuntu_08

另一个同样的方法,这样子脚本就安装完成。

##编译AOSP
 

source build/envsetup.sh

lunch

android syudio 虚拟机 权限 android8虚拟机_vim_09

我自己用的pixel 手机,所以选择的  23  

设备编码选择  https://source.android.com/setup/build/running#selecting-device-build

android syudio 虚拟机 权限 android8虚拟机_vim_10

最后一步就是  在主目录找到   .bashrc 文件,在最后面添加    export LC_ALL=C       

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

source ~/.bashrc

  链接文件

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

然后就是编译 

make  -j16 


如果用python3编译失败,那就切换用python2来编译

当出现heap不足时有两种解决办法:

方法1 : 

打开  prebuilts/sdk/tools/jack-admin

对JACK_SERVER_COMMAND增加-Xmx4096m选项

用如下命令 
sudo vim  /jack-admin    或者sudo gedit  /jack-admin

找

JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8}"

修改为   

JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8  -Xmx8g}"

方法2 : 导出环境变量

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

两种方式任选其一都可以,然后执行jack重启命令:

out/host/linux-x86/bin/jack-admin kill-server
out/host/linux-x86/bin/jack-admin start-server

编译完成如下

android syudio 虚拟机 权限 android8虚拟机_vim_11

刷机

可以写成脚本来刷机 ,刷机的时候 需要解锁 bootloader,谷歌官网先下载对应版本的 刷机包 ,解压之后 

android syudio 虚拟机 权限 android8虚拟机_git_12

第一种刷机方法

用刷机命令 如下图: 

android syudio 虚拟机 权限 android8虚拟机_vim_13

第二种刷机方法  

在所有.img 文件的文件夹里面,打开 cmd直接执行   如下命令,

fastboot flashall -w

就是将所有的.img 文件刷入手机。

刷机完成  

android syudio 虚拟机 权限 android8虚拟机_git_14