You need to enable JavaScript to run this app.
导航

构建自定义镜像

最近更新时间2023.12.14 21:28:01

首次发布时间2023.06.28 21:07:13

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

前提条件

  1. 已申请开通云手机-云原生PaaS服务,并购买云手机实例资源。详细信息,参考 资源管理

  2. 当前已支持的版本:AOSP 10;

  3. 代码遵循 Apache 开源协议;

  4. 代码编译产物仅支持在火山引擎云手机实例运行,无法在其他本地安卓设备上使用。

编译服务器配置建议

  • CPU:I7 8代以上

  • 内存:32G

  • 硬盘:500G 以上,建议 SSD

  • 网络:100mbps 以上外网访问速度

  • 操作系统:Ubuntu 20.04 AMD64

开启自定义镜像服务

构建自定义镜像前,需要通过云手机控制台配置下载和编译 AOSP 镜像基线代码的服务器的公网 IP和服务器的 SSH 密钥对。

新增访问 IP 白名单

  1. 打开 导入自定义镜像 页面,在 访问IP白名单 标签页下,点击 新增IP白名单

  2. 新增访问IP白名单 弹窗中,填写加白的服务器 IP 地址(可通过 curl ifconfig.me 获取)和描述信息。

  3. 点击 确定,保存配置。

创建 SSH 密钥对

构建自定义镜像前,需要配置下载和编译 AOSP 镜像基线代码的服务器的 SSH 密钥对。

  1. 打开 导入自定义镜像 页面,在 SSH****密钥对 标签页下,点击 创建SSH密钥对

  2. 创建SSH密钥对 弹窗中,填写密钥对名称、选择自动创建密钥对或导入已有公钥(可通过 cat ~/.ssh/id_rsa.pub 获取)、选择密钥对类型、输入密钥对的描述信息。

  3. 点击 确定,创建 SSH 密钥对,并下载保存生成的私钥。

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 代码

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

说明

由于 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

源码编译

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

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

说明

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

  1. 创建文件 build.sh,内容如下:
source build/envsetup.sh
lunch gemini-user
make -j8 WITH_GS=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. 调用云手机的 镜像构建(ImportContainerImage) 接口或者在云手机控制台页面上传构建的自定义镜像。

常见问题

代码下载失败

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