Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

Dynamic System Updates

Dynamic System Updates(DSU)を使用すると、Android システム イメージをインターネットからダウンロードして、現在のシステム イメージを破損する心配なく試すことができます。このドキュメントでは、DSU をサポートする方法について説明します。

カーネルの要件

カーネルの要件については、動的パーティションの実装をご覧ください。

また、DSU は device-mapper-verity(dm-verity)カーネル機能を使用して Android システム イメージを検証します。したがって、次のカーネル構成を有効にする必要があります。

  • CONFIG_DM_VERITY=y
  • CONFIG_DM_VERITY_FEC=y

パーティションの要件

インストールされたイメージに関連するデータを保存するには metadata パーティション(16 MB 以上)が必要です。第 1 ステージのマウントの時点でマウントする必要があります。

userdata パーティションで使用するファイル システムは、f2fs または ext4 である必要があります。f2fs を使用する場合、Android 共通カーネルにある f2fs 関連パッチをすべて含めます。

DSU は kernel/common 4.9 で開発およびテストされました。この機能には、カーネル 4.9 以降を使用することをおすすめします。

ベンダー HAL の動作

Weaver HAL

Weaver HAL は、ユーザーキーを格納するための固定数のスロットを提供します。DSU では、追加で 2 つのキースロットが必要です。OEM に Weaver HAL がある場合、汎用システム イメージ(GSI)とホストイメージに十分なスロットが必要です。

Gatekeeper HAL

Gatekeeper HAL は大きな USER_ID 値をサポートする必要があります。これは GSI が HAL への UID を +1000000 だけオフセットするためです。

起動の確認

ramdisk には Q-GSI、R-GSI、S-GSI の 3 つの GSI キーを含める必要があります。したがって、DSU を使用するか fstab 設定を変更すると、これらのキーを使用して GSI イメージを検証できます。

GSI キーを含めるには、device/<device_name>/device.mk ファイルに次の行を追加します。

$(call inherit-product, $(SRC_TARGET_DIR)/product/gsi_keys.mk)
    

ロールバック保護

DSU を使用する場合、ダウンロードした Android システム イメージは、デバイス上の現在のシステム イメージよりも新しいものである必要があります。具体的には、両方のシステム イメージの Android Verified Boot(AVB)AVB プロパティ記述子にあるセキュリティ パッチ レベルを次のように比較します。Prop: com.android.build.system.security_patch -> '2019-04-05'

AVB を使用しないデバイスの場合、現在のシステム イメージのセキュリティ パッチ レベルをブートローダー カーネルの cmdline に次のように追加します。androidboot.system.security_patch=2019-04-05

ハードウェア要件

DSU インスタンスを起動すると、次の 2 つの一時ファイルが割り当てられます。

  • GSI.img(1~1.5 G)を格納する論理パーティション
  • GSI を実行するためのサンドボックスとして 8 GB の空の /data パーティション

DSU インスタンスを起動する前に、10 GB 以上の空き領域を確保することをおすすめします。DSU は SD カードからの割り当てもサポートしています。SD カードが存在する場合、割り当ての優先度は最も高くなります。内部ストレージが十分にない低性能デバイスでは、SD カードのサポートが不可欠です。SD カードがある場合は、内部ストレージ化されていないことを確認します。DSU では、内部ストレージ化された SD カードはサポートされていません。

使用可能なフロントエンド

DSU は adb またはアプリを使用して起動できます。

adb を使用した DSU の起動

adb を使用して DSU を起動するには、次のコマンドを入力します。

$>simg2img out/target/product/.../system.img system.raw
    $>gzip -c system.raw > system.raw.gz
    $>adb push system.raw.gz /storage/emulated/0/Download
    $>adb shell am start-activity \
    -n com.android.dynsystem/com.android.dynsystem.VerificationActivity  \
    -a android.os.image.action.START_INSTALL    \
    -d file:///storage/emulated/0/Download/system.raw.gz  \
    --el KEY_SYSTEM_SIZE $(du -b system.raw|cut -f1)  \
    --el KEY_USERDATA_SIZE 8589934592
    

アプリを使用した DSU の起動

DSU への主なエントリ ポイントは、次の android.os.image.DynamicSystemClient.java API です。

public class DynamicSystemClient {

    ...
    ...

         /**
         * Start installing DynamicSystem from URL with default userdata size.
         *
         * @param systemUrl A network URL or a file URL to system image.
         * @param systemSize size of system image.
         */
        public void start(String systemUrl, long systemSize) {
            start(systemUrl, systemSize, DEFAULT_USERDATA_SIZE);
        }
    

このアプリはデバイスにバンドルまたはプレインストールする必要があります。DynamicSystemClient はシステム API のため、通常の SDK API を使用してアプリを作成することはできず、Play ストアでは公開できません。このアプリの目的は次のとおりです。

  1. ベンダー定義のスキームを使用してイメージリストと対応する URL を取得します。
  2. リスト内のイメージをデバイスと照合し、ユーザーが選択可能な互換性のあるイメージを表示します。
  3. 次のように DynamicSystemClient.start を呼び出します。

    DynamicSystemClient aot = new DynamicSystemClient(...)
           aot.start(
                ...URL of the selected image...,
                ...uncompressed size of the selected image...);
    
        

この URL は、gzip で圧縮された、スパース以外のシステム イメージ ファイルを指します。このファイルを作成するには、次のコマンドを組み合わせます。

$> simg2img ${OUT}/system.img ${OUT}/system.raw
    $> gzip ${OUT}/system.raw
    $> ls ${OUT}/system.raw.gz
    

ファイル名は次の形式にします。

<android version>.<lunch name>.<user defined title>.raw.gz
    

例:

  • o.aosp_taimen-userdebug.2018dev.raw.gz
  • p.aosp_taimen-userdebug.2018dev.raw.gz

フィーチャー トグル

DSU 機能は settings_dynamic_android フィーチャー トグルの下にあります。 DSU を使用する前に、対応するフィーチャー トグルが有効であることを確認してください。

フィーチャー トグルの有効化。

図 1. フィーチャー トグルの有効化

フィーチャー トグル UI は、ユーザービルドを実行しているデバイスでは使用できません。 この場合は代わりに adb コマンドを使用します。

adb shell setprop persist.sys.fflag.override.settings_dynamic_system 1
    

GCE 上のベンダーホスト システム イメージ(オプション)

システム イメージの格納場所の 1 つが Google Compute Engine(GCE)バケットです。リリース管理者は、GCP ストレージ コンソールを使用して、リリースされたシステム イメージを追加、削除、変更します。

イメージは次のように公開アクセスである必要があります。

GCE での公開アクセス

図 2. GCE での公開アクセス

項目を一般公開する手順はこちらをご覧ください。