この記事は、Android Enterprise Advent Calendar 2022の7日目の記事です。
バグレポート
バグレポートはAndroidに用意されたバグの解析を助ける機能で、すべてのデバイスで利用できる便利なものです。
取得方法はAndroid Studioの説明にあり、
取得のためには、設定アプリから開発者オプションを有効化する必要があります。
管理されたデバイス
今回、バグレポートを取得するAndroid Enterpriseで管理されたデバイスについて紹介です。
- 機種 : Pixel 6Pro
- OS Version : 13
- 所有者 : 個人
- 仕事用プロファイル : あり
仕事用プロファイルについて
Android Enterpriseで管理する手法の一つで、個人用と仕事用にデバイスの領域を分割します。
それぞれの領域にあるアプリケーションは完全に分断されており、個人で所有するデバイスをBYOD(Bring Your Own Device)の目的に使ったり、企業で所有するデバイスをナレッジワーカー向けに提供するために用いられます。
ランチャアプリケーションにもよりますが、仕事用プロファイルのアプリケーションにはカバンマークがついて表示されます。
以下は、個人用プロファイルと仕事用プロファイルの同じアプリケーションを並べています。
バグレポート取得実践
最初に説明した通り、まずは開発者向けオプションを有効化します。
設定アプリ > デバイス情報 > ビルド番号 を何度かタップすることで有効化されます。
(今回は既に有効化してるため、画像のようになっています)
物理ケーブルでadbコマンドを利用する場合は
設定アプリ > システム > 開発者オプション > USBデバッグ を有効
電源オプションのショートカットから取得する場合は
設定アプリ > システム > 開発者オプション > バグレポートのショートカット を有効
今回はADBコマンドでレポートを取得するためコンソールからコマンドを実行します。
% adb bugreport ./Downloads
デバイスからのバグレポートが取得完了すると指定したフォルダにコピーされます。
/data/user_de/0/com.android.shell/file.... 41.4 MB/s (10225666 bytes in 0.236s)
Bug report copied to ./Downloads/bugreport-raven-TP1A.220624.021-2022-12-07-18-09-31.zip
バグレポートは圧縮ファイルで、解凍するといくつかのファイルが生成されます。
バグレポートを見る
解凍されたバグレポートの中にある一番大きなファイルであるbugreport-****.txtを開きます。
OS情報
デバイスのOSバージョンなどの情報はBuild Fingerprint から確認します。
Build fingerprint: 'google/raven/raven:13/TP1A.220624.021/8877034:user/release-keys'
ここで注目するのは以下の2つでGoogleのraven(Pixel 6Pro)であり、Android 13のビルドはTP1A.220624.021であることがわかります。
- google/raven/raven:13
- TP1A.220624.021
これ以外にもOSバージョンだけであれば、ro.build.version.releaseでも確認できます。
[ro.build.version.release]: [13]
デバイス管理情報
デバイス管理の状態を見るにはDUMP OF SERVICE device_policyのセクションを確認します。
DUMP OF SERVICE device_policy:
次に、どのアプリケーションが特別な権限を持っているかはProfile Owner や Device Ownerのadminから確認できます。
ここで表示されているUser 10は、仕事用プロファイルのProfile Ownerであることを示しています。
User 0のある場合はプライマリユーザーであることを示します。
Profile Owner (User 10):
admin=ComponentInfo{com.clomo.android.mdm_dev/com.clomo.android.mdm.activity.DeviceAdminEventReceiver}
name=com.clomo.android.mdm_dev
package=com.clomo.android.mdm_dev
isOrganizationOwnedDevice=false
これらのパッケージがどのような制限をデバイスにかけているかは、Enabled Device Adminsの中から調べることができます。
一例ですが、disableCamera=trueからはカメラアプリケーションの禁止。
mPasswordComplexity=196608から仕事用プロファイルのパスワードポリシーが設定されており、複雑性がMediumになっています。
Enabled Device Admins (User 10, provisioningState: 3):
com.clomo.android.mdm_dev/com.clomo.android.mdm.activity.DeviceAdminEventReceiver:
(省略)
disableCamera=true
(省略)
mPasswordComplexity=196608
また、parent(プライマリユーザー)にかけた制限を確認することもできます。
デバイスのロックに影響するパスワードポリシーにも複雑性が設定されており、Mediumであることがわかります。
parentAdmin:
(省略)
mPasswordComplexity=196608
アカウント情報
デバイスに登録されているアカウント情報はDUMP OF SERVICE accountのセクションを確認します。
ここでは、プライマリユーザ(User 0)には何もアカウントがなく、仕事用プロファイル(User 10)には管理アカウント(Managed Google Play)が登録されていることがわかります。
DUMP OF SERVICE account:
User UserInfo{0:所有者:c13}:
Accounts: 0
(略)
User UserInfo{10:CLOMO MDM Managed Profile:1030}:
Accounts: 1
Account {name=17924334635904881233@android-for-work.gserviceaccount.com, type=com.google.work}
パッケージ情報
デバイスにインストールされたアプリケーションはPackagesセクションで確認できます。
Packages:
このアプリはパッケージIDがcom.google.android.youtubeのため、Youtubeアプリであることがわかります。
Package [com.google.android.youtube] (726d541):
flagsはシステムアプリ(SYSTEM)であるかを判断するのに役に立ちます。
flags=[ SYSTEM HAS_CODE ALLOW_CLEAR_USER_DATA UPDATED_SYSTEM_APP ALLOW_BACKUP KILL_AFTER_RESTORE RESTORE_ANY_VERSION LARGE_HEAP ]
Perissionsでは、アプリケーションの権限情報を確認することができ、declared(アプリで宣言)、install(インストール時に付与)、runtime(必要な時に付与)をそれぞれ確認できます。
declared permissions:
com.google.android.youtube.permission.C2D_MESSAGE: prot=signature, INSTALLED
install permissions:
com.google.android.c2dm.permission.RECEIVE: granted=true
(略)
runtime permissions:
android.permission.POST_NOTIFICATIONS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
また、アプリケーションがどのユーザ(プライマリユーザー、仕事用プロファイル)にインストールされているかもinstalledから確認することができます。
User 0: ceDataInode=3201 installed=true hidden=false suspended=false distractionFlags=0 stopped=false notLaunched=false enabled=1 instant=false virtual=false
User 10: ceDataInode=7741 installed=true hidden=false suspended=false distractionFlags=0 stopped=false notLaunched=false enabled=1 instant=false virtual=false
最後に
Android Enterpriseの分野では、アプリケーションがインストールされない!デバイスの制限がかかってない!のような問題が発生し、アプリケーションのLogcatやダンプだけでは判断つかない問題が多発します。
そういった場合の解決のヒントになるものとしてバグレポートを活用することが度々あります。色々読んでみると興味深いレポートになっているのでぜひ一度取得して眺めてみていただければと思います!