Android 17 は、本日ベータ版 3 で正式にプラットフォームの安定版に到達しました。つまり、API サーフェスがロックされ、最終的な互換性テストを実施して、Android 17 をターゲットとするアプリを Google Play ストアにプッシュできるようになります。さらに、Beta 3 では、より優れた、より安全で、高度に統合されたアプリケーションを構築するためのさまざまな新機能が導入されています。
アプリ、ライブラリ、ツール、ゲームエンジンを準備しましょう。
SDK、ライブラリ、ツール、ゲームエンジンを開発している場合は、互換性の問題によって下流のアプリやゲームのデベロッパーがブロックされるのを防ぎ、最新の SDK 機能を利用できるようにするために、必要なアップデートを今すぐ準備することがさらに重要になります。Android 17 を完全にサポートするためにアップデートが必要な場合は、ダウンストリーム デベロッパーにお知らせください。
テストでは、Android 17 ベータ版 3 を実行しているデバイスまたはエミュレータに、Google Play またはその他の手段を使用して、ライブラリまたはエンジンを利用する本番環境アプリまたはテストアプリをインストールします。アプリのすべてのフローをテストし、機能や 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 チャンネル、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 の新しいバリアントが導入されています。この新しいコールバック ベースのメカニズムは、現在、連続的なウェイクロックに依存して定期的なタスク(ソケット接続を維持するメッセージ アプリなど)を実行しているアプリに最適です。
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 を使ってみる
サポートされている Pixel デバイスを登録するか、Android Emulator で 64 ビットのシステム イメージを使用することができます。
- 新しい SDK でコンパイルし、フィードバック ページで問題を報告してください。
- 現在のアプリの互換性をテストし、Android 17 の変更がアプリに影響するかどうかを確認します。
詳しくは、Android 17 デベロッパー サイトをご覧ください。
続きを読む
-
プロダクト ニュース
本日、複雑な推論と自律的なツール呼び出し機能を備えた最新の最先端オープンモデルである Gemma 4 を使用して、Android 開発を強化します。
Matthew McCullough • 所要時間: 2 分
-
プロダクト ニュース
Android エコシステムの柱は、ユーザーの信頼に対する共通の取り組みです。モバイル環境の進化に伴い、機密情報の保護に対するアプローチも進化しています。
Robert Clifford • 所要時間: 3 分
-
プロダクト ニュース
Google は、高品質の Android アプリをより迅速かつ簡単に構築できるようにしたいと考えています。生産性を高めるための方法の一つとして、AI を活用しています。
Matthew McCullough • 所要時間: 2 分
メールを受け取る
Android 開発に関する最新の分析情報を毎週メールでお届けします。