Android9.0 源码下载和编译

一 . 安装Ubuntu虚拟机

参考在VirtualBox 6虚拟机上安装Ubuntu Linux 18.04操作系统
这里我是参考这篇博客的安装的,需要注意的是Ubuntu的版本一定要是稳定版的,官方长期维护的(带LTS)

二 . 下载repo工具

这里我们只要知道repo是使用Python对git进行封装的工具就行,还有就是repo的作用是方便管理Android源码繁多的git库,它的使用时简化了git版本库的管理。

安装git:

sudo apt-get install git

创建bin,并加入到PATH中:

mkdir ~/bin
PATH=~/bin:$PATH

安装curl库:

sudo apt-get install curl

下载repo并设置权限:

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

安装python,repo初始化时会用到:

sudo apt-get install python

三 . 下载源码

建立工作目录:

mkdir aosp
cd aosp

这里如果想使用清华镜像来更新repo,可以加上如下内容到你的~/.bashrc中:

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

设置身份,添加自己的git邮箱和密码:

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

初始化仓库:

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest

初始化指定版本:

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-9.0.0_r8
// 这里的版本有很多,最好选一个稳定版的

同步源码:

repo sync

接下来是漫长的等待,这里我用了6个小时。。。

四 . 编译环境准备

安装 jdk8:

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

这里可以自己配一下java环境变量,很简单就不说了。

使用 ubuntu 14+,需要安装以下依赖包:

sudo apt-get install 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 lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

五 . 源码整编

在AOSP的根目录,输入如下的命令初始化环境:

source build/envsetup.sh
// 编译前删除build文件夹A
make clobber

这里实际的操作就是执行build文件夹下的envsetup.sh这个脚本

选择编译目标:

lunch

lunch命令是envsetup.sh里定义的一个命令,用来让用户选择编译目标
这里我们选择5,具体的编译目标类型自己可以去查看哦。

lunch 5

下面开始编译:
通过-jN参数来设置编译的并行任务数,以提高编译速度,在此前我的CPU核心数为6,这里N值最好选在6到12之间,这里我们设置6个并行任务进行编译(注意:这里看自己的电脑配置,如果配置低,N值选小一点)

make -j6

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

source build/envsetup.sh
lunch 5
emulator

如果是在编译完后运行虚拟机,由于之前已经执行过source和lunch命令了,可以直接运行:

emulator

这里需要注意的是如果是在虚拟机上编译模拟器上不会运行成功,但是如果是直接在Linux电脑上就可以运行成功,我自己的是Ubuntu16的虚拟机。

最后编译成功会显示绿色的successfully字样
最终会在 out/target/product/generic_x86/目录生成了三个重要的镜像文件: system.img、userdata.img、ramdisk.img。

六 . 源码单编

比如我们要编译系统的Settings应用模块,
在AOSP根目录执行:

source build/envsetup.sh
lunch 5

进入Settings的目录:

cd packages/apps/Settings

mm编译当前目录下的模块,不编译依赖模块:

mm

最后编译成功会显示绿色的successfully字样
最终会生成Settings.odex文件,还会在out/target/product/generic_x86/system/priv-app/Settings目录下生成Settings.apk。

最后,啦啦啦,九九八十一难,总算编译成功啦。但是安装我这个流程来下载和编译,中途肯定会遇到一些小错误的,这里小伙伴们自行在网上找原因~ ~ ~

你可能感兴趣的:(Android,framework,从入门到跑路)