Building7 min read

AOSP — Androidプラットフォームの実装と実機検証

Pixel 4 XLとi.MX 8M Plusで、Androidのビルドから特権アプリ、自作HAL、センサー、SystemUI、遅延・電力計測、署名済みROMの生成まで取り組んだプロジェクト。

AOSPAIDLC++JavaSELinuxPerfettoRRO
AOSP — Androidプラットフォームの実装と実機検証

何を目指したか

Androidアプリだけでなく、その下で動くフレームワーク、HAL、セキュリティ、ビルドと配布の仕組みまで理解するためのプロジェクトです。スマートグラス開発に応用できるよう、実装した機能を実機の画面・ログ・数値で確かめました。

最初はPixel 4 XL(coral)とAOSP 12.1を使い、その後i.MX 8M Plusの評価ボードでAndroid 16と独自センサーHALに取り組みました。以下は2026年9月の作業記録に基づく成果です。

ビルドとOSのカスタマイズ

  • AOSPをソースからビルドし、Pixel 4 XLで起動を確認。
  • ブートアニメーション、ステータスバーの電池温度表示、自動回転の設定を変更。
  • 特権アプリHomeProbeを実装し、権限allowlist、Device Owner、機能制限、ホームアプリの選択を検証。
  • プリビルトAPKをOSに組み込む受け渡し方法を検証。
  • RROによるProbeThemeを制作し、フォント、アイコン、ロック画面・AODのドット時計、クイック設定などを変更。

特権アプリの権限設定不足によるブートループや、Bluetoothプロファイル変更による不具合も切り分け、復旧方法と確認手順を記録しました。

自作HALとカスタムセンサー

VINTF安定AIDLのインターフェースを定義し、C++のvendor HAL、init設定、専用SELinuxドメイン、アプリ側の呼び出しを実装しました。SELinux Enforcingの状態で、アプリから値を書き込み、同じ値を読み出すBinder通信を確認しています。

さらにSensorsのsub-HALを実装し、Androidが認識するセンサーを37個から38個に増やしました。アプリのSensorManagerから独自センサーを取得し、FIFOとバッチングの挙動も比較しました。

計測項目記録した結果条件・範囲
自作センサーのHAL → アプリ平均0.52ms200Hz、3秒間・587件
実機加速度計 → アプリ平均5.56ms自作センサーと同条件で比較
バッチング時のHAL → アプリ平均49.71msFIFO実装後、最大通知遅延100msの要求
CTSセンサーテスト340 pass / 0 failCtsSensorTestCasesをinstrumentationで実行

CTSの結果はセンサーテストの実行範囲です。CTS全体の合格やAndroid互換性認証を示すものではありません。

表示・カメラ・電力を測る

表示の描画時間とキュー待ち、カメラの露光から画素取得までの遅延、熱制御、表示状態による電力差を測定しました。HUD表示については、Accessibility Overlayの重なり方も実機で検証しています。

Perfettoと自作HAL・アプリのATraceを使い、センサーの連番を共通のタイムラインで追える計測基盤を作りました。時計の基準が揃っているかも取得中に確認し、異なる観測点を結び付けて分析しました。

ジャイロの記録を使った等速外挿では、16ms先の回転予測のp95誤差が3.913°から0.874°になりました。一方、80ms先ではp95誤差が悪化しました。この記録でのオフライン評価であり、表示込みのARシステムの精度を保証する結果ではありません。

AODや黒地・白地の画面についても電力を比較しました。端末内部のUSB入力電圧・電流から求めた測定値として扱い、外部電力計での評価とは区別しています。

署名済みROMとOTAの生成

自作鍵でtarget-filesを再署名し、OTAパッケージを生成しました。APK署名だけでなく、OTA検証鍵とAVB公開鍵の差し替えを確認し、正しい鍵では通り、異なる鍵では落ちる対照実験を実施しました。

ProbeThemeをイメージに組み込む際には、Pixelのvendorがプリビルトであることから、RROの配置先をproduct側に変更しました。実機へのファイル配置で動く状態と、生成イメージに含まれる状態を分けて確認した点も成果です。

署名済みイメージ全体の実機フラッシュ・OTA適用は未実施です。実機で確認したテーマは、生成成果物から取り出したファイルを配置したものです。また、APEX 42個の鍵はAOSPの公開鍵のままで、製品出荷用の署名構成として完了した状態ではありません。

i.MX 8M Plusへの展開

評価ボードでAndroid 16の自前ビルドを起動し、ICM-42688-P向けのsensors HALを組み込みました。加速度・ジャイロの2つがセンサーフレームワークに認識され、画面回転判定や伏せ検知のシステムサービスが購読することをログで確認しています。

SPIデバイスの所有権、SELinuxラベル、HALからSPIに到達する経路も確認しました。ただし、この段階ではIMU部品が未到着です。物理センサーの実データ取得や8kHzでの動作を検証したものではありません。

この取り組みで得たこと

アプリ、フレームワーク、HAL、ドライバのどこに変更を置くかを判断し、権限やSELinuxを含めて実機までつなげる経験を積みました。画面が変わるだけでなく、遅延、消費電力、署名、成果物への組み込みをそれぞれ確かめる手順を残しています。

ソースリポジトリは非公開です。このページでは取り組みの概要と、記録で確認できた成果・未検証の範囲を紹介しています。