赞
踩
欢迎入群交流
链接:
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
一种对 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
一个基于网页的代码审核系统,适用于使用 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 及其最新的 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.P1 | android-8.1.0_r38 | Oreo | Pixel、Pixel XL | 2018-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
链接:
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)下载下列文件 ,设置环境变量后刷机
export ANDROID_PRODUCT_OUT=/Users/hanqq/Documents/taxiao/google\room /Android8/room/image
adb reboot bootloader
fastboot flashall -w
镜像是基于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源码路径
微信公众号(他晓),关注并转发,谢谢
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。