Androidスマートフォンのカメラ性能を調べるには、Camera2 APIやCamera Extensions、VendorTagなど複数の情報を確認する必要があります。しかし、それぞれを個別に調査するのは手間がかかり、端末ごとの差も分かりにくいのが実情です。そこで開発したのが「GetCameraInfo」です。本記事では、このアプリを開発した理由や取得できる情報、画面構成を中心に紹介します。
GetCameraInfoを開発した理由
Androidでカメラアプリを開発していると、端末によって使えるカメラ機能が大きく異なります。Camera2 APIの情報だけでなく、Camera ExtensionsやVendorTagなども確認したいのですが、それぞれを個別に調べるのは意外と手間がかかります。
そこで、Android端末が持つカメラ情報をまとめて確認できるツールとして「GetCameraInfo」を開発しました。CameraXなどを使ったアプリ開発前に、実機がどのようなカメラ機能に対応しているのかを手軽に調べられることを目標にしています。
GetCameraInfoでできること
GetCameraInfoは、Android端末が持っているカメラ情報をまとめて確認するために作成したアプリです。
Camera2 APIの基本情報だけでなく、Camera ExtensionsやVendorTag、さらにADBから取得した補助情報まで確認できます。
また、「端末が対応している機能」と「実際にカメラを動かしたときの値」を分けて確認できるようにしています。
それでは、具体的にどのような情報を調べられるのか見ていきます。
Camera2 APIから端末のカメラ性能を確認できる
まず基本となるのが、AndroidのCamera2 APIから取得できるカメラ情報です。
GetCameraInfoでは、Camera IDごとにカメラを認識し、フロント・リアの違いやLogical Camera、Physical Cameraなどの構成を確認できます。
さらに、次のような情報も取得できます。
- Camera ID
- Lens Facing
- Hardware Level
- Available Capabilities
- RAW対応
- Manual Sensor対応
- ISO設定可能範囲
- 露光時間の設定可能範囲
- 焦点距離・F値
- センサーサイズ
- 対応解像度
- JPEG・RAW・YUVなどの出力形式
- High Resolution / Maximum Resolution
- 高速動画の解像度・FPS
- AE・AF・AWB
- OIS・EIS
- Zoom Range
- Flash対応
特に私が確認したかったのが、ISOや露光時間を手動で変更できるかという点です。
例えば、CameraXでProモードを作ろうとしても、すべてのAndroid端末で同じ機能が使えるわけではありません。
GetCameraInfoでMANUAL_SENSORへの対応やISO・露光時間の範囲を先に確認しておけば、その端末でどこまで手動制御できるのかを実装前に判断できます。


また、解像度についても単純に「最大○○MP」と表示するだけではありません。
通常解像度、High Resolution、Maximum Resolution、RAWなどを分けて確認できるため、カメラアプリを開発するときの端末調査に使いやすくしています。

VendorTagやADB補助情報まで確認できる
GetCameraInfoでは、Androidの標準的なCamera2情報だけでなく、メーカー独自のVendorTagも確認できます。
VendorTagとは、XiaomiやSamsungなどの端末メーカーが独自に追加しているカメラ関連情報です。
GetCameraInfoでは、主に次の内容を表示します。
- VendorTag名
- 型
- 値
- 読み取り状態
- 解釈状態
ただし、ここには注意点があります。
VendorTagは名前や値を取得できても、その意味がメーカーから公開されていない場合があります。
そのため、GetCameraInfoでは分からない値を無理に推測して、「これは○○センサーです」といった確定表示はしないようにしています。

さらに、PCからADBで取得したカメラ情報をZIPとして取り込む機能も用意しています。
ADB情報を追加することで、Camera2 APIだけでは見えにくい、
- HAL側のカメラ情報
- 内部Camera情報
- カメラモジュール型番候補
- VendorTagの補助情報
- Build情報
などを調査する材料にできます。
ただし、ADBから取得した情報も、そのまま正しい情報として扱うわけではありません。
Camera2 APIから取得した公開情報を優先し、ADB側の情報は補助・参考情報として扱うようにしています。
また、ADB情報を取得した端末と現在の端末でBuildが一致しているかも確認します。

このあたりの仕組みは少し複雑なので、ADB情報の取得方法や情報の信頼度については、別の記事で詳しく紹介したいと思います。
能動診断でカメラ起動時にしか取得できない情報を確認できる
GetCameraInfoには、通常のカメラ情報取得とは別に「能動診断」という機能を用意しています。
通常スキャンではCameraDeviceを起動せず、Camera2 APIから公開されている端末のカメラ能力を調べます。一方、能動診断では実際にCameraDeviceを起動し、CaptureSessionを動作させることで、カメラを動かさないと取得できない情報まで確認します。
少し分かりにくいのですが、単純に「現在のISOや露光時間を見る」ことだけが目的ではありません。
カメラを実際に動作させることで、Camera2 APIのTotalCaptureResultなどを通じて返される情報を取得できることが、この機能のポイントです。
最新版では、例えば次のような項目を確認しています。
- AE・AF・AWBの動作状態
- 実際に返されたISO
- 実際に返された露光時間
- Frame Duration
- Zoomの適用結果
- Zoom時に動作したPhysical Camera ID
- OIS・EISの動作状態
- 一時的に撮影したJPEGのEXIF情報
- CameraDevice動作中に返されるVendor Key
特に面白いのが、動的なVendor情報やPhysical Cameraの確認です。
VendorTagの中には静的な情報だけでなく、CameraDeviceを動かしてCaptureResultが返ってきて初めて値を確認できるものがあります。
また、複数のカメラを組み合わせたLogical Cameraでは、Zoomを変化させながら診断することで、LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_IDから、そのとき実際に選択されたPhysical Camera IDも確認します。


さらに、一時的にJPEG撮影を行い、EXIFから取得できる情報も調査します。このJPEGは診断のために使用するもので、画面表示や共有保存を目的とした撮影ではありません。
つまりGetCameraInfoの能動診断は、
CameraDeviceを実際に起動してカメラパイプラインを動かし、静的なCamera2情報だけでは確認できない実行時の情報を追加で調査する機能
と考えると分かりやすいと思います。
なお、ここで取得しているのはセンサドライバの内部情報を直接読み出したものではありません。Camera2 APIやHALを経由してアプリへ返された情報です。
そのためGetCameraInfoでは、通常スキャンで取得した「端末が公開している能力」と、能動診断で取得した「カメラ起動後に確認できた情報」を分けて扱うようにしています。
GetCameraInfoで取得する情報は3種類に分けている
ここまで紹介してきたGetCameraInfoの情報取得方法を整理すると、大きく3種類に分けられます。
違いを分かりやすくするため、「アプリのどの操作から、Android内部のどこへアクセスしているのか」を図にまとめました。

①「カメラ」タブ:Camera2 APIから公開情報を取得
「カメラ」タブを開くと、Camera2 APIのCameraManagerやCameraCharacteristicsを使って、端末がアプリに公開しているカメラ情報を取得します。
このときCameraDevice自体は起動しません。
Camera ID、Hardware Level、対応解像度、RAW対応、ISO・露光時間の設定可能範囲、AE・AF・AWB、OIS・EISなど、そのカメラがどのような機能を持っているのかを調べるための基本情報を確認できます。
つまり、ここで確認しているのは「今カメラがどのように動いているか」ではなく、端末から公開されているカメラの能力や仕様です。
②「能動診断」:カメラを起動して実行時情報を取得
「カメラ」タブから能動診断を開始すると、今度は実際にCameraDeviceをOpenし、CaptureSessionを動作させます。
Camera2 APIからリクエストがCamera HAL、さらにセンサやISP、レンズ・アクチュエータなどへ伝わり、カメラが実際に動作します。その結果として返されるCaptureResultなどから、カメラを起動しなければ確認できない情報を取得します。
例えば、
- ISO・露光時間
- AE・AF・AWBの状態
- Frame Duration
- OIS・EISの状態
- Zoomの適用結果
- Active Physical Camera ID
- JPEGのEXIF情報
- 動的なVendor Key
などです。
ここで重要なのは、センサドライバ内部をGetCameraInfoが直接読み出しているわけではないことです。
Camera2 API → Camera HAL → ドライバ/カメラハードウェア
というAndroidのカメラパイプラインを実際に動作させ、その結果としてアプリへ返された情報を取得しています。
通常スキャンでは分からない情報まで調査できることが、能動診断の大きな特徴です。
③「VendorTag」タブ:メーカー独自の情報を取得
「VendorTag」タブでは、CameraCharacteristicsからAndroid標準のCamera2情報に加えて、メーカーが独自に定義したVendorTagを取得します。
VendorTagには、Android標準APIだけでは表現されていないメーカー独自のカメラ情報が含まれている場合があります。
GetCameraInfoでは、VendorTagの名前や型、取得可能な値などを表示しますが、メーカーが仕様を公開していないものについては、意味を無理に決めつけないようにしています。
そのため、「値を取得できた」ことと「その値の意味まで確認できた」ことを分けて扱うのも、このアプリで意識しているポイントです。
このようにGetCameraInfoでは、
| アプリの操作 | 取得方法 | 主に確認する情報 |
|---|---|---|
| 「カメラ」タブ | CameraCharacteristicsなどを参照 | 端末が公開しているカメラの能力・仕様 |
| 「能動診断」 | CameraDeviceを起動してCaptureResultなどを取得 | カメラ起動時に取得できる実行時情報 |
| 「VendorTag」タブ | CameraCharacteristicsからVendorTagを取得 | メーカー独自のカメラ情報 |
という3つの経路を使い分けています。
単に取得できた値を一か所へ並べるのではなく、「どの経路から取得した情報なのか」を意識して扱うことで、その情報が何を意味しているのか判断しやすくしているのがGetCameraInfoの特徴です。
なお、図にはADBダンプZIPを取り込む経路も示していますが、こちらはCamera2 APIから直接取得する情報とは性質が異なる補助機能のため、本記事では割愛します。ADBダンプの取得方法やHAL情報との関係については、別の記事で詳しく紹介する予定です。
アプリはGitかGooglePlayでそのうち公開しようと思います。
ちなみにこの記事は下記の方法で生成しました。


コメント