コミュニティ

Now in Android #121

所要時間: 9 分
Daniel Galpin のプロフィールを表示
Daniel Galpin デベロッパー アドボケイト

「Now in Android」へようこそ。このシリーズでは、Android デベロッパーの世界における最新情報や注目すべき情報をご紹介します。

Android 16 QPR2 ベータ版 1、Android Studio Narwhal の機能ドロップ、Jetpack Compose 1.9、Media 3 1.8、シェイプ モーフィング、Compose の自動入力などについて、以下で詳しく説明します。

動画の要約を視聴できます。

 

 

ポッドキャストもあります。

この投稿には最も詳しい情報が記載されていますので、ぜひ最後までお読みください。

Android 16 QPR2 ベータ版 1 がリリースされました ✨

Android 16 QPR2 の最初のベータ版がリリースされました。これは、Android マイナー SDK バージョンを搭載した最初の Android リリースです。マイナー SDK バージョンには、プラットフォーム機能を拡張する新しい API を含めることができますが、targetSdkVersion で制限された動作変更を導入することはできません。これにより、アプリをテストする必要性が最小限に抑えられます。

sdk-release-graph.webp

新しい API を呼び出すには、SDK_INT_FULL を VERSION_CODES_FULL 列挙型と比較します。

if (Build.VERSION.SDK_INT_FULL >= Build.VERSION_CODES_FULL.BAKLAVA_1) {
  // Call new APIs from the Android 16 QPR2 release
}

VERSION_CODES_FULL は、uses-sdk マニフェスト属性では使用できません。

QPR2 ベータ版 1 の主な更新内容は次のとおりです。

UI、システム エクスペリエンス、ユーザー補助:

  • 拡張ダークモード オプションでは、ダークモードを好むユーザー向けに、ライトモードのアプリがインテリジェントに反転されます。
  • アプリにモノクロレイヤが用意されていない場合、システムによって自動テーマ設定のアプリアイコンが生成されることがあります。
  • インタラクティブな選択ツール セッションでは、ChooserManager と ChooserSession を使用して、共有シートが開いている間もアプリの UI をアクティブに保ちます。
  • 新しい Data Transfer API により、Android と iOS の間でより信頼性が高く安全なデータ移行が可能になります。これには、アプリのデータ抽出ルール XML と BackupAgent の実装の更新が必要です。
  • android.graphics.pdf パッケージが拡張され、PdfRenderer.Page を介した PDF ドキュメントのアノテーションと編集がサポートされるようになりました。
  • ViewConfiguration の値が個々の仮想デバイスに合わせて調整されるようになりました。マルチディスプレイのシナリオでは ViewConfiguration.get(context) に移行してください。
  • View.performHapticFeedback(HapticFeedbackRequest) で VibrationAttributes を指定することで、触覚フィードバックをより細かく制御できます。
  • クイック設定タイルを AndroidManifest.xml ファイルの事前定義されたカテゴリに割り当てられるようになりました。

メディアとオーディオ:

  • オープンな空間オーディオ形式である Immersive Audio Model and Formats(IAMF)のソフトウェア デコード。
  • Bluetooth LE Audio デバイスの個人用音声共有が、システムの出力スイッチャーに直接統合されています。
  • ユーザーは HDR / SDR 輝度スライダーを使用して HDR の輝度を制御できます。
  • 写真選択ツールのエクストラでは、特定のアルバムや検索クエリをハイライト表示できます。

接続性:

  • コンパニオン デバイス管理(CDM)の機能強化により、カスタム デバイス アイコンの提供、EVENT_ASSOCIATION_REMOVED コールバックのリッスン、DeviceId を使用したアプリ間検証が可能になります。
  • Bluetooth の更新には、BluetoothLeScanner(ScanSettings.SCAN_TYPE_PASSIVE)のパッシブ スキャンのサポート、ボンディング損失の理由(BluetoothDevice.EXTRA_BOND_LOSS_REASON)、サービス UUID の直接取得(BluetoothDevice.EXTRA_UUID_LE)が含まれます。
  • Wi-Fi RTT 測距の更新(RttStationRangingParams)により、ステーションに対する測距がサポートされます。
  • IMS P-Associated-URI ヘッダーから電話番号を解析して検証するための新しい PhoneNumberManager が利用可能になりました。
  • MediaRouter のネットワーク プライバシーの改善により、Bluetooth や UWB などの新しいメディアを介したキャストが可能になりました。システムの出力切り替えを使用するか、カスタムのアプリ内選択ツールに NEARBY_DEVICES 権限をリクエストする必要があります。

プライバシーとセキュリティ:

  • 新しいシステムレベルのセキュリティ状態である「セキュアロック デバイス」は、デバイスをロックし、ロック解除にプライマリ認証を必要とします。
  • スマートフォンの盗難保護に、ユーザー向けの切り替えボタンが追加され、「認証失敗時のロック」を有効または無効にできるようになりました。

開発者の生産性:

  • 新しい AppWidgetManager API を使用して、ウィジェットのエンゲージメント指標をクエリできるようになりました。
  • ADB 経由でインストールされたデバッグ可能なアプリに、16 KB ページサイズの互換性に関する早期警告が表示されるようになりました。
  • ProfilingManager に、新しいシステム開始のプロファイリング トリガーと、バックグラウンド トレースをキャプチャする requestRunningSystemTrace のサポートが追加されました。
  • 開発者向けオプションの [詳細な印刷ロギング] をオンにすると、Android 印刷フレームワークに関する追加のデバッグ情報が表示されます。
  • デフォルト以外のディスプレイでのスクリーンショット用の新しい UiAutomation API と、公開 AccessibilityWindowInfo.refresh により、デスクトップとマルチディスプレイのエクスペリエンスをより堅牢にテストできるようになりました。
  • 新しい androidx.core:core-backported-fixes ライブラリの API サポートが追加されました。
  • Linux ターミナルで GUI アプリがサポートされるようになりました
  • WindowInspector.addGlobalWindowViewsListener は、リアルタイムのルートビュー変更通知をサポートしています。

サポートされている Google Pixel デバイスを登録してベータ版のアップデートを無線(OTA)で受信するか、Android Studio の Android Emulator で 64 ビットのシステム イメージを使用できます。プラットフォームの安定版は 2025 年 10 月にリリースされる予定です。

Android Studio Narwhal Feature Drop が安定版に - エージェント モードの使用を開始 🐳

narwhal.webp

Android Studio Narwhal Feature Drop が安定版になりました。新機能と機能強化は次のとおりです。

  • Gemini in Android Studio: エージェント モードが多段階のコーディング タスクで利用可能
  • プロンプト ライブラリのルールを使用すると、プロジェクトのニーズに合わせて Gemini の AI 出力をカスタマイズできます。
  • Transform UI with Gemini は、自然言語 UI を使用して Compose UI を反復処理します。
  • 没入型開発のサポート: 組み込みの XR Android Emulator、新しい XR テンプレート、XR 用の組み込み Layout Inspector
  • Android デバイス ストリーミングの Android パートナー デバイス ラボを介したデバイス アクセスの拡大。
  • Compose プレビューの改善: コード ナビゲーションの改善と新しい Compose プレビュー ピッカー
  • K2 Kotlin コンパイラがデフォルトで有効になり、ビルド パフォーマンスが向上
  • 16 KB ページサイズ ツール: lint 警告、分析、エミュレータを使用して、今後登場する 16 KB ページサイズのデバイスに備えることができます。

Firebase を利用した Android デバイス ストリーミング

device-streaming.webp

Firebase を利用した Android デバイス ストリーミングで、Android パートナー デバイスラボの安定版サポートが導入されました。これにより、Samsung、Xiaomi、OPPO、OnePlus、vivo などの OEM パートナーがホストする Android デバイスにリモート接続できるようになりました。

Android Studio の月次リリースで開発を加速 - リリース頻度が以前の 2 倍に

accelarating-releases.webp

Android Studio は、新機能や重要なバグの修正を迅速に提供するため、月次の安定版リリース サイクルに移行しています。Android Studio IDE は毎月更新されますが、新しい IntelliJ プラットフォーム バージョンは数か月ごとに導入され、その間の安定版リリースは Feature Drop で補完されます。Android Emulator と Android Gradle プラグインは、引き続き 2 か月ごとに個別に更新されます。この加速された公開スケジュールは、テスト インフラストラクチャへの長期的な投資によって支えられています。

2025 年 8 月の Jetpack Compose リリースの新機能 🚀

jetpack-compose.webp

2025 年 8 月にリリースされた Jetpack Compose(バージョン 1.9)が安定版になりました。このリリースでは、ボックスシャドウ効果をレンダリングするための Modifier.dropShadow と Modifier.innerShadow が導入されています。新しい onVisibilityChanged 修飾子と onFirstVisible 修飾子を使用すると、UI の更新やインプレッションのロギングのために要素の可視性を追跡できます。OutputTransformation 内で、TextFieldBuffer.addStyle を使用してテキスト変換を行うことで、リッチなスタイルを適用できます。

LazyLayout ビルディング ブロックが安定版になり、LazyLayoutCacheWindow を定義して、プリフェッチの強化により Lazy List と Grid のパフォーマンスを向上させることができるようになりました。Scrollable2D では、フリックやネストされたスクロールなど、2 次元スクロールが可能になり、View とのスクロールおよびネストされたスクロールの相互運用性がさまざまな点で改善されています。オプトイン API(Composer.setDiagnosticStackTraceEnabled)は、スタック トレースでクラッシュの場所に関する詳細情報を提供します。これはデバッグビルドにのみ推奨されます。新しい @RememberInComposition アノテーションと @FrequentlyChangingValue アノテーション、および関連する lint チェックが、新しいランタイム アノテーション ライブラリで利用可能になりました。コンテキスト メニューは、Modifier.appendTextContextMenuComponents と Modifier.filterTextContextMenuComponents を使用してカスタマイズできます。Android Gradle プラグイン(AGP)/ Lint バージョン 8.8.2 以降が必要になりました。

Media3 1.8.0 の新機能🚀

media3.webp

Media3 1.8.0 がリリースされ、いくつかの新機能と改善が導入されました。ExoPlayer に、ユーザーによる頻繁なシークに対応するスクラブモードが追加されました。このモードは ExoPlayer.setScrubbingModeEnabled で有効にできます。HlsInterstitialsAdsLoader サーバーガイド型広告挿入のライブ配信がサポートされるようになりました。

MetadataRetriever が更新され、再生せずにメディア アイテムの再生時間を取得できるようになりました。Transformer では、experimentalSetMp4EditListTrimEnabled を使用した MP4 編集リストによる高速トリミング オペレーションと、CodecDbLite によるチップセット固有のエンコーダ最適化が導入されています。これらは、DefaultEncoderFactory.Builder で setEnableCodecDbLite を呼び出すことで有効になります。

その他のアップデートには、PreCacheHelper を使用した Downloader での部分ダウンロードのサポート、ExoPlayer での自動 XR オーディオ ルーティング、MediaCodec の操作の効率化などがあります。MediaSession モジュールでは、デフォルトで通知がより長く表示されるようになりました。また、メディア セッションのデモアプリでは、再生の再開機能が紹介されています。Kotlin と Compose で構築された新しい Composition デモアプリでは、高度なマルチアセット動画編集を実演しています。

記事 📚

#WeArePlay: コーディングでよりサステナブルな未来を創る

weareplay.webp

#WeArePlay イニシアチブでは、環境問題に取り組む Android アプリやゲームにスポットライトを当てています。Mayla、Flávia、Andréia、Ariane が開発したゲーム「BoRa — Iguaçu National Park」は、公園を訪れた際に自然教育のためのゲーミフィケーション化されたアクセスしやすいインタラクティブな体験を提供します。Louis 氏と Justin 氏のアプリ CyberTracker は、読み書きができない先住民のトラッカーがアイコンベースのインターフェースを通じて生物多様性データを記録できるようにすることで、保全活動を支援しています。最後に、Bharati 氏と Saurabh 氏が共同設立した Earth5R は、環境教育を提供し、ユーザーをインターンシップやプロジェクトにつなげて、グリーン エコノミーに必要なスキルを育成しています。

HDR とは 🌟

hdr.webp

ハイ ダイナミック レンジ(HDR)を使用すると、Android デベロッパーは標準ダイナミック レンジ(SDR)を超えるピーク輝度を実現し、視覚的な忠実度を高めることができます。Android は、動画と画像の HDR をサポートしています。これには、下位互換性のための UltraHDR などのテクノロジーが含まれます。

色を理解するには、次の 3 つの要素が関係します。

  • ビット深度: 色表現の精度を定義します。深度が高いほど、色の変化が滑らかになります。
  • 伝達関数: 数値のピクセル値を表示される輝度または色にマッピングし、人間の非線形な視覚反応を調整します。たとえば、sRGB、HLG、PQ などがあります。
  • 色域: デバイスが再現できる色の範囲を表します。

HDR に関するよくある誤解:

  • 鮮やかな色: Display P3 や Adobe RGB などのより広い色域は HDR 以前から利用可能であり、ほとんどのディスプレイは BT.2020 コンテンツでも P3 にクリップされます。
  • コントラストの向上 / 黒のディテールの改善: HDR は、同じディスプレイで SDR よりも暗い黒を本質的に提供するわけではありません。OLED ディスプレイは、どちらのコンテンツでも無限のコントラストを実現します。PQ は暗い領域により多くのビットを割り当てますが、ユニバーサルな HDR 機能ではありません。
  • 高いビット深度: 一部の HDR 動画プロファイル(HDR10 など)は 10 ビットまたは 12 ビットのストリームを使用しますが、これはそれらのプロファイルに固有のものであり、HDR 自体に固有のものではありません。高いビット深度は、他の画像形式でも一般的です。

HDR は主に ピーク輝度が高いことを意味します。この「HDR ヘッドルーム」は、SDR を基準とするフローティング領域として定義されます。従来の HDR 動画では固定ヘッドルームがエンコードされることがよくありますが、最新のディスプレイではダイナミック ヘッドルームが使用されるため、品質に違いが生じることがあります。ウルトラ HDR やゲインマップなどのテクノロジーは、ビットを効率的に使用する代替手段となります。Android の UI ツールキットは、extendedRangeBrightness API を利用して、RGBA_8888 でも HDR エクスペリエンスを提供します。

動画 📹

シェイプ モーフィングを使用した高度な共有要素 | Jetpack Compose のヒント

Jetpack Compose で、高度な共有要素遷移、洗練されたシェイプ モーフィング、リビール アニメーションが利用できるようになりました。デベロッパーは、アプリの最上位レベルで SharedTransitionLayout を構成し、Modifier.sharedBounds を使用して要素をリンクできます。

シェイプ モーフィングは、Material 3 の AndroidX グラフィック シェイプ ライブラリを活用して実現された重要な新機能です。これには、開始 / 終了形状を定義した Morph オブジェクトを作成し、animateFloat(AnimatedVisibilityScope から)で進行状況を制御し、カスタム OverlayClip を介してクリップとして適用します。表示エフェクトでは、skipToLookaheadSize と skipToLookaheadPosition を使用します。これらの高度なアニメーションはすべて、予測型「戻る」ジェスチャーにも対応しています。

Android Studio のマルチモーダル Gemini: AI を活用した UI 開発

Android Studio の Gemini AI は、デザインからのコード生成(画像からコードへの変換を含む)、合成データを使用した Compose プレビューの作成、直接コマンドによる既存の UI の改良により、UI 開発を支援します。

ランタイム対応 SDK を使用する

Android 14 では、サードパーティ SDK を安全な別のプロセス サンドボックスに分離してプライバシーとセキュリティを強化する新しいテクノロジーである SDK ランタイムが導入されています。

デベロッパー:

  • ランタイム対応(RE)SDK は、この別のプロセスで実行されます。
  • ランタイム対応(RA)SDK は、アプリ内で仲介役として機能します。
  • SdkSandboxManagerCompat を使用して RE SDK を読み込み、制約(フォアグラウンド、単一読み込みなど)を遵守します。
  • Shim ツールは、低レベルのプロセス間通信を簡素化します。
  • SandboxedSdkView と SandboxedUiAdapter を使用して、RE SDK から UI をレンダリングする。
  • SdkActivityLauncher を使用して SDK ランタイムからアクティビティを起動する。

WearOS Material 3 のシェイプ モーフィング | Jetpack Compose のヒント

Wear OS Material 3 for Compose で、シェイプ モーフィングが簡素化されました。デベロッパーは、IconButtonDefaults.animatedShapes を使用して丸いボタンにアニメーション化された形状変化を簡単に追加したり、ButtonGroup コンポーネントと Modifier.animateWidth() を使用して幅の変化をアニメーション化するボタン グループを作成したり、TransformationSpec を使用して画面の端に近づくにつれてアイテムが拡大縮小して変形する垂直スクロール リスト(TransformingLazyColumn)を構築したりできます。

AndroidX のリリース 🚀

AndroidX の変更の概要を以下に示します。Android アプリ デベロッパーに特に関連性の高いものを優先的に記載しています。

Compose ライブラリに影響する全体的な変更:

  • デフォルトの minSdk が API 23 に引き上げられました。androidx.compose animation、foundation、material、runtime、ui のデフォルトの最小 SDK バージョンが API 21 から API 23 に変更されました。つまり、これらの Compose ライブラリの最新のアルファ版を使用している場合、アプリは暗黙的に Android 6.0(Marshmallow)以降を必要とします。

Compose デベロッパー向けの主な変更点:

  • 新しい retain API(Compose ランタイム): rememberSaveable に似た retain API を導入しました。ただし、シリアル化されずにコンポジション階層から離れる値に使用します。保存された値よりも寿命が短く、ViewModel と同様に動作します。これにより、コンポジションに出入りする可能性のあるコンポーザブルの状態を管理する新しい方法が提供されます。
  • 共有要素の遷移の強化(Compose Animation と UI): 共有要素を動的に有効または無効にする、進行中の遷移を考慮する、共有要素が破棄されたときに代替のターゲット境界を設定する新しい API。レイアウトをアンカーするための新しい Modifier.skipToLookaheadPosition も利用できます。
  • ページャーのプリフェッチの改善(Compose Foundation): ページャーのプリフェッチ戦略で、単一のアイテムではなく「キャッシュ ウィンドウ」(1 ビューポート サイズ)が使用されるようになりました。また、初期プリフェッチがデフォルトで有効になりました。また、スムーズ スクロールを実現するために、アイテムが長く保持されます。
  • マウス / タッチパッドのフォーカス処理の改良(Compose Foundation と UI): ComposeViews は、フォーカスされたノードの外側でポインタダウン イベント(マウスまたはタッチパッドから)が発生すると、自動的にフォーカスをクリアするようになりました。この機能は無効にできます。
  • カスタマイズ可能なフォーカス長方形(Compose Foundation): FocusProperties で、デフォルトの境界ボックスではなく、カスタム フォーカス領域を定義できるようになりました。これにより、スクロール可能なコンテナでのフォーカス走査と「表示を維持」ロジックが改善されます。
  • LifecycleOwner コンポーザブル(Lifecycle): 新しいコンポーザブルにより、UI ツリー内で直接スコープ付き LifecycleOwner インスタンスを作成できます。これは、コンポーネントのライフサイクルを個別に管理する場合や、Navigation などのライブラリで特に役立ちます。
  • SavedStateHandle での Nullable 型のサポート(Lifecycle と SavedState): SavedStateHandle と SavedStateRegistryOwner のネイティブ サポートにより、Nullable プロパティの保存と復元が簡素化されました。
  • 新規 LineHeightStyle.Mode.Tight(Compose Foundation と UI): 新しい Tight モードでは、行の高さを小さくすることができます。これにより、高さのあるグリフが切り取られる可能性がありますが、テキスト レイアウトをより正確に制御できます。
  • ダブルタップして単語を選択(Compose Foundation): SelectionContainer と BasicTextField でダブルタップして単語を選択する機能のサポートを追加しました。
  • WindowInsets の動作変更(Compose UI と Foundation):
    ◦ ディスプレイ カットアウトのパスを取得する新しい WindowInsets.cutoutPath API。
    ◦ isWindowInsetsDefaultPassThroughEnabled フラグが削除され、WindowInsets はデフォルトで消費しないようになり、子ビューがそれらを受け取れるようになりました。
  • AndroidView requestRectangleOnScreen 修正(Compose Foundation): AndroidView によって行われたリクエスト(画面に留まろうとする EditText など)が Compose に適切に伝播されるようになりました。
  • 2D マウスホイール スクロールの改善(Compose Foundation と UI): 2D マウスホイール スクロール イベントのサポートを改善しました。新しいテスト API と動作を制御するフラグが追加されています。

新しいライブラリとユーティリティ:

  • androidx.core:core-backported-fixes (新しいライブラリ): この新しいライブラリを使用すると、デベロッパーは、重大なバグの修正(特定のカメラのバグなど、プラットフォーム レベルの問題)がデバイスに適用されているかどうかを確認できます。これにより、既知のバグが解決されているかどうかに応じて、異なるユーザー エクスペリエンスを提供できます。

その他の主な変更点:

  • Games Activity & Input: 16 KB ページサイズのデフォルト サポートと、GameActivity のマウス サポートを追加しました。
  • Material3 ツールチップの配置: ツールチップの配置プロバイダが増え、アンカーの上、下、左、右に配置できるようになりました。
  • Material3 DatePicker 修正: DatePicker が数値形式に独自の言語 / 地域を適用するようにし、RTL 表示の問題を修正しました。
  • TWA display_override のサポート(ブラウザ): display_override TWA マニフェスト プロパティのサポートを追加し、TWA ディスプレイをより細かく制御できるようにしました。
  • 外部アプリ(ブラウザ)で初期 URL を起動する: TWA の初期 URL を外部ブラウザで起動できるようにするインテントを追加しました。

Android Developers Backstage

Android Developers Backstage の新しいエピソードが公開されました。

Compose での自動入力

Jetpack Compose 1.8 では、Compose のセマンティクス システムを活用して、自動入力機能が大幅に改善されています。デベロッパーは、テキスト フィールドに関連するコンテンツ タイプのセマンティクス(ユーザー名、パスワードなど)をタグ付けするだけで、システムレベルの自動入力を簡単に統合できるようになりました。これにより、自動入力ツリーを手動で管理する必要がなくなり、パフォーマンスが向上します。

 

さて… 👋

今回の内容は以上です。 Android 16 QPR2 ベータ版 1、Android Studio Narwhal の機能ドロップ、Jetpack Compose 1.9、Media 3 1.8、シェイプ モーフィング、Compose の自動入力などについて取り上げました。

Android デベロッパーの世界からの最新情報を、今後もぜひご確認ください。

作成者:
続きを読む