カスタム デバイス開発

このページでは、自分のデバイス用にビルドを設定する場合に実行する必要があるタスクについて説明します。

カスタムのフラッシュ構成を作成する

fastboot の手順は fastboot-info.txt というアーティファクトで定義されています。複数のターゲットをビルドする場合、$OUT_DIR 内に複数の fastboot-info.txt ファイルがあり、$ANDROID_PRODUCT_OUT は直近でビルドしたターゲットを指しています。このページには、fastboot の実行タスクの一覧が記載されています。これは m fastboot_info を使用して再生成できます。fastboot-info.txt ファイルを変更することで、カスタムのフラッシュ ロジックを導入できます。

fastboot-info.txt ファイルは次のコマンドをサポートしています。

  • flash %s: 指定されたパーティションをフラッシュします。オプションの引数には --slot-other,filename_path, and--apply-vbmeta` が含まれます。
  • update-super: スーパー パーティションを更新します。
  • if-wipe: ワイプが指定されている場合に、条件付きでその他のコンポーネントを実行します。
  • erase %s: 指定されたパーティションを消去します(if-wipe と組み合わせてのみ使用可能 -> 例: if-wipe erase cache)。

フラッシュ ロック状態を判断する

デバイス用にカスタムの flashboot デーモン(flashbootd)をビルドする場合、ブートローダーとそのロック状態を取得できる必要があります。getFlashLockState() @SystemApi は、ブートローダーの状態を送信し、PersistentDataBlockManager.getFlashLockState() システム API は、対応デバイスのブートローダーのロック ステータスを返します。

戻り値 条件
FLASH_LOCK_UNKNOWN 以前はブートローダー変更機能をサポートしていなかったデバイスを Android 7.x 以降にアップグレードしたことで、フラッシュ ロック / ロック解除機能をサポートするようになった場合に限り返されます。ブートローダー変更機能は、フラッシュ ロック ステータスを取得するうえで必要になります。
  • 元々 Android 7.x 以降を搭載している新しいデバイスの場合、FLASH_LOCK_LOCKEDFLASH_LOCK_UNLOCKED の状態になっている必要があります。
  • Android 7.x 以降にアップグレードしたデバイスで、アップグレード後もフラッシュ ロック / ロック解除機能をサポートしていない場合は、FLASH_LOCK_LOCKED 状態が返されます。
FLASH_LOCK_LOCKED フラッシュ ロック / ロック解除機能をサポートしていないデバイス(つまり、常にロックされているデバイス)の場合や、フラッシュ ロック / ロック解除機能をサポートしていて、ロック状態にあるデバイスの場合に返されます。
FLASH_LOCK_UNLOCKED フラッシュ ロック / ロック解除機能をサポートしていて、ロック解除状態にあるデバイスの場合に返されます。

メーカーは、ブートローダーがロック状態の場合とロック解除状態の場合にそれぞれデバイスから返される値をテストする必要があります。たとえば、AOSP には、ro.boot.flash.locked ブート プロパティに基づいて値を返すリファレンス実装が用意されています。サンプルコードは、以下のディレクトリにあります。

  • frameworks/base/services/core/java/com/android/server/PersistentDataBlockService.java
  • frameworks/base/core/java/android/service/persistentdata/PersistentDataBlockManager.java