開発者ドキュメント
このドキュメントでは、Android Camera Parametersアプリケーションの技術的な概要、アーキテクチャ、および開発ガイドラインを提供します。
プロジェクトの概要
このアプリケーションは、Android Camera2のCameraCharacteristicsを検査するための診断ツールです。デバイス上のすべてのカメラレンズのハードウェアレベル、機能、および生のパラメータ値を探索するための、モダンでユーザーフレンドリーなインターフェースを提供します。
アーキテクチャ
プロジェクトはMVVM (Model-View-ViewModel)アーキテクチャパターンに従い、UIレイヤーにはJetpack Composeを使用して構築されています。
主要コンポーネント
CameraParamsActivity
アプリケーションの唯一のエントリポイントです。
- 実行時の権限(CAMERA)を処理します。
setContentを介してCompose UIを初期化します。CameraParamsThemeをホストします。
CameraViewModel
UIの中心的な状態マネージャーです。
- カメラのリスト、選択されたインデックス、カテゴリ分けされたパラメータ、検索クエリを含む
UiStateを保持します。 - 機能検出:
detectFeatureFlags()に、RAWサポート、OIS、マニュアル露出などのハードウェア機能を動的に判断するロジックが含まれています。 - カテゴリ分け: 読みやすさを高めるために、何百ものCamera2キーを論理的なセクション(センサー、レンズなど)にグループ化します。
CameraParamsHelper
AndroidのCameraManagerをラップするユーティリティです。
- 特定のIDの
CameraCharacteristicsを取得します。 - 複雑なカメラタイプ(
IntArrayモードを人間が読める文字列に変換するなど)に対して特別なフォーマットを提供します。
UIレイヤー (Jetpack Compose)
UIはMaterial 3を使用して構築されており、ダークテーマが厳密に適用されています。
ナビゲーション構造
アプリはMainScreen.ktで管理されるandroidx.navigation.composeを使用しています。
| 画面 | 役割 |
|---|---|
| Overview | サマリーカード、ハードウェアレベル、主要機能チップを表示するハイレベルなダッシュボード。 |
| Categories | セクションごとにグループ化された、検索フィルタリング付きの全パラメータの展開可能なリスト。 |
| Raw (JSON) | すべてのカメラプロパティの構文ハイライトされたJSON表現。 |
| Detail | フォーマットされた値と生データを表示する、単一パラメータのフォーカスビュー。 |
スタイリング
- テーマ:
Theme.ktで定義されています。 - カラー: ハイライトや主要なアクションに使用されるプライマリカラー
#7B61FF(バイオレット)。 - サーフェス: ダーク背景
#121417と、カード用の#1E1F23バリアント。
主要なロジック
動的な機能検出
ダッシュボードの「主要機能」チップは静的ではありません。これらはCameraViewModel.detectFeatureFlags()で計算されます。
- RAW:
REQUEST_AVAILABLE_CAPABILITIES_RAWを介してチェックされます。 - OIS:
LENS_INFO_AVAILABLE_OPTICAL_STABILIZATIONにONが含まれている場合に検出されます。 - Manual Exp:
CONTROL_AE_MODE_OFFがサポートされている場合に使用可能です。 - Manual Focus:
LENS_INFO_MINIMUM_FOCUS_DISTANCEが0より大きい場合に有効になります。
開発ガイド
前提条件
- Android Studio Ladybug(またはそれ以降)。
- Kotlin 2.0+(プロジェクトは新しいCompose Compiler Gradleプラグインを使用しています)。
- 最小SDK: 21 (Android 5.0)。
新しいカテゴリの追加
パラメータのグループ化を追加または変更するには、CameraViewModel.ktのgetCategoryForKey()メソッドを更新してください。カメラキー名との文字列一致を使用して、カテゴリを割り当てます。
テーマの更新
Color.ktで色を調整できます。アプリはダークモードで最適に見えるように設計されています。ライトパレットへの変更は慎重にテストする必要があります。