Android源码下载编译

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ygc973797893/article/details/89308796

Android 源码编译的四个流程:

1.源码下载,2.构建编译环境,3.编译源码,4.运行
我这里的环境是ubuntu16.04(64位),android版本是8.1.0,空间至少150G(注意)

源码下载

众周所知由于谷歌被墙,所以我们这里采用国内的镜像进行下载,我们这里选择清华镜像源

下载Repo工具,AOSP使用Repo工具对源代码进行管理,是一种对Git构成补充的Google代码库管理工具

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

创建源码存放文件夹,后面所有的下载源码和编译都放这里。

mkdir aosp
cd aosp

配置git

git config --global user.name "Your Name"
git config --global user.email "[email protected]"

运行repo init初始化仓库,必须指定一个网址,该网址用于指定 Android 源代码中包含的各个代码库将位于工作目录中的什么位置。

repo init -u https://android.googlesource.com/platform/manifest

要检出“master”以外的分支,请使用 -b 指定相应分支。要查看分支列表

repo init -u https://android.googlesource.com/platform/manifest -b android-8.1.0_r52

初始化仓库之后,就可以正式同步代码到本地了,

repo sync

中间可能会中断几次,使用该命令继续同步即可。6,7个小时应该就是同步完成了,一定要确认代码同步晚上,不能有error,要不然编译会有一些莫名其妙的问题。

构建编译环境

安装编译所需要的依赖库

sudo apt update

sudo apt 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 openjdk-8-jdk

初始化编译环境

source build/envsetup.sh

选择编译目标

lunch 

输入相对应的数字即可,我们这里输入 2

所有编译目标都采用 BUILD-BUILDTYPE 形式,其中 BUILD 是表示特定功能组合的代号。BUILDTYPE 是以下类型之一:

编译类型 说明
user 权限受限;适用于生产环境
userdebug 与“user”类似,但具有 root 权限和可调试性;是进行调试时的首选编译类型
eng 具有额外调试工具的开发配置

因为我们这边编译的是8.1版本,默认使用的是jack,Jack 是 Android 6.0 - 8.1 的默认 Android 编译工具链。这里还需要设置一下JACK_SERVER_VM_ARGUMENTS,不然可能会报 Out of memory error

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

开始编译源码

使用make指令进行代码编译,可以借助 -jN 参数处理并行任务,通常使用的任务数 N 介于编译时所用计算机上硬件线程数的 1-2 倍之间,

make -j8 

运行Android模拟器

emulator

如果报错,配置一下环境

export PATH=$PATH:/aosp/out/host/linux-x86/bin
export ANDROID_PRODUCT_OUT=/aosp/out/target/product/generic
emulator

切换Android版本

rm -rf .repo/manifest*
repo init repo init -u https://android.googlesource.com/platform/manifest -b android-9.0.0_r22
repo sync

猜你喜欢

转载自blog.csdn.net/ygc973797893/article/details/89308796