Android AOSP 下载和编译

Android AOSP 下载和编译

欢迎入群交流

效果图
环境

链接:

https://source.android.google.cn/docs/setup/build/initializing?hl=zh-cn

Ubuntu:18.04 (64 位版本)

sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig openjdk-8-jdk rsync vim python python3 lsof -y

源码控制工具

链接:

https://source.android.google.cn/docs/setup/develop

Repo

一种对 Git 构成补充的 Google 代码库管理工具,整合多个Git仓库,Repo 启动器会提供一个 Python 脚本,该脚本可以初始化检出,并可以下载第二部分,即完整的 Repo 工具。完整的 Repo 工具包含在 Android 源代码检出中。该工具默认位于 $SRCDIR/.repo/repo/... 中,它可以从下载的 Repo 启动器接收转发的命令。

安装Repo

Linux 发行版中的官方软件包

sudo apt-get update
sudo apt-get install repo

如果通过上述命令无法安装,使用以下命令手动安装Repo

创建一个repo文件临时目录
export REPO=$(/home/taxiao/repo/repo)
curl -o ${REPO} https://storage.googleapis.com/git-repo-downloads/repo
gpg --recv-key 8BB9AD793E8E6153AF0F9A4416530D5E920F5C65
curl -s https://storage.googleapis.com/git-repo-downloads/repo.asc | gpg --verify - ${REPO} && install -m 755 ${REPO} /usr/bin/repo

完成后执行

查看版本
repo version
Gerrit

一个基于网页的代码审核系统,适用于使用 Git 的项目。Gerrit 允许所有授权用户提交更改(如果这些更改通过代码审核,便会自动纳入到项目中)

下载源代码

Google镜像链接:

https://source.android.google.cn/docs/setup/build/downloading

清华镜像链接:

https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

  • 创建一个空目录存放

  • 如需使用 Gerrit ,需要关联电子邮件

git config --global user.name Your Name
git config --global user.email you@example.com
  • repo init

运行 repo init 获取最新版本的 Repo 及其最新的 bug 修复

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

查看build版本,分支和支持的设备

https://source.android.google.cn/docs/setup/start/build-numbers#source-code-tags-and-builds

OPM4.171019.021.P1android-8.1.0_r38OreoPixel、Pixel XL2018-07-05

下载指定的分支,请使用 -b 指定此分支

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

初始化成功后,客户端目录现在包含一个 .repo 目录,这是清单等文件的存放位置。

如果init的时候未指定分支名称,在代码下载完成后,可以通过命令repo start android-8.0.0_r38 --all切换分支

如需将 Android 源代码树从默认清单中指定的代码库下载到工作目录,请运行以下命令:

repo sync

如需加快同步速度,请传递 -c(当前分支)和 -j threadcount 标记:

repo sync -c -j18
nohup repo sync -j18 >sync.log 2>&1 & #推荐:后台去同步

在这里插入图片描述

同步成功后的代码目录

在这里插入图片描述

下载驱动

https://developers.google.cn/android/drivers#marlinopm4.171019.021.p1

在这里插入图片描述

下载完对应的驱动,并将压缩包放入已经下载好的源码根目录,解压后得到两个脚本文件

extract-google_devices-sailfish.sh
extract-qcom-sailfish.sh

从源代码树的根目录运行附带的自解压脚本,然后确认您同意附带的许可协议的条款。二进制文件及其对应的 makefile 将会安装在源代码树的 vendor/ 层次结构中

清理

为了确保新安装的二进制文件在解压后能被有效采用,请使用以下命令删除所有之前 build 的已有输出:

make clobber

链接:

https://source.android.com/source/building-kernels?hl=zh-cn

在这里插入图片描述

在这里插入图片描述

编译Android

链接:

https://source.android.google.cn/docs/setup/build/building?hl=zh-cn

设置环境

使用 envsetup.sh 脚本初始化环境:

source build/envsetup.sh

. build/envsetup.sh

envsetup.sh 脚本会导入若干命令,让您能够使用 Android 源代码,其中包括本练习中使用的命令。

如需查看可用命令的完整列表,请运行以下命令:

 hmm

在这里插入图片描述

选择目标

lunch 

在这里插入图片描述

m -j48 

nohup make -j 60 >>123.log 2>&1 & #推荐这个命令,后台运行。

如上所述,您可以通过在 m 命令行中列出相应名称来构建特定模块,而不是构建完整的设备映像。此外,m 还针对各种特殊目的提供了一些伪目标。以下是一些示例:

  • droid - m droid 是正常 build。此目标在此处,因为默认目标需要名称。
  • all - m all 会构建 m droid 构建的所有内容,加上不包含 droid 标记的所有内容。构建服务器会运行此命令,以确保包含在树中且包含 Android.mk 文件的所有元素都会构建。
  • m - 从树的顶部运行构建系统。这很有用,因为您可以在子目录中运行 make。如果您设置了 TOP 环境变量,它便会使用此变量。如果您未设置此变量,它便会从当前目录中查找相应的树,以尝试找到树的顶层。您可以通过运行不包含参数的 m 来构建整个源代码树,也可以通过指定相应名称来构建特定目标。
  • mma - 构建当前目录中的所有模块及其依赖项。
  • mmma - 构建提供的目录中的所有模块及其依赖项。
  • croot - cd 到树顶部。
  • clean - m clean 会删除此配置的所有输出和中间文件。此内容与 rm -rf out/ 相同。

运行 m help 即可查看 m 提供的其他伪目标。

在这里插入图片描述

编译遇到的问题
  • 问题一:

[ 28% 1127/3932] Ensuring Jack server is installed and started
FAILED: setup-jack-server

在这里插入图片描述

在这里插入图片描述

解决办法

修改端口号未解决问题,修改了/etc/java-8-openjdk/security/java.security 文件后又还原正常

Remove TLSv1, TLSv1.1 from jdk.tls.disabledAlgorithms in /etc/java-8-openjdk/security/java.security file
Restart the jack server: cd /prebuilts/sdk/tools/ ./jack-admin kill-server ./jack-admin start-server

在这里插入图片描述

  • 问题二:
[  3% 3041/91628] build out/target/common/obj/JAVA_LIBRARIES/apptoolkit-lifecycle-runtime_intermediates/classes.jack
FAILED: out/target/common/obj/JAVA_LIBRARIES/apptoolkit-lifecycle-runtime_intermediates/classes.jack 
/bin/bash -c "(mkdir -p out/target/common/obj/JAVA_LIBRARIES/apptoolkit-lifecycle-runtime_intermediates/classes.jack.tmpjill.res ) && (unzip -qo out/target/common/obj/JAVA_LIBRARIES/apptoolkit-lifecycle-runtime_intermediates/aar/classes.jar -d out/target/common/obj/JAVA_LIBRARIES/apptoolkit-lifecycle-runtime_intermediates/classes.jack.tmpjill.res ) && (find out/target/common/obj/JAVA_LIBRARIES/apptoolkit-lifecycle-runtime_intermediates/classes.jack.tmpjill.res -iname \"*.class\" -delete ) && (JACK_VERSION=4.32.CANDIDATE out/host/linux-x86/bin/jack @build/core/jack-default.args    -D jack.import.resource.policy=keep-first -D jack.import.type.policy=keep-first -D jack.android.min-api-level=1 --import out/target/common/obj/JAVA_LIBRARIES/apptoolkit-lifecycle-runtime_intermediates/aar/classes.jar --import-resource out/target/common/obj/JAVA_LIBRARIES/apptoolkit-lifecycle-runtime_intermediates/classes.jack.tmpjill.res --output-jack 
out/target/common/obj/JAVA_LIBRARIES/apptoolkit-lifecycle-runtime_intermediates/classes.jack ) && (rm -rf out/target/common/obj/JAVA_LIBRARIES/apptoolkit-lifecycle-runtime_intermediates/classes.jack.tmpjill.res )"
out/host/linux-x86/bin/jack: line 80: USER: unbound variable

解决办法

这是由于docker没有设置USER环境变量导致,手动添加后继续编译即可

export USER=$(whoami) 
刷机

(out/target/product/marlin)下载下列文件 ,设置环境变量后刷机

  1. android-info.txt
  2. boot.img
  3. ramdisk-recovery.img
  4. ramdisk.img
  5. system_other.img
  6. system.img
  7. userdata.img
  8. vendor.img
export ANDROID_PRODUCT_OUT=/Users/hanqq/Documents/taxiao/google\room /Android8/room/image

adb reboot bootloader

fastboot flashall -w
Docker 依赖环境

镜像是基于ubuntu 18.04

下载镜像

docker pull yin13753884368/android_aosp:android_8.1

启动

docker run -itd --name google_aosp -v /home/android_8.1_aosp:/home/android_8.1_aosp yin13753884368/android_aosp:android_8.1 /bin/bash

-v :映射下载的Android源码路径

微信公众号(他晓),关注并转发,谢谢

效果图
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值