サービスに関する最新情報

Android 17 の 4 番目のベータ版

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

Android 17 は、このリリース サイクルの最後のベータ版となるベータ版 4 に到達しました。これは、アプリの互換性とプラットフォームの安定性にとって重要なマイルストーンです。アプリのユーザー エクスペリエンスの微調整、スムーズなエッジ ツー エッジ レンダリングの確保、最新の API の活用など、ベータ版 4 はテストに必要なほぼ最終版の環境を提供します。

アプリ、ライブラリ、ツール、ゲームエンジンを対応させましょう。

Android SDK、ライブラリ、ツール、ゲームエンジンを開発している場合は、互換性の問題によって下流のアプリやゲームのデベロッパーがブロックされるのを防ぎ、最新の SDK 機能をターゲットにできるように、必要なアップデートを今すぐ準備することが重要です。Android 17 を完全にサポートするためにアップデートが必要な場合は、下流のデベロッパーに知らせてください。

Android17_Timeline_01_V02.png

テストでは、Google Play などの手段を使用して、ライブラリまたはエンジンを使用する製品版アプリまたはテストアプリを、Android 17 ベータ版 4 を搭載したデバイスまたはエミュレータにインストールします。アプリのすべてのフローを実行し、機能や UI の問題を探します。Android の各リリースには、プライバシー、セキュリティ、全体的なユーザー エクスペリエンスを向上させるプラットフォームの変更が含まれています。Android 17 で動作するアプリと Android 17 をターゲットとするアプリに影響する動作変更を確認し、以下のようなテストに重点を置いてください。

  • 大画面でのサイズ変更: Android 17 をターゲットにすると、大画面での画面の向き、サイズ変更、アスペクト比の制約を維持することをオプトアウトできなくなります。
  • 動的コードの読み込み: アプリが Android 17 以降をターゲットとしている場合、Android 14 で導入された DEX ファイルと JAR ファイル向けのより安全な動的コードの読み込み(DCL)保護が、ネイティブ ライブラリにも拡張されます。System.load() を使用して読み込まれるすべてのネイティブ ファイルは、読み取り専用としてマークされている必要があります。そうしないと、システムは UnsatisfiedLinkError をスローします。
  • デフォルトで CT を有効化: Certificate Transparency(CT)がデフォルトで有効になります。(Android 16 では、CT は利用可能でしたが、アプリはオプトインする必要がありました)。
  • ローカル ネットワーク保護: Android 17 以降をターゲットとするアプリでは、ローカル ネットワーク アクセスがデフォルトでブロックされます。可能であれば、プライバシーを保護する選択ツールの使用に切り替え、広範で永続的なアクセスには新しい ACCESS_LOCAL_NETWORK 権限を使用します。
  • バックグラウンド音声の強化: Android 17 以降、音声フレームワークは、音声再生、音声フォーカス リクエスト、音量変更 API などのバックグラウンド音声インタラクションに制限を適用します。皆様からのフィードバックに基づき、ベータ版 2 からいくつかの変更を加えました。たとえば、targetSDK による使用中の FGS の適用を制限したり、アラーム音声を適用対象外にしたりしました。詳しくは、更新されたガイダンスをご覧ください。

アプリのメモリ上限

Android では、アプリと Android ユーザーにとってより安定した予測可能な環境を構築するため、デバイスの合計 RAM に基づくアプリのメモリ上限が導入されます。Android 17 では、システムのベースラインを確立するために上限が控えめに設定されており、極端なメモリリークやその他の異常値をターゲットにしています。これにより、UI のカクつき、バッテリーの消耗、アプリの強制終了など、システム全体の不安定化を引き起こす前に、異常値を検出できます。ほとんどのアプリ セッションへの影響は最小限に抑えられると予想されますが、メモリのベースラインの確立など、メモリに関する以下のベスト プラクティスを実践することをおすすめします。

現在の実装では、アプリが影響を受けた場合、ApplicationExitInfo の getDescription に「MemoryLimiter」という文字列が含まれます。TRIGGER_TYPE_ANOMALY でトリガーベースのプロファイリングを使用して、メモリ上限に達したときに収集されるヒープダンプを取得することもできます。

unnamed (2).png
Android Studio Profiler の LeakCanary タスク

メモリリークの検出を支援するため、Android Studio Panda では、Android Studio Profiler に LeakCanary 統合が専用タスクとして直接追加されています。このタスクは IDE 内でコンテキスト化され、ソースコードと完全に統合されています。

メモリ使用量が少ないほど、パフォーマンスが向上し、バッテリー駆動時間が長くなり、すべてのフォーム ファクタでプレミアムなエクスペリエンスが実現します。Android エコシステムのより高速で信頼性の高い未来を一緒に築きましょう。

アプリの異常に対するプロファイリング トリガー

Android には、リソースを大量に消費する動作や潜在的な互換性の低下をモニタリングする、オンデバイスの異常検出サービスが導入されています。ProfilingManager と統合されたこのサービスにより、アプリはシステムが検出した特定のイベントによってトリガーされたプロファイリング アーティファクトを受け取ることができます。

TRIGGER_TYPE_ANOMALY トリガーを使用すると、過剰なバインダー呼び出しや過剰なメモリ使用量など、システムのパフォーマンスの問題を検出できます。アプリが OS で定義されたメモリ上限に違反すると、異常トリガーにより、デベロッパーはアプリ固有のヒープダンプを受け取って、メモリの問題を特定して修正できます。さらに、過剰なバインダー スパムの場合、異常トリガーはバインダー トランザクションのスタック サンプリング プロファイルを提供します。

この API コールバックは、システムによる違反措置が適用される前に発生します。たとえば、メモリ上限を超えたためにシステムによってアプリが終了される前に、デベロッパーがデバッグデータを収集するのに役立ちます。トリガーの使用方法については、トリガーベースのプロファイリングに関するドキュメントをご覧ください。

    val profilingManager = applicationContext.getSystemService(ProfilingManager::class.java)
    val triggers = ArrayList<ProfilingTrigger>()  
    triggers.add(ProfilingTrigger.Builder(
                 ProfilingTrigger.TRIGGER_TYPE_ANOMALY))
    val mainExecutor: Executor = Executors.newSingleThreadExecutor()
    val resultCallback = Consumer<ProfilingResult> { profilingResult ->
        if (profilingResult.errorCode != ProfilingResult.ERROR_NONE) {
            // upload profile result to server for further analysis          
            setupProfileUploadWorker(profilingResult.resultFilePath)
        } 
    profilingManager.registerForAllProfilingResults(mainExecutor, resultCallback)
    profilingManager.addProfilingTriggers(triggers)
}

Android Keystore のポスト量子暗号(PQC)

Android Keystore で、NIST 標準の ML-DSA(Module-Lattice-Based Digital Signature Algorithm)のサポートが追加されました。対応デバイスでは、ML-DSA 鍵を生成し、それを使用して耐量子署名を作成できます。この処理はすべてデバイスのセキュアなハードウェア内で行われます。Android Keystore は、標準の Java Cryptographic Architecture API(KeyPairGenerator、KeyFactory、Signature)を介して ML-DSA-65 および ML-DSA-87 アルゴリズム バリアントを公開します。詳しくは、デベロッパー向けドキュメントをご覧ください。

KeyPairGenerator generator = KeyPairGenerator.getInstance(
        “ML-DSA-65”, "AndroidKeyStore");
generator.initialize(
        new KeyGenParameterSpec.Builder(
                “my-key-alias”,
                KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY)
        .build());
KeyPair keyPair = generator.generateKeyPair();

Android 17 を使い始める

サポート対象の Google Pixel デバイスを登録すると、このアップデートと今後の Android ベータ版のアップデートを無線(OTA)で入手できます。Google Pixel デバイスをお持ちでない場合は、Android Studio で Android Emulator で 64 ビット システム イメージを使用できます。

現在 Android ベータ プログラムに参加している場合は、ベータ版 4 への無線アップデートが提供されます。

フィードバック ページから、問題の報告や機能リクエストの送信を引き続き行えます。早期にフィードバックをお送りいただくと、最終リリースにより多くのフィードバックを反映させることができます。

Android 17 の開発エクスペリエンスを最適化するには、Android Studio(Panda)の最新のプレビュー版を使用することをおすすめします。設定が完了したら、次のことを行う必要があります。

  • 新しい SDK でコンパイルし、CI 環境でテストして、フィードバック ページのトラッカーで問題を報告してください。
  • 現在のアプリの互換性をテストし、Android 17 の変更による影響を受けるかどうかを確認します。また、Android 17 を搭載したデバイスまたはエミュレータにアプリをインストールして、広範なテストを行います。

プレビュー版 / ベータ版のシステム イメージと SDK は、Android 17 のリリース サイクル全体を通じて定期的に更新されます。ベータ版ビルドをインストールすると、それ以降のすべてのプレビュー版とベータ版のアップデートが自動的に無線(OTA)で提供されます。

詳しくは、Android 17 デベロッパー サイトをご覧ください。

アンケートに回答する

皆様からのフィードバックは、Google にとって最も貴重な資産です。Canary チャンネルのアーリー アダプターの方も、Beta 4 でテストしているアプリ デベロッパーの方も、ぜひコミュニティに参加してフィードバックをお寄せください。ぜひお聞かせください。

作成者:
続きを読む