Android 5.0 を搭載する新しいデバイスでは、ブロックベースの無線(OTA)アップデートを有効にできます。OTA とは、OEM がリモートでデバイスの system パーティションをアップデートするメカニズムです。
- Android 5.0 以降のバージョンはブロック OTA アップデートを使用して、各デバイスが完全に同じパーティションを使用するようにします。個々のファイルを比較してバイナリパッチを算出する代わりに、ブロック OTA はパーティション全体を 1 つのファイルとして処理して 1 つのバイナリパッチを算出し、結果としてパーティションに完全に意図したとおりのデータを含むようにします。これにより、fastboot や OTA を使用してデバイスのシステム イメージを同じ状態にできます。
- Android 4.4 以前のバージョンではファイル OTA アップデートを使用していました。これにより、デバイスに同様のファイル内容、権限、モードが含まれますが、タイムスタンプや基盤となるストレージのレイアウトなどのメタデータをアップデート メソッドに基いてデバイス間で変えることが可能でした。
ブロック OTA では各デバイスが同じパーティションを使用するため、dm-verity を使用して system パーティションに暗号署名をすることができます。 dm-verity の詳細については、確認付きブートをご覧ください。
注: dm-verity を使用する前に、稼働中のブロック OTA システムが必要です。
推奨事項
Android 5.0 以降でリリースするデバイスの場合は、工場出荷時の ROM でブロック OTA アップデートを使用します。後続の更新でブロックベース OTA を生成するには、--block
オプションを ota_from_target_files
に渡します。
Android 4.4 以前でリリースしたデバイスの場合は、ファイル OTA アップデートを使用します。Android 5.0 以降のフルブロック OTA を送信することでデバイスを移行することも可能ですが、増分 OTA よりも大幅に大きいフル OTA を送信する必要があるため、行わないようにしてください。
dm-verity は、Android 5.0 以降で出荷される新しいデバイスでのみサポートされるブートローダーが必要なため、既存のデバイスでは dm-verity を有効にできません。
リカバリ イメージと OTA を生成するスクリプトである Android OTA システムを開発しているデベロッパーは、android-ota@googlegroups.com のメーリング リストに登録して、変更についての最新情報をチェックできます。
ファイル OTA とブロック OTA
ファイルベースの OTA では、Android はファイル システム レイヤの system パーティションの内容をファイルごとに変更しようとします。アップデートでは、ファイルを一貫した順序で書き込むことや、最終更新時刻やスーパーブロックを一貫して保つこと、ブロック デバイスの同じ場所にブロックを配置することもできません。このため、dm-verity を有効にしたデバイスではファイルベースの OTA が失敗します。OTA の試行後、デバイスは起動しません。
ブロックベースの OTA の際に、Android はデバイスに、2 つのファイルセットではなく 2 つのブロック イメージの差分を配信します。この更新では、ファイル システムの下にあるブロックレベルの対応するビルドサーバーに対して、次のいずれかの方法でデバイスビルドをチェックします。
- フル アップデート。システム イメージ全体を簡単にコピーできるため、パッチを簡単に作成できます。ただし生成されるイメージが大きくなり、パッチの適用にコストが掛かります。
- 増分アップデート。バイナリ差分ツールを使用すると、イメージが小さくなり、パッチ適用が簡単になりますが、パッチ自体を生成するときにメモリが大量に消費されます。
注:adb fastboot
フル OTA とまったく同じビットをデバイスに配置します。したがって、フラッシュはブロック OTA と互換性があります。
未修正の system のアップデート
未修正の system パーティションがあり Android 5.0 を実行しているデバイスの場合、ブロック OTA のダウンロードとインストールのプロセスは、ファイル OTA の場合と同じです。ただし、OTA アップデート自体には、次のような相違点があります。
-
ダウンロード サイズ。
フルブロック OTA アップデートは、フルファイル OTA アップデートとほぼ同じサイズで、増分アップデートはわずか数メガバイト大きいだけです。
通常、増分ブロック OTA アップデートは、増分ファイル OTA アップデートよりも大きくなります。
- データの保存。ブロックベース OTA は、ファイルベース OTA よりも多くのデータ(ファイル メタデータ、dm-verity データ、ext4 レイアウトなど)を保持します。
- 計算アルゴリズムの違い。ファイル OTA アップデートでは、ファイルパスが両方のビルドで同一である場合、OTA パッケージにはそのファイルのデータは含まれません。ブロック OTA アップデートでは、パッチの計算アルゴリズムの品質と、ソースシステムとターゲット システムの両方でのファイルデータのレイアウトによって、ファイルの変更はほとんどしないか、まったく行わないかを判断します。
- フラッシュ メモリと RAM の欠陥に対する感度。ファイルが破損している場合、ファイル OTA は破損したファイルにはアクセスしない限り成功しますが、ブロック OTA は system パーティション内に破損を検出すると失敗します。
修正済みの system のアップデート
修正済みの system パーティションがあり、Android 5.0 を実行しているデバイスの場合、次のようになります。
-
増分ブロック OTA アップデートが失敗する。system パーティションは、
adb remount
または不正なソフトウェアが原因で修正される可能性があります。ファイル OTA は、ソースビルドやターゲット ビルドに含まれないファイルの追加など、パーティションへの変更を許容します。ただし、ブロック OTA はパーティションへの追加を許容しないため、フル OTA をインストールして system パーティションの変更を上書きするか、新しいシステム イメージをフラッシュして将来の OTA を有効にします。 - 修正済みファイルを変更しようとしまたが失敗する。ファイル OTA アップデートとブロック OTA アップデートの両方で、OTA が修正済みファイルを変更しようとすると、OTA アップデートは失敗します。
- 修正済みファイルにアクセスしようとするとエラーが発生する (dm-verity のみ)。ファイル OTA アップデートとブロック OTA アップデートの両方で、dm-verity が有効な場合に、OTA がシステムのファイル システムの修正部分にアクセスしようとすると、OTA はエラーを生成します。