Androidアプリは、同一コードベースから次の2種類のProduct Flavorをビルドする。
| Flavor | 用途 | 端末の扱い | 起動方式 |
|---|---|---|---|
standard |
普段使いと兼用するタブレット | 通常のAndroid端末として維持 | 利用者が通常起動。必要なら端末起動後に通知で起動を案内 |
dedicated |
トラクター等の専用端末 | Device Ownerとして管理する専用端末 | カスタムHomeとして電源投入後に自動表示し、必要に応じてLock Task modeを使う |
地図、NMEA解析、Bluetooth接続、状態管理、診断、設定の中核機能は共通実装とする。Flavor固有実装は起動・端末管理・専用端末UIに限定する。
P3フェーズ3Aの実機検証では、HyperOSの自動起動権限をONにし、アプリをstopped stateから解除した状態ならBOOT_COMPLETEDは受信できた。しかし、BroadcastReceiverからstartActivity()を呼んでもAndroidのバックグラウンドActivity起動制限により、タスクが作られるだけで画面前面には表示されなかった。
フルスクリーンIntentはAndroid 14以降、通話・アラーム用途を主対象とする制限があるため、本アプリの常時自動表示には採用しない。手動操作なしの起動が必要なトラクター運用では、AndroidのDedicated Device機能を使い、アプリをカスタムHomeとして構成する。
一方、トラクター以外ではタブレットを他用途にも使うため、すべての利用者をDevice Owner/キオスク運用へ固定しない。
app/src/main/ 共通機能
app/src/standard/ 通常ランチャー、必要に応じた起動案内通知
app/src/dedicated/ DeviceAdminReceiver、HOME intent、Lock Task連携
GradleのproductFlavorsで、少なくとも次を分離する。
applicationIdSuffixまたは正式なapplication IDHOME categoryとDevice Admin関連component想定成果物:
app-standard-debug.apk
app-dedicated-debug.apk
app-standard-release.apk
app-dedicated-release.apk
アプリ画面の設定だけでstandardとdedicatedを切り替えない。Device Owner化は通常の設定値ではなく、端末のプロビジョニングを伴う管理操作だからである。
standard: 通常インストールで利用するdedicated: 専用端末として初期セットアップし、Device Ownerを設定するdocs/procedures/へ用意することstandard版にはHOME intentやDevice Admin componentが混入しないこと専用端末のプロビジョニングは端末状態を大きく変更するため、製品実装とは別の検証trackで先に最小確認する。