Android 17 は本日、ベータ版 3 でプラットフォームの安定版に正式に到達しました。つまり、API サーフェスがロックされているため、最終的な互換性テストを実施して、Android 17 をターゲットとするアプリを Google Play ストアに公開できます。さらに、Beta 3 には、より安全で高度に統合されたアプリケーションを構築するのに役立つ新機能が多数搭載されています。
アプリ、ライブラリ、ツール、ゲームエンジンを準備しましょう。
SDK、ライブラリ、ツール、ゲームエンジンを開発している場合は、下流のアプリやゲームのデベロッパーが互換性の問題に阻まれることなく、最新の SDK 機能をターゲットにできるように、必要なアップデートを今すぐ準備することがさらに重要になります。Android 17 を完全にサポートするためにアップデートが必要な場合は、下流のデベロッパーに知らせてください。
テストでは、Google Play などの手段を使用して、Android 17 ベータ版 3 を搭載したデバイスまたはエミュレータに、ライブラリまたはエンジンを使用する製品版アプリまたはテストアプリをインストールします。アプリのすべてのフローを実行し、機能や UI の問題を探します。動作変更を確認して、テストに集中します。Android の各リリースには、プライバシー、セキュリティ、全体的なユーザー エクスペリエンスを向上させるプラットフォームの変更が含まれており、これらの変更はアプリに影響する可能性があります。注目すべき変更点は次のとおりです。
- 大画面でのサイズ変更: 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 では、写真選択ツールの視覚的な表示をカスタマイズして、アプリのユーザー インターフェースをより適切に補完できるようになりました。新しい PhotoPickerUiCustomizationParams API を活用することで、ギャラリー表示のアスペクト比を標準の 1:1 の正方形から 9:16 の縦長表示に変更できます。この柔軟性は、ACTION_PICK_IMAGES インテントと埋め込みの写真選択ツールの両方に適用されるため、ユーザーがメディアを操作する際に一貫したデザインを維持できます。
これは、プライバシーを保護する Android の写真選択ツールをアプリ エクスペリエンスにシームレスに適合させるための取り組みの一環です。写真選択ツールをアプリに直接埋め込んで、最もネイティブなエクスペリエンスを実現する方法の詳細
val params = PhotoPickerUiCustomizationParams.Builder()
.setAspectRatio(PhotoPickerUiCustomizationParams.ASPECT_RATIO_PORTRAIT_9_16)
.build()
val intent = Intent(MediaStore.ACTION_PICK_IMAGES).apply {
putExtra(MediaStore.EXTRA_PICK_IMAGES_UI_CUSTOMIZATION_PARAMS, params)
}
startActivityForResult(intent, REQUEST_CODE)RAW14 画像形式のサポート: Android 17 では、新しい ImageFormat.RAW14 定数により、ハイエンド デジタル写真のデファクト業界標準である RAW14 画像形式のサポートが導入されています。RAW14 は、1 ピクセルあたり 14 ビットのシングル チャンネル形式です。4 つの連続するピクセルが 7 バイトにパックされる、高密度にパックされたレイアウトを使用します。
ベンダー定義のカメラ拡張機能: Android 17 には、ベンダー定義の拡張機能が追加されています。これにより、ハードウェア パートナーはカスタムのカメラ拡張機能モードを定義して実装し、「高画質化」や最先端の AI による機能強化など、最新かつ最高のカメラ機能にアクセスできるようになります。これらのモードは、isExtensionSupported(int) API を使用してクエリできます。
カメラ デバイスタイプ API: 新しい Android 17 API を使用すると、基盤となるデバイスタイプをクエリして、カメラが組み込みハードウェア、外部 USB ウェブカメラ、仮想カメラのいずれであるかを識別できます。
Bluetooth LE Audio 補聴器のサポート
Android に、Bluetooth Low Energy(BLE)オーディオ補聴器用の特定のデバイス カテゴリが追加されました。AudioDeviceInfo.TYPE_BLE_HEARING_AID 定数の追加により、アプリで補聴器と通常のヘッドセットを区別できるようになりました。
val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
val devices = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS)
val isHearingAidConnected = devices.any { it.type == AudioDeviceInfo.TYPE_BLE_HEARING_AID }補聴器のきめ細かいオーディオ ルーティング
Android 17 では、特定のシステム音を再生する場所をユーザーが個別に管理できます。通知、着信音、アラームを、接続された補聴器またはデバイスの内蔵スピーカーに転送するかどうかを選択できます。
Extended HE-AAC ソフトウェア エンコーダ
Android 17 では、システム提供の Extended HE-AAC ソフトウェア エンコーダが導入されています。このエンコーダは、統合音声とオーディオ コーディングを使用して、低ビットレートと高ビットレートの両方をサポートします。このエンコーダには、MediaCodec API を介して、名前 c2.android.xheaac.encoder を使用するか、audio/mp4a-latm MIME タイプをクエリすることでアクセスできます。
val encoder = MediaCodec.createByCodecName("c2.android.xheaac.encoder")
val format = MediaFormat.createAudioFormat(MediaFormat.MIMETYPE_AUDIO_AAC, 48000, 1)
format.setInteger(MediaFormat.KEY_BIT_RATE, 24000)
format.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectXHE)
encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE)パフォーマンスとバッテリーの強化
アイドル状態でのアラームを許可するリスナー サポートにより、ウェイクロックを削減
Android 17 では、PendingIntent ではなく OnAlarmListener を受け入れる AlarmManager.setExactAndAllowWhileIdle の新しいバリアントが導入されています。この新しいコールバック ベースのメカニズムは、ソケット接続を維持するメッセージ アプリなど、定期的なタスクを実行するために継続的な wake lock に依存しているアプリに最適です。
val alarmManager = getSystemService(AlarmManager::class.java)
val listener = AlarmManager.OnAlarmListener {
// Do work here
}
alarmManager.setExactAndAllowWhileIdle(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + 60000,
listener,
null
)プライバシーの更新
システム提供の位置情報ボタン
Android では、システムがレンダリングする位置情報ボタンが導入されます。このボタンは、Android Jetpack ライブラリを使用してアプリのレイアウトに直接埋め込むことができます。ユーザーがこのシステムボタンをタップすると、アプリは現在のセッションに限り正確な位置情報へのアクセスを許可されます。これを実装するには、USE_LOCATION_BUTTON 権限を宣言する必要があります。
タッチキーボードと物理キーボードのパスワード表示設定を個別に設定
この機能により、既存の「パスワードを表示」システム設定が、タッチベースの入力用と物理(ハードウェア)キーボード入力用の 2 つの異なるユーザー設定に分割されます。物理キーボードで入力した文字は、デフォルトですぐに非表示になるようになりました。
val isPhysical = event.source and InputDevice.SOURCE_KEYBOARD == InputDevice.SOURCE_KEYBOARD val shouldShow = android.text.ShowSecretsSetting.shouldShowPassword(context, isPhysical)
セキュリティ
読み取り専用の動的コード読み込みの適用
コード インジェクション攻撃に対するセキュリティを強化するため、Android では、動的に読み込まれるネイティブ ライブラリを読み取り専用にする必要があります。アプリが Android 17 以降をターゲットとしている場合、System.load() を使用して読み込まれるすべてのネイティブ ファイルは、事前に読み取り専用としてマークされている必要があります。
val libraryFile = File(context.filesDir, "my_native_lib.so") // Mark the file as read-only before loading to comply with Android 17+ security requirements libraryFile.setReadOnly() System.load(libraryFile.absolutePath)
ポスト量子暗号(PQC)ハイブリッド APK 署名
量子コンピューティングの将来の進歩に備えるため、Android は新しい v3.2 APK 署名スキームを通じてポスト量子暗号(PQC)のサポートを導入します。このスキームは、従来型の署名と ML-DSA 署名を組み合わせたハイブリッド アプローチを採用しています。
ユーザー エクスペリエンスとシステム UI
外部ディスプレイでのウィジェットのサポートを強化
この機能により、DP 単位または SP 単位を使用して、ピクセル密度の異なる接続ディスプレイまたは外部ディスプレイに表示されるアプリ ウィジェットの視覚的な一貫性が向上します。
val options = appWidgetManager.getAppWidgetOptions(appWidgetId) val displayId = options.getInt(AppWidgetManager.OPTION_APPWIDGET_DISPLAY_ID) val remoteViews = RemoteViews(context.packageName, R.layout.widget_layout) remoteViews.setViewPadding( R.id.container, 16f, 8f, 16f, 8f, TypedValue.COMPLEX_UNIT_DIP )
ホーム画面の非表示のアプリラベル
Android に、ホーム画面のワークスペースでアプリ名(ラベル)を非表示にするユーザー設定が追加されました。アプリアイコンが明確で認識しやすいことを確認します。
パソコンのインタラクティブ ピクチャー イン ピクチャー
従来のピクチャー イン ピクチャーとは異なり、これらの固定されたウィンドウは、デスクトップ モードで他のアプリケーション ウィンドウの手前に常に表示されたまま、インタラクティブな操作が可能です。
val appTask: ActivityManager.AppTask = activity.getSystemService(ActivityManager::class.java).appTasks[0]
appTask.requestWindowingLayer(
ActivityManager.AppTask.WINDOWING_LAYER_PINNED,
context.mainExecutor,
object : OutcomeReceiver<Int, Exception> {
override fun onResult(result: Int) {
if (result == ActivityManager.AppTask.WINDOWING_LAYER_REQUEST_GRANTED) {
// Task successfully moved to pinned layer
}
}
override fun onError(error: Exception) {}
}
)画面録画ツールバーのデザインを刷新
コア機能
VPN アプリの除外設定
新しい ACTION_VPN_APP_EXCLUSION_SETTINGS インテントを使用すると、アプリはシステム管理の設定画面を起動できます。この画面で、ユーザーは VPN トンネルをバイパスするアプリを選択できます。
val intent = Intent(Settings.ACTION_VPN_APP_EXCLUSION_SETTINGS)
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent)
}OpenJDK 25 および 21 API の更新
このアップデートでは、OpenJDK 21 と OpenJDK 25 の広範な機能と改良が導入されています。これには、最新の Unicode サポートや、TLS の名前付きグループに対する SSL サポートの強化が含まれます。
Android 17 を使ってみる
サポートされている Google Pixel デバイスを登録するか、Android Emulator で 64 ビット システム イメージを使用できます。
- 新しい SDK でコンパイルし、フィードバック ページから問題を報告してください。
- 現在のアプリの互換性をテストし、Android 17 の変更がアプリに影響するかどうかを確認します。
詳しくは、Android 17 デベロッパー サイトをご覧ください。
-
サービスに関する最新情報本日、Android 17 をリリースし、サポート対象のほとんどの Google Pixel デバイスでご利用いただけるようになりました。Android 17 を搭載した新しいデバイスは、今後数か月以内にリリースされる予定です。
Matthew McCullough • 所要時間: 13 分 -
サービスに関する最新情報本日、Android Dev Summit において、日常的な摩擦を解消し、優れた Android アプリをより柔軟に構築できるように設計された多くのツールと API の幅広い提供を発表します。
Matthew McCullough • 所要時間: 4 分 -
サービスに関する最新情報本日、Google は、エンジニアが完了するまでに数日から 1 週間かかる非常に複雑なタスクである、長期的なタスク(LHT)の最初のセットをリリースします。また、対応するモデル プロバイダのエージェントから、エージェント評価も導入します。
Matthew McCullough • 所要時間: 3 分
Android 開発に関する最新の分析情報を毎週メールでお届けします。