You need to enable JavaScript to run this app.
导航
构建自定义镜像(面向开发者)
最近更新时间:2024.04.25 21:24:26首次发布时间:2022.10.10 16:38:07

火山引擎云手机支持用户基于平台提供的 AOSP 镜像基线版本构建自定义镜像。构建的自定义镜像可通过云手机控制台上传使用。本文介绍开发者如何开启镜像服务并快速构建自定义镜像。

前提条件
  1. 已申请开通云手机-iPaaS服务,并购买云手机。详细信息,参考 购买云手机
  2. 当前已支持的版本:AOSP 10、AOSP 11;
  3. 代码遵循 Apache 开源协议;
  4. 代码编译产物仅支持在火山引擎云手机实例运行,无法在其他本地安卓设备上使用。

编译服务器配置建议

  • CPU:I7 8代以上
  • 内存:32G
  • 硬盘:500G 以上,建议 SSD
  • 网络:100mbps 以上外网访问速度
  • 操作系统:Ubuntu 20.04 AMD64

开启自定义镜像服务

通过以下步骤,开启和配置自定义镜像服务。

  1. 打开火山引擎云手机控制台「镜像管理」页面。在「自定义镜像」标签页下,点击 立即启用

  2. 在「启用镜像管理」弹窗中,填写用于下载和编译 AOSP 代码的服务器的密钥对配置信息和公网 IP、选择 AOSP 版本后,点击 确定,开通自定义镜像服务。

    • 密钥对名称:输入自定义密钥对名称
    • 公钥内容:输入下载和编译 AOSP 代码服务器的公钥,可通过 cat ~/.ssh/id_rsa.pub 获取
    • 公网 IP:输入下载和编译 AOSP 代码服务器的公网 IP,可通过 curl ifconfig.me 获取
    • AOSP 版本:选择需要的 AOSP 版本(目前可选 AOSP10 或 AOSP11)

AOSP 代码下载

安装下载工具

Git

sudo apt-get install git
# 设置全局用户名
git config --global user.name "your name"
# 设置邮箱
git config --global user.email "your email"

repo

# Debian/Ubuntu.
$ sudo apt-get install repo
$ mkdir -p ~/bin
$ export PATH="${HOME}/bin:${PATH}"
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+rx ~/bin/repo

下载 AOSP 代码

下载 AOSP 10 代码

mkdir aosp10
cd aosp10
export REPO_URL=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo //如无法访问Google,可使用国内清华的git-repo替代
repo init -b master -u ssh://git@gitlab.aic-misc.volces.com/byteOS/aosp_manifest -m aosp_common/aosp10_default.xml
repo sync
repo start master --all

下载 AOSP 11 代码

mkdir aosp11
cd aosp11
export REPO_URL=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo //如无法访问Google,可使用国内清华的git-repo替代
repo init -b master -u ssh://git@gitlab.aic-misc.volces.com/byteOS/aosp_manifest -m aosp_common/aosp11_default.xml
repo sync
repo start master --all

说明

由于 sync 时间较长,建议在后台同步。

nohup  repo sync 1>sync.log 2>&1 &
更新 AOSP 代码

如果本地 master 没有改动

repo sync

如果本地 master 有改动

说明

可将 mergebranch 替换为任何一个新的分支名,用于暂存远程最新代码。

repo start mergebranch --all //启动一个新分支mergebranch
repo sync //在新分支上同步代码
repo checkout master --all //切回开发分支master
repo forall -c git rebase mergebranch //将新代码rebase到master
repo abandon mergebranch --all //禁用暂存分支mergebranch
代码编译

依赖安装

//安装工具链
apt-get update
apt-get install -y locales patch diffstat gawk chrpath curl wget python \
    make rpm2cpio sudo mtd-utils vim cmake openjdk-8-jdk unzip zip bison \
    squashfs-tools bc lzop cpio libxml2-utils texinfo git gcc g++ \
    libc6-i386 lib32stdc++6 lib32gcc1 python-mako python-enum34 \
    gettext libssl-dev kmod python3 rsync pigz libxml-simple-perl \
    libncurses5 libncurses5:i386

源码编译

AOSP 10

在代码根目录下执行命令:

source build/envsetup.sh
lunch gemini-user
make -j8 BUILD_WITH_AGENT=true

说明

编译时间较长,建议在后台编译。

  1. 创建文件 build.sh,内容如下:
source build/envsetup.sh
lunch gemini-user
make -j8 BUILD_WITH_AGENT=true
  1. 编译:
nohup bash build.sh 1>build.log 2>&1 &

AOSP 11

在代码根目录下执行命令:

source build/envsetup.sh
lunch gemini-userdebug
make -j8 BUILD_WITH_AGENT=true

说明

编译时间较长,建议在后台编译。

  1. 创建文件 build.sh,内容如下:
source build/envsetup.sh
lunch gemini-userdebug
make -j8 BUILD_WITH_AGENT=true
  1. 编译:
nohup bash build.sh 1>build.log 2>&1 &

编译产物

  1. 编译生成的镜像为 out/target/product/gemini 目录下 system.imgvendor.img

  2. system.imgvendor.img 文件上传到火山引擎账号下的对象存储 TOS 的 bucket 中(可参考 TOS 的使用方法)。

  3. 调用云手机的导入镜像接口或者在云手机控制台页面上传构建的自定义镜像。

常见问题

代码下载失败

可能原因:Python 版本问题,需要安装 Python 3.7。