Android 15 memperkenalkan fitur dan API baru yang hebat untuk para developer. Bagian berikut merangkum fitur ini untuk membantu Anda mulai menggunakan API terkait.
Untuk melihat daftar mendetail tentang API yang ditambahkan, diubah, dan dihapus, baca laporan perbedaan API. Untuk mengetahui detail tentang API yang ditambahkan, buka referensi API Android — untuk Android 15, cari API yang ditambahkan di level API 35. Untuk mempelajari area tempat perubahan platform dapat memengaruhi aplikasi Anda, pastikan untuk memeriksa perubahan perilaku Android 15 untuk aplikasi yang menargetkan Android 15 dan untuk semua aplikasi.
Kamera dan media
Android 15 menyertakan berbagai fitur yang meningkatkan pengalaman kamera dan media serta memberi Anda akses ke alat dan hardware untuk mendukung kreator dalam mewujudkan visi mereka di Android.
Untuk mengetahui informasi selengkapnya tentang fitur dan solusi developer terbaru untuk media dan kamera Android, lihat materi Membangun pengalaman media dan kamera Android modern dari Google I/O.
Peningkatan Cahaya Rendah
Android 15 引入了弱光增强功能,这是一种自动曝光模式,适用于 Camera 2 和夜间模式相机扩展。“弱光增强”功能可在光线昏暗的环境下调整预览画面的曝光度。这与夜间模式相机扩展程序创建静态图片的方式不同,因为夜间模式会将一系列照片组合起来,以创建一张经过增强的单张图片。虽然夜间模式非常适合拍摄静态图片,但无法创建连续的帧流,而“低光增强”功能可以。因此,弱光增强功能可启用相机功能,例如:
- 提供增强型图片预览,以便用户更好地取景拍摄低光照片
- 在光线不足的情况下扫描二维码
如果您启用“弱光增强”功能,该功能会在光线较弱时自动开启,在光线较强时关闭。
应用可以在光线昏暗的环境下录制预览画面,以保存经过亮度提升的视频。
如需了解详情,请参阅弱光增强。
Kontrol kamera dalam aplikasi
Android 15 menambahkan ekstensi untuk lebih mengontrol hardware kamera dan algoritmanya di perangkat yang didukung:
- Penyesuaian kekuatan flash lanjutan yang memungkinkan kontrol intensitas flash
yang presisi dalam mode
SINGLE
danTORCH
saat mengambil gambar.
Kontrol ruang kosong HDR
Android 15 memilih headroom HDR yang sesuai dengan kemampuan perangkat
yang mendasari dan kedalaman bit panel. Untuk halaman yang memiliki banyak konten
SDR, seperti aplikasi pesan yang menampilkan satu thumbnail HDR, perilaku
ini dapat memengaruhi kecerahan konten
SDR yang dirasakan. Android 15 memungkinkan Anda mengontrol headroom HDR dengan
setDesiredHdrHeadroom
untuk mencapai keseimbangan antara konten
SDR dan HDR.

Kontrol keras suara
Android 15 引入了对 CTA-2075 响度标准的支持,可帮助您避免音频响度不一致,并确保用户在切换内容时不必不断调整音量。系统利用输出设备(头戴式耳机和扬声器)的已知特性以及 AAC 音频内容中提供的响度元数据,智能调整音频响度和动态范围压缩级别。
如需启用此功能,您需要确保 AAC 内容中提供响度元数据,并在应用中启用平台功能。为此,您可以通过使用关联的 AudioTrack
中的音频会话 ID 调用其 create 工厂方法来实例化 LoudnessCodecController
对象;这会自动开始应用音频更新。您可以传递 OnLoudnessCodecUpdateListener
来修改或过滤响度参数,然后再将其应用于 MediaCodec
。
// Media contains metadata of type MPEG_4 OR MPEG_D
val mediaCodec = …
val audioTrack = AudioTrack.Builder()
.setSessionId(sessionId)
.build()
...
// Create new loudness controller that applies the parameters to the MediaCodec
try {
val lcController = LoudnessCodecController.create(mSessionId)
// Starts applying audio updates for each added MediaCodec
}
AndroidX media3 ExoPlayer 也将更新,以使用
LoudnessCodecController
API,可实现无缝应用集成。
Perangkat MIDI 2.0 virtual
Android 13 added support for connecting to MIDI 2.0 devices using USB, which communicate using Universal MIDI Packets (UMP). Android 15 extends UMP support to virtual MIDI apps, enabling composition apps to control synthesizer apps as a virtual MIDI 2.0 device just like they would with an USB MIDI 2.0 device.
Decoding software AV1 yang lebih efisien
dav1d 是 VideoLAN 推出的热门 AV1 软件解码器,适用于不支持硬件 AV1 解码的 Android 设备。与旧版 AV1 软件解码器相比,dav1d 的性能最高可提升 3 倍,让更多用户(包括一些低端和中端设备)能够播放高清 AV1 视频。
您的应用需要选择启用 dav1d,方法是通过名称 "c2.android.av1-dav1d.decoder"
调用它。在后续更新中,dav1d 将成为默认的 AV1 软件解码器。此支持已标准化,并向后移植到收到 Google Play 系统更新的 Android 11 设备。
Alat dan produktivitas developer
Meskipun sebagian besar upaya kami untuk meningkatkan produktivitas Anda berpusat pada alat seperti Android Studio, Jetpack Compose, dan library Android Jetpack, kami selalu mencari cara di platform untuk membantu Anda mewujudkan visi dengan lebih mudah.
Update OpenJDK 17
Android 15 melanjutkan pekerjaan memuat ulang library inti Android agar selaras dengan fitur dalam rilis OpenJDK LTS terbaru.
Fitur dan peningkatan utama berikut disertakan:
- Peningkatan kualitas hidup di sekitar buffer NIO
- Streaming
- Metode
math
danstrictmath
tambahan - Update paket
util
termasukcollection
,map
, danset
yang diurutkan - Dukungan
ByteBuffer
diDeflater
- Update keamanan seperti
X500PrivateCredential
dan update kunci keamanan
API ini diupdate di lebih dari satu miliar perangkat yang menjalankan Android 12 (API level 31) dan yang lebih tinggi melalui update Sistem Google Play, sehingga Anda dapat menargetkan fitur pemrograman terbaru.
Peningkatan PDF
Android 15 includes substantial improvements to the PdfRenderer
APIs. Apps can incorporate advanced features such as rendering
password-protected files, annotations, form editing,
searching, and selection with copy. Linearized PDF
optimizations are supported to speed local PDF viewing and reduce resource use.
The Jetpack PDF library uses these APIs to simplify adding PDF
viewing capabilities to your app.

The PdfRenderer
has been moved to a module that can be updated using Google
Play system updates independent of the platform release, and we're supporting
these changes back to Android 11 (API level 30) by creating a compatible
pre-Android 15 version of the API surface, called
PdfRendererPreV
.
Penyempurnaan pengalihan bahasa otomatis
Android 14 added on-device, multi-language recognition in audio with automatic
switching between languages, but this can cause words to get dropped,
especially when languages switch with less of a pause between the two
utterances. Android 15 adds additional controls to help apps tune this switching
to their use case.
EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS
confines the automatic switching to the beginning of the audio session, while
EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES
deactivates the
language switching after a defined number of switches. These options are
particularly useful if you expect that there will be a single language spoken
during the session that should be autodetected.
Peningkatan OpenType Variable Font API
Android 15 meningkatkan kegunaan font variabel OpenType. Anda dapat membuat
instance FontFamily
dari font variabel tanpa menentukan sumbu bobot
dengan buildVariableFamily
API. Perender teks mengganti nilai
dari sumbu wght
agar cocok dengan teks yang menampilkan.
Menggunakan API ini sangat menyederhanakan kode untuk membuat Typeface
:
Kotlin
val newTypeface = Typeface.CustomFallbackBuilder( FontFamily.Builder( Font.Builder(assets, "RobotoFlex.ttf").build()) .buildVariableFamily()) .build()
Java
Typeface newTypeface = Typeface.CustomFallbackBuilder( new FontFamily.Builder( new Font.Builder(assets, "RobotoFlex.ttf").build()) .buildVariableFamily()) .build();
Sebelumnya, untuk membuat Typeface
yang sama, Anda memerlukan lebih banyak kode:
Kotlin
val oldTypeface = Typeface.CustomFallbackBuilder( FontFamily.Builder( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 400") .setWeight(400) .build()) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 100") .setWeight(100) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 200") .setWeight(200) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 300") .setWeight(300) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 500") .setWeight(500) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 600") .setWeight(600) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 700") .setWeight(700) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 800") .setWeight(800) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 900") .setWeight(900) .build() ).build() ).build()
Java
Typeface oldTypeface = new Typeface.CustomFallbackBuilder( new FontFamily.Builder( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 400") .setWeight(400) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 100") .setWeight(100) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 200") .setWeight(200) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 300") .setWeight(300) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 500") .setWeight(500) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 600") .setWeight(600) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 700") .setWeight(700) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 800") .setWeight(800) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 900") .setWeight(900) .build() ) .build() ).build();
Berikut ini contoh cara Typeface
dibuat dengan API lama dan baru
merender:
Dalam contoh ini, Typeface
yang dibuat dengan API lama tidak memiliki
menciptakan bobot font yang akurat untuk 350, 450, 550 dan 650
Font
, sehingga perender akan kembali ke bobot terdekat. Jadi ketika
dalam hal ini, 300 dirender, bukan 350, 400 dirender, bukan 450, dan
dan seterusnya. Sebaliknya, Typeface
yang dibuat dengan API baru akan secara dinamis membuat
instance Font
untuk bobot tertentu, jadi bobot yang akurat dirender untuk 350,
450, 550, dan 650.
Kontrol pemisah baris terperinci
从 Android 15 开始,TextView
和底层行断开符可以将给定部分文本保留在同一行中,以提高可读性。您可以通过在字符串资源或 createNoBreakSpan
中使用 <nobreak>
标记来充分利用此换行符自定义功能。同样,您可以使用 <nohyphen>
标记或 createNoHyphenationSpan
来防止对字词进行分词。
例如,以下字符串资源不包含换行符,在呈现时,文本“Pixel 8 Pro”会在不合适的位置换行:
<resources>
<string name="pixel8pro">The power and brains behind Pixel 8 Pro.</string>
</resources>
相比之下,此字符串资源包含 <nobreak>
标记,该标记会将字词“Pixel 8 Pro”换行,并防止换行:
<resources>
<string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>
以下图片展示了这些字符串呈现方式的差异:

<nobreak>
标记换行。
<nobreak>
标记封装“Pixel 8 Pro.”短语的同一行文本的布局。Pengarsipan aplikasi
Android and Google Play announced support for app archiving last year, allowing users to free up space by partially removing infrequently used apps from the device that were published using Android App Bundle on Google Play. Android 15 includes OS level support for app archiving and unarchiving, making it easier for all app stores to implement it.
Apps with the REQUEST_DELETE_PACKAGES
permission can call the
PackageInstaller
requestArchive
method to request archiving an
installed app package, which removes the APK and any cached files, but persists
user data. Archived apps are returned as displayable apps through the
LauncherApps
APIs; users will see a UI treatment to highlight that those
apps are archived. If a user taps on an archived app, the responsible installer
will get a request to unarchive it, and the restoration process can be
monitored by the ACTION_PACKAGE_ADDED
broadcast.
使用开发者选项在设备上启用 16 KB 模式

切换以 16KB 页面大小启动设备开发者选项,以在 16 KB 模式下启动设备。
从 Android 15 QPR1 开始,您可以使用某些设备上提供的开发者选项,以 16 KB 模式启动设备并执行设备端测试。在使用开发者选项之前,请依次前往设置 > 系统 > 软件更新,并应用所有可用的更新。
此开发者选项适用于以下设备:
Pixel 8 和 8 Pro(搭载 Android 15 QPR1 或更高版本)
Pixel 8a(搭载 Android 15 QPR1 或更高版本)
Pixel 9、9 Pro 和 9 Pro XL(搭载 Android 15 QPR2 Beta 2 或更高版本)
Grafik
Android 15 menghadirkan peningkatan grafis terbaru, termasuk ANGLE dan penambahan pada sistem grafis Canvas.
Memodernisasi akses GPU Android
Hardware Android telah berkembang cukup banyak sejak awal ketika OS inti akan berjalan di satu CPU dan GPU diakses menggunakan API berdasarkan pipeline fungsi tetap. API grafis Vulkan® telah tersedia di NDK sejak Android 7.0 (API level 24) dengan abstraksi tingkat rendah yang lebih mencerminkan hardware GPU modern, diskalakan dengan lebih baik untuk mendukung beberapa core CPU, dan menawarkan overhead driver CPU yang lebih rendah — sehingga meningkatkan performa aplikasi. Vulkan didukung oleh semua game engine modern.
Vulkan adalah antarmuka pilihan Android untuk GPU. Oleh karena itu, Android 15 menyertakan ANGLE sebagai lapisan opsional untuk menjalankan OpenGL® ES di atas Vulkan. Beralih ke ANGLE akan menstandarkan implementasi OpenGL Android untuk meningkatkan kompatibilitas, dan, dalam beberapa kasus, meningkatkan performa. Anda dapat menguji stabilitas dan performa aplikasi OpenGL ES dengan ANGLE dengan mengaktifkan opsi developer di Setelan -> Sistem -> Opsi Developer -> Eksperimental: Aktifkan ANGLE di Android 15.
Roadmap Android ANGLE di Vulkan

Sebagai bagian dari penyederhanaan stack GPU, ke depannya kami akan mengirimkan ANGLE sebagai driver sistem GL di lebih banyak perangkat baru, dengan ekspektasi di masa mendatang bahwa OpenGL/ES hanya akan tersedia melalui ANGLE. Meskipun demikian, kami berencana untuk melanjutkan dukungan untuk OpenGL ES di semua perangkat.
Rekomendasi langkah selanjutnya
Gunakan opsi developer untuk memilih driver ANGLE untuk OpenGL ES dan menguji aplikasi Anda. Untuk project baru, sebaiknya gunakan Vulkan untuk C/C++.
Peningkatan untuk Canvas
Android 15 continues our modernization of Android's Canvas graphics system with additional capabilities:
Matrix44
provides a 4x4 matrix for transforming coordinates that should be used when you want to manipulate the canvas in 3D.clipShader
intersects the current clip with the specified shader, whileclipOutShader
sets the clip to the difference of the current clip and the shader, each treating the shader as an alpha mask. This supports the drawing of complex shapes efficiently.
Performa dan baterai
Android terus berfokus untuk membantu Anda meningkatkan performa dan kualitas aplikasi Anda. Android 15 memperkenalkan API yang membantu membuat tugas di aplikasi Anda dieksekusi secara lebih efisien, mengoptimalkan performa aplikasi, dan mengumpulkan insight tentang aplikasi Anda.
Untuk mengetahui praktik terbaik yang hemat baterai, cara men-debug penggunaan jaringan dan daya, serta detail tentang cara kami meningkatkan efisiensi baterai tugas latar belakang di Android 15 dan Android versi terbaru, lihat materi Meningkatkan efisiensi baterai tugas latar belakang di Android dari Google I/O.
ApplicationStartInfo API
Pada versi Android sebelumnya, startup aplikasi agak misterius. Sulit
untuk menentukan dalam aplikasi Anda apakah aplikasi dimulai dari status cold, warm,
atau hot. Sulit juga untuk mengetahui berapa lama aplikasi Anda menghabiskan waktu selama
berbagai fase peluncuran: melakukan fork pada proses, memanggil onCreate
, menggambar
frame pertama, dan lainnya. Saat class Application
dibuat instance-nya, Anda tidak
memiliki cara untuk mengetahui apakah aplikasi dimulai dari siaran, penyedia konten, tugas, pencadangan, booting selesai, alarm, atau Activity
.
ApplicationStartInfo
API di Android 15 menyediakan
semua hal ini dan lainnya. Anda bahkan dapat memilih untuk menambahkan stempel waktu Anda sendiri ke dalam
alur untuk membantu mengumpulkan data pengaturan waktu di satu tempat. Selain mengumpulkan
metrik, Anda dapat menggunakan ApplicationStartInfo
untuk membantu mengoptimalkan langsung
startup aplikasi; misalnya, Anda dapat menghilangkan pembuatan instance library terkait
UI yang mahal dalam class Application
saat aplikasi dimulai karena
siaran.
Informasi mendetail tentang ukuran aplikasi
Sejak Android 8.0 (API level 26), Android telah menyertakan
StorageStats.getAppBytes
API yang merangkum ukuran
aplikasi yang diinstal sebagai satu angka byte, yang merupakan jumlah ukuran APK, ukuran file yang diekstrak dari APK, dan file yang dihasilkan di
perangkat seperti kode yang dikompilasi ahead-of-time (AOT). Jumlah ini tidak terlalu
mendalam dalam hal cara aplikasi Anda menggunakan penyimpanan.
Android 15 menambahkan
StorageStats.getAppBytesByDataType([type])
API, yang memungkinkan
Anda mendapatkan insight tentang cara aplikasi menggunakan semua ruang tersebut, termasuk pemisahan file
APK, AOT, dan kode terkait percepatan, metadata dex, library, dan profil
yang dipandu.
Pembuatan profil yang dikelola aplikasi
Android 15 menyertakan class ProfilingManager
,
yang memungkinkan Anda mengumpulkan informasi pembuatan profil dari dalam aplikasi seperti heap
dump, profil heap, sampling stack, dan lainnya. Fitur ini memberikan callback ke aplikasi Anda dengan tag yang disediakan untuk mengidentifikasi file output, yang dikirim ke direktori file aplikasi Anda. API melakukan pembatasan kapasitas untuk meminimalkan dampak
performa.
Untuk menyederhanakan pembuatan permintaan pembuatan profil di aplikasi Anda, sebaiknya gunakan
AndroidX API Profiling
yang sesuai, yang tersedia
di Core 1.15.0-rc01 atau yang lebih tinggi.
Peningkatan database SQLite
Android 15 introduces SQLite APIs that expose advanced features from the underlying SQLite engine that target specific performance issues that can manifest in apps. These APIs are included with the update of SQLite to version 3.44.3.
Developers should consult best practices for SQLite performance to get the most out of their SQLite database, especially when working with large databases or when running latency-sensitive queries.
- Read-only deferred transactions: when issuing transactions that are
read-only (don't include write statements), use
beginTransactionReadOnly()
andbeginTransactionWithListenerReadOnly(SQLiteTransactionListener)
to issue read-onlyDEFERRED
transactions. Such transactions can run concurrently with each other, and if the database is in WAL mode, they can run concurrently withIMMEDIATE
orEXCLUSIVE
transactions. - Row counts and IDs: APIs were added to retrieve the count of changed
rows or the last inserted row ID without issuing an additional query.
getLastChangedRowCount()
returns the number of rows that were inserted, updated, or deleted by the most recent SQL statement within the current transaction, whilegetTotalChangedRowCount()
returns the count on the current connection.getLastInsertRowId()
returns therowid
of the last row to be inserted on the current connection. - Raw statements: issue a raw SQlite statement, bypassing convenience wrappers and any additional processing overhead that they may incur.
Update Android Dynamic Performance Framework
Android 15 melanjutkan investasi kami dalam Android Dynamic Performance Framework (ADPF), sekumpulan API yang memungkinkan game dan aplikasi yang membutuhkan performa tinggi untuk berinteraksi lebih langsung dengan sistem daya dan termal perangkat Android. Di perangkat yang didukung, Android 15 menambahkan kemampuan ADPF:
- Mode hemat daya untuk sesi petunjuk guna menunjukkan bahwa thread terkait harus lebih memilih penghematan daya daripada performa, sangat cocok untuk beban kerja latar belakang yang berjalan lama.
- Durasi kerja GPU dan CPU dapat dilaporkan dalam sesi petunjuk, sehingga sistem dapat menyesuaikan frekuensi CPU dan GPU secara bersamaan untuk memenuhi permintaan beban kerja dengan sebaik mungkin.
- Batas headroom termal untuk menafsirkan kemungkinan status throttling termal berdasarkan prediksi headroom.
Untuk mempelajari lebih lanjut cara menggunakan ADPF di aplikasi dan game Anda, buka dokumentasi.
Privasi
Android 15 menyertakan berbagai fitur yang membantu developer aplikasi melindungi privasi pengguna.
Deteksi perekaman layar
Android 15 menambahkan dukungan untuk aplikasi guna mendeteksi bahwa aplikasi sedang direkam. Callback dipanggil setiap kali aplikasi melakukan transisi antara terlihat atau tidak terlihat dalam perekaman layar. Aplikasi dianggap terlihat jika aktivitas yang dimiliki oleh UID proses pendaftaran direkam. Dengan cara ini, jika aplikasi melakukan operasi yang sensitif, Anda dapat memberi tahu pengguna bahwa mereka sedang direkam.
val mCallback = Consumer<Int> { state ->
if (state == SCREEN_RECORDING_STATE_VISIBLE) {
// We're being recorded
} else {
// We're not being recorded
}
}
override fun onStart() {
super.onStart()
val initialState =
windowManager.addScreenRecordingCallback(mainExecutor, mCallback)
mCallback.accept(initialState)
}
override fun onStop() {
super.onStop()
windowManager.removeScreenRecordingCallback(mCallback)
}
Kemampuan IntentFilter yang diperluas
Android 15 builds in support for more precise Intent
resolution through
UriRelativeFilterGroup
, which contains a set of
UriRelativeFilter
objects that form a set of Intent
matching rules that must each be satisfied, including URL query parameters, URL
fragments, and blocking or exclusion rules.
These rules can be defined in the AndroidManifest
XML file with the
<uri-relative-filter-group>
tag, which can optionally include an
android:allow
tag. These tags can contain <data>
tags that use existing data
tag attributes as well as the android:query
and android:fragment
attributes.
Here's an example of the AndroidManifest
syntax:
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="astore.com" />
<uri-relative-filter-group>
<data android:pathPrefix="/auth" />
<data android:query="region=na" />
</uri-relative-filter-group>
<uri-relative-filter-group android:allow="false">
<data android:pathPrefix="/auth" />
<data android:query="mobileoptout=true" />
</uri-relative-filter-group>
<uri-relative-filter-group android:allow="false">
<data android:pathPrefix="/auth" />
<data android:fragmentPrefix="faq" />
</uri-relative-filter-group>
</intent-filter>
Ruang privasi
Private space lets users create a separate space on their device where they can keep sensitive apps away from prying eyes, under an additional layer of authentication. The private space uses a separate user profile. The user can choose to use the device lock or a separate lock factor for the private space.
Apps in the private space show up in a separate container in the launcher, and are hidden from the recents view, notifications, settings, and from other apps when the private space is locked. User-generated and downloaded content (such as media or files) and accounts are separated between the private space and the main space. The system sharesheet and the photo picker can be used to give apps access to content across spaces when the private space is unlocked.
Users can't move existing apps and their data into the private space. Instead, users select an install option in the private space to install an app using whichever app store they prefer. Apps in the private space are installed as separate copies from any apps in the main space (new copies of the same app).
When a user locks the private space, the profile is stopped. While the profile is stopped, apps in the private space are no longer active and can't perform foreground or background activities, including showing notifications.
We recommend that you test your app with private space to make sure your app works as expected, especially if your app falls into one of the following categories:
- Apps with logic for work profiles that assumes that any installed copies of their app that aren't in the main profile are in the work profile.
- Medical apps
- Launcher apps
- App store apps
Membuat kueri pilihan pengguna terbaru untuk Akses Foto yang Dipilih
现在,如果应用获得了部分访问权限,则只能突出显示最近选择的照片和视频。此功能可以改善频繁请求访问照片和视频的应用的用户体验。如需在应用中使用此功能,请在通过 ContentResolver
查询 MediaStore
时启用 QUERY_ARG_LATEST_SELECTION_ONLY
参数。
Kotlin
val externalContentUri = MediaStore.Files.getContentUri("external") val mediaColumns = arrayOf( FileColumns._ID, FileColumns.DISPLAY_NAME, FileColumns.MIME_TYPE, ) val queryArgs = bundleOf( // Return only items from the last selection (selected photos access) QUERY_ARG_LATEST_SELECTION_ONLY to true, // Sort returned items chronologically based on when they were added to the device's storage QUERY_ARG_SQL_SORT_ORDER to "${FileColumns.DATE_ADDED} DESC", QUERY_ARG_SQL_SELECTION to "${FileColumns.MEDIA_TYPE} = ? OR ${FileColumns.MEDIA_TYPE} = ?", QUERY_ARG_SQL_SELECTION_ARGS to arrayOf( FileColumns.MEDIA_TYPE_IMAGE.toString(), FileColumns.MEDIA_TYPE_VIDEO.toString() ) )
Java
Uri externalContentUri = MediaStore.Files.getContentUri("external"); String[] mediaColumns = { FileColumns._ID, FileColumns.DISPLAY_NAME, FileColumns.MIME_TYPE }; Bundle queryArgs = new Bundle(); queryArgs.putBoolean(MediaStore.QUERY_ARG_LATEST_SELECTION_ONLY, true); queryArgs.putString(MediaStore.QUERY_ARG_SQL_SORT_ORDER, FileColumns.DATE_ADDED + " DESC"); queryArgs.putString(MediaStore.QUERY_ARG_SQL_SELECTION, FileColumns.MEDIA_TYPE + " = ? OR " + FileColumns.MEDIA_TYPE + " = ?"); queryArgs.putStringArray(MediaStore.QUERY_ARG_SQL_SELECTION_ARGS, new String[] { String.valueOf(FileColumns.MEDIA_TYPE_IMAGE), String.valueOf(FileColumns.MEDIA_TYPE_VIDEO) });
Privacy Sandbox di Android
Android 15 includes the latest Android Ad Services extensions, incorporating the latest version of the Privacy Sandbox on Android. This addition is part of our work to develop technologies that improve user privacy and enable effective, personalized advertising experiences for mobile apps. Our privacy sandbox page has more information about the Privacy Sandbox on Android developer preview and beta programs to help you get started.
Health Connect
Android 15 集成了与 Health Connect by Android 相关的最新扩展程序。Health Connect by Android 是一个安全的集中式平台,可用于管理和共享应用收集的健康与健身数据。此次更新 增加了对健身、 营养、体表温度、训练计划等。
体表温度追踪功能让用户可以更精确地存储和分享体表温度 来自穿戴式设备或其他跟踪设备的体温数据。
训练计划是一种结构化的锻炼计划,可帮助用户实现健身目标。训练计划支持各种完成和表现目标:
如需详细了解 Android 中 Health Connect 的最新更新,请参阅 利用 Android 打造自适应体验 健康演讲。
Berbagi layar aplikasi
Android 15 mendukung berbagi layar aplikasi sehingga pengguna dapat berbagi atau merekam
jendela aplikasi, bukan seluruh layar perangkat. Fitur ini, yang pertama kali diaktifkan di
Android 14 QPR2, mencakup
callback MediaProjection
yang memungkinkan aplikasi Anda
menyesuaikan pengalaman berbagi layar aplikasi. Perhatikan bahwa untuk aplikasi yang menargetkan
Android 14 (level API 34) atau yang lebih tinggi,
izin pengguna diperlukan untuk setiap
sesi pengambilan MediaProjection
.
Pengalaman pengguna dan UI sistem
Android 15 memberi developer dan pengguna aplikasi kontrol dan fleksibilitas yang lebih besar untuk mengonfigurasi perangkat agar sesuai dengan kebutuhan mereka.
Untuk mempelajari lebih lanjut cara menggunakan peningkatan terbaru di Android 15 untuk meningkatkan pengalaman pengguna aplikasi Anda, tonton sesi Meningkatkan pengalaman pengguna aplikasi Android Anda dari Google I/O.
Pratinjau widget yang lebih kaya dengan Generated Previews API
Sebelum Android 15, satu-satunya cara untuk menyediakan pratinjau pemilih widget adalah dengan menentukan resource gambar atau tata letak statis. Pratinjau ini sering kali berbeda secara signifikan dengan tampilan widget sebenarnya saat ditempatkan di layar utama. Selain itu, resource statis tidak dapat dibuat dengan Jetpack Glance, sehingga developer Glance harus mengambil screenshot widget atau membuat tata letak XML untuk memiliki pratinjau widget.
Android 15 menambahkan dukungan untuk pratinjau yang dihasilkan. Artinya, widget aplikasi
penyedia dapat membuat RemoteViews
untuk digunakan sebagai pratinjau pemilih,
resource statis.

Push API
Aplikasi dapat menyediakan pratinjau yang dihasilkan melalui API push. Aplikasi dapat memberikan
melihat pratinjau di titik mana pun dalam siklus prosesnya, dan tidak menerima permintaan eksplisit
dari {i>host<i} untuk
menyediakan pratinjau. Pratinjau disimpan di AppWidgetService
,
dan host dapat memintanya secara on-demand. Contoh berikut memuat widget XML
dan menyetelnya sebagai pratinjau:
AppWidgetManager.getInstance(appContext).setWidgetPreview(
ComponentName(
appContext,
SociaLiteAppWidgetReceiver::class.java
),
AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
RemoteViews("com.example", R.layout.widget_preview)
)
Alur yang diharapkan adalah:
- Penyedia widget akan memanggil
setWidgetPreview
kapan saja. Pratinjau yang disediakan dipertahankan diAppWidgetService
dengan info penyedia lainnya. setWidgetPreview
memberi tahu host tentang pratinjau yang diperbarui melalui callbackAppWidgetHost.onProvidersChanged
. Sebagai respons, widget {i>host<i} memuat ulang semua informasi penyedianya.- Saat menampilkan pratinjau widget, host akan memeriksa
AppWidgetProviderInfo.generatedPreviewCategories
, dan jika kategori yang dipilih tersedia, panggilAppWidgetManager.getWidgetPreview
untuk menampilkan pratinjau tersimpan untuk penyedia ini.
Waktu untuk menelepon setWidgetPreview
Karena tidak ada callback untuk menyediakan pratinjau, aplikasi dapat memilih untuk mengirim melihat pratinjau kapan saja saat dijalankan. Frekuensi update pratinjau bergantung pada kasus penggunaan widget.
Daftar berikut menjelaskan dua kategori utama kasus penggunaan pratinjau:
- Penyedia yang menampilkan data sebenarnya dalam pratinjau widget mereka, misalnya data yang dipersonalisasi atau informasi terbaru. Penyedia ini dapat menetapkan pratinjau setelah pengguna login atau telah melakukan konfigurasi awal di aplikasi mereka. Setelah itu, mereka dapat menyiapkan tugas berkala untuk memperbarui pratinjau pada ritme yang dipilih. Contoh widget jenis ini dapat berupa foto, kalender, cuaca, atau berita .
- Penyedia yang menampilkan informasi statis di pratinjau atau widget tindakan cepat yang tidak menampilkan data apa pun. Penyedia ini dapat menetapkan pratinjau satu kali, saat aplikasi pertama kali diluncurkan. Contoh jenis widget ini mencakup perjalanan cepat tindakan atau widget pintasan Chrome.
Beberapa penyedia mungkin menampilkan pratinjau statis pada pemilih mode hub, tetapi informasi di pemilih layar utama. Penyedia ini harus mengikuti panduan untuk kedua kasus penggunaan ini guna menetapkan pratinjau.
Picture-in-Picture
Android 15 introduces changes in Picture-in-Picture (PiP) ensuring an even smoother transition when entering into PiP mode. This will be beneficial for apps having UI elements overlaid on top of their main UI, which goes into PiP.
Developers use the onPictureInPictureModeChanged
callback to define logic
that toggles the visibility of the overlaid UI elements. This callback is
triggered when the PiP enter or exit animation is completed. Beginning in
Android 15, the PictureInPictureUiState
class includes another state.
With this UI state, apps targeting Android 15 (API level 35) will observe the
Activity#onPictureInPictureUiStateChanged
callback being invoked with
isTransitioningToPip()
as soon as the PiP animation starts. There are
many UI elements that are not relevant for the app when it is in PiP mode, for
example views or layout that include information such as suggestions, upcoming
video, ratings, and titles. When the app goes to PiP mode, use the
onPictureInPictureUiStateChanged
callback to hide these UI elements. When the
app goes to full screen mode from the PiP window, use
onPictureInPictureModeChanged
callback to unhide these elements, as shown in
the following examples:
override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
if (pipState.isTransitioningToPip()) {
// Hide UI elements
}
}
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
if (isInPictureInPictureMode) {
// Unhide UI elements
}
}
This quick visibility toggle of irrelevant UI elements (for a PiP window) helps ensure a smoother and flicker-free PiP enter animation.
Aturan Jangan Ganggu yang ditingkatkan
AutomaticZenRule
memungkinkan aplikasi menyesuaikan aturan Pengelolaan
Perhatian (Jangan Ganggu) dan memutuskan kapan harus mengaktifkan atau menonaktifkannya. Android 15 menyempurnakan aturan ini secara signifikan dengan tujuan meningkatkan
{i>user experience<i}. Peningkatan berikut disertakan:
- Menambahkan jenis ke
AutomaticZenRule
, sehingga sistem dapat menerapkan perlakuan terhadap beberapa aturan. - Menambahkan ikon ke
AutomaticZenRule
, membantu membuat mode lebih menarik dikenali. - Menambahkan string
triggerDescription
keAutomaticZenRule
yang mendeskripsikan kondisi tempat aturan harus diaktifkan bagi pengguna. - Ditambahkan
ZenDeviceEffects
keAutomaticZenRule
, yang memungkinkan aturan memicu hal-hal seperti hitam putih layar, mode malam, atau meredupkan wallpaper.
Menetapkan VibrationEffect untuk saluran notifikasi
Android 15 mendukung setelan getaran yang kaya untuk notifikasi masuk dengan
saluran menggunakan NotificationChannel.setVibrationEffect
, sehingga
pengguna dapat membedakan berbagai jenis notifikasi tanpa
hanya dengan melihat
perangkat mereka.
Chip status bar proyeksi media dan penghentian otomatis
媒体投放可能会泄露用户的私密信息。一个醒目的新状态栏条状标签可让用户了解任何正在进行的屏幕投影。用户可以点按该条状标签停止投屏、共享或录制屏幕。此外,为了提供更直观的用户体验,当设备屏幕锁定后,所有正在进行的屏幕投影都会自动停止。

Perangkat layar besar dan faktor bentuk
Android 15 memberi aplikasi Anda dukungan untuk mendapatkan hasil maksimal dari faktor bentuk Android, termasuk layar besar, perangkat flippable, dan perangkat foldable.
Multitasking layar besar yang ditingkatkan
Android 15 为用户提供了在大屏设备上更好地进行多任务处理的方式。对于 例如,用户可以保存自己喜爱的分屏应用组合, 访问并固定屏幕上的任务栏,以便在应用之间快速切换。这意味着 让应用具备自适应能力比以往任何时候都更加重要。
Google I/O 大会上有一些关于构建自适应 Android 的会议 应用和使用 Material 3 构建界面 自适应库 我们的文档中提供了更多帮助信息,帮助您针对大型语言 。
Dukungan layar luar
您的应用可以声明一个属性,Android 15 会使用该属性来允许您的 Application
或 Activity
显示在受支持的可翻转设备的小封面屏幕上。这些屏幕太小,无法被视为适合运行 Android 应用的兼容目标平台,但您的应用可以选择支持它们,从而让您的应用在更多平台上可用。
Konektivitas
Android 15 mengupdate platform untuk memberi aplikasi Anda akses ke kemajuan terbaru dalam teknologi nirkabel dan komunikasi.
Dukungan satelit
Android 15 continues to extend platform support for satellite connectivity and includes some UI elements to ensure a consistent user experience across the satellite connectivity landscape.
Apps can use ServiceState.isUsingNonTerrestrialNetwork()
to
detect when a device is connected to a satellite, giving them more awareness of
why full network services might be unavailable. Additionally, Android 15
provides support for SMS and MMS apps as well as preloaded RCS apps to use
satellite connectivity for sending and receiving messages.

Pengalaman NFC yang lebih lancar
Android 15 berupaya membuat pengalaman pembayaran nirsentuh menjadi lebih lancar dan
andal sekaligus terus mendukung ekosistem aplikasi NFC Android yang andal. Di
perangkat yang didukung, aplikasi dapat meminta NfcAdapter
untuk memasuki
mode pengamatan, tempat perangkat memproses tetapi tidak merespons pembaca
NFC, yang mengirim PollingFrame
objek layanan NFC aplikasi untuk diproses. Objek PollingFrame
dapat digunakan untuk melakukan autentikasi
sebelum komunikasi pertama ke pembaca NFC, sehingga memungkinkan transaksi
sekali ketuk dalam banyak kasus.
Selain itu, aplikasi dapat mendaftarkan filter di perangkat yang didukung sehingga aplikasi dapat diberi tahu tentang aktivitas loop polling, yang memungkinkan operasi yang lancar dengan beberapa aplikasi yang mendukung NFC.
Peran Wallet
Android 15 memperkenalkan peran Wallet yang memungkinkan integrasi yang lebih erat dengan aplikasi dompet pilihan pengguna. Peran ini menggantikan setelan pembayaran nirsentuh default NFC. Pengguna dapat mengelola pemegang peran Wallet dengan membuka Setelan > Aplikasi > Aplikasi Default.
Peran Wallet digunakan saat merutekan tempelan NFC untuk AID yang terdaftar dalam kategori pembayaran. Ketukan selalu mengarah ke pemegang peran Wallet, kecuali jika aplikasi lain yang terdaftar untuk AID yang sama sedang berjalan di latar depan.
Peran ini juga digunakan untuk menentukan tempat kartu Akses Cepat Wallet harus ditempatkan saat diaktifkan. Jika peran disetel ke "Tidak ada", kartu Akses Cepat tidak tersedia dan ketukan NFC kategori pembayaran hanya dikirim ke aplikasi latar depan.
Keamanan
Android 15 membantu Anda meningkatkan keamanan aplikasi, melindungi data aplikasi, dan memberi pengguna lebih banyak transparansi dan kontrol atas data mereka. Tonton video Menjaga keamanan pengguna di Android dari Google I/O untuk mengetahui lebih lanjut tindakan yang kami lakukan untuk meningkatkan pengamanan pengguna dan melindungi aplikasi Anda dari ancaman baru.
Mengintegrasikan Credential Manager dengan isi otomatis
Starting with Android 15, developers can link specific views like username or password fields with Credential Manager requests, making it easier to provide a tailored user experience during the sign-in process. When the user focuses on one of these views, a corresponding request is sent to Credential Manager. The resulting credentials are aggregated across providers and displayed in autofill fallback UIs, such as inline suggestions or drop-down suggestions. The Jetpack androidx.credentials library is the preferred endpoint for developers to use and will soon be available to further enhance this feature in Android 15 and higher.
Mengintegrasikan pendaftaran dan login sekali ketuk dengan perintah biometrik
Credential Manager integrates biometric prompts into the credential creation and sign-in processes, eliminating the need for providers to manage biometric prompts. As a result, credential providers only need to focus on the results of the create and get flows, augmented with the biometric flow result. This simplified process creates a more efficient and streamlined credential creation and retrieval process.
Pengelolaan kunci untuk enkripsi end-to-end
Kami memperkenalkan E2eeContactKeysManager
di Android 15, yang
memfasilitasi enkripsi end-to-end (E2EE) di aplikasi Android Anda dengan menyediakan
API tingkat OS untuk penyimpanan kunci publik kriptografis.
E2eeContactKeysManager
dirancang untuk berintegrasi dengan aplikasi
kontak platform guna memberi pengguna cara terpusat untuk mengelola dan memverifikasi
kunci publik kontak mereka.
Pemeriksaan izin pada URI konten
Android 15 introduces a set of APIs that perform permission checks on content URIs:
Context.checkContentUriPermissionFull
: This performs a full permission check on content URIs.Activity
manifest attributerequireContentUriPermissionFromCaller
: This enforces specified permissions on the provided content URIs at activity launch.ComponentCaller
class forActivity
callers: This represents the app that launched the activity.
Aksesibilitas
Android 15 menambahkan fitur yang meningkatkan aksesibilitas bagi pengguna.
Braille yang Lebih Baik
Di Android 15, kami telah memungkinkan TalkBack untuk mendukung layar Braille yang menggunakan standar HID melalui USB dan Bluetooth aman.
Standar ini, seperti yang digunakan oleh mouse dan keyboard, akan membantu Android mendukung berbagai penampil Braille yang lebih luas dari waktu ke waktu.
Internasionalisasi
Android 15 menambahkan fitur dan kemampuan yang melengkapi pengalaman pengguna saat perangkat digunakan dalam bahasa yang berbeda.
Font variabel CJK
从 Android 15 开始,面向中文、日文和韩文 (CJK) 语言的字体文件 NotoSansCJK 现在是可变字体。可变字体为中日韩语言的创意排版提供了更多可能性。设计师可以探索更多样式的排版,并制作出以前难以实现或根本无法实现的视觉效果出色的布局。

Penjustifikasi antar-karakter
Mulai Android 15, teks dapat dibenarkan menggunakan spasi huruf dengan
menggunakan JUSTIFICATION_MODE_INTER_CHARACTER
. Justifikasi antarkata
pertama kali diperkenalkan di Android 8.0 (API level 26), dan justifikasi antarkarakter
memberikan kemampuan serupa untuk bahasa yang menggunakan
karakter spasi kosong untuk segmentasi, seperti China, Jepang, dan lainnya.

JUSTIFICATION_MODE_NONE
.
JUSTIFICATION_MODE_NONE
.
JUSTIFICATION_MODE_INTER_WORD
.
JUSTIFICATION_MODE_INTER_WORD
.
JUSTIFICATION_MODE_INTER_CHARACTER
.
JUSTIFICATION_MODE_INTER_CHARACTER
.Konfigurasi jeda baris otomatis
Android 从以下语言开始支持基于短语的日语和韩语换行:
Android 13(API 级别 33)。不过,虽然基于短语的行分隔符可以提高短文本行的可读性,但对于长文本行,效果并不理想。在 Android 15 中,应用只能使用 LINE_BREAK_WORD_STYLE_AUTO
选项,针对短文本行应用基于短语的行分隔符。此选项会为文本选择最佳字词样式选项。
对于短文本行,则使用基于短语的换行符,功能相同
为 LINE_BREAK_WORD_STYLE_PHRASE
,如
以下图片:

LINE_BREAK_WORD_STYLE_AUTO
应用基于短语的换行符,以提高文本的可读性。
这与应用
LINE_BREAK_WORD_STYLE_PHRASE
。对于较长的文本行,LINE_BREAK_WORD_STYLE_AUTO
会使用 no
换行字词样式,
LINE_BREAK_WORD_STYLE_NONE
,如
以下图片:

LINE_BREAK_WORD_STYLE_AUTO
应用不换行的字词样式,以提高文本的可读性。
这与应用
LINE_BREAK_WORD_STYLE_NONE
。Font Hentaigana Jepang Tambahan
In Android 15, a font file for old Japanese Hiragana (known as Hentaigana) is bundled by default. The unique shapes of Hentaigana characters can add a distinctive flair to artwork or design while also helping to preserve accurate transmission and understanding of ancient Japanese documents.

VideoLAN cone Copyright (c) 1996-2010 VideoLAN. This logo or a modified version may be used or modified by anyone to refer to the VideoLAN project or any product developed by the VideoLAN team, but does not indicate endorsement by the project.
Vulkan and the Vulkan logo are registered trademarks of the Khronos Group Inc.
OpenGL is a registered trademark and the OpenGL ES logo is a trademark of Hewlett Packard Enterprise used by permission by Khronos.