Android 15 memperkenalkan fitur dan API yang hebat untuk developer. Bagian berikut merangkum fitur-fitur ini untuk membantu Anda memulai 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 API level 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 terbaru dan solusi developer untuk media dan kamera Android, lihat presentasi Membuat pengalaman media dan kamera Android modern dari Google I/O.
Peningkatan Cahaya Redup
Android 15 introduces Low Light Boost, an auto-exposure mode available to both Camera 2 and the night mode camera extension. Low Light Boost adjusts the exposure of the Preview stream in low-light conditions. This is different from how the night mode camera extension creates still images, because night mode combines a burst of photos to create a single, enhanced image. While night mode works very well for creating a still image, it can't create a continuous stream of frames, but Low Light Boost can. Thus, Low Light Boost enables camera capabilities, such as:
- Providing an enhanced image preview, so users are better able to frame their low-light pictures
- Scanning QR codes in low light
If you enable Low Light Boost, it automatically turns on when there's a low light level, and turns off when there's more light.
Apps can record off the Preview stream in low-light conditions to save a brightened video.
For more information, see Low Light Boost.
Kontrol kamera dalam aplikasi
Android 15 adds an extension for more control over the camera hardware and its algorithms on supported devices:
- Advanced flash strength adjustments enabling precise control of flash
intensity in both
SINGLE
andTORCH
modes while capturing images.
Kontrol headroom 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 volume
Android 15 introduces support for the CTA-2075 loudness standard to help you avoid audio loudness inconsistencies and ensure users don't have to constantly adjust volume when switching between content. The system leverages known characteristics of the output devices (headphones and speaker) along with loudness metadata available in AAC audio content to intelligently adjust the audio loudness and dynamic range compression levels.
To enable this feature, you need to ensure loudness metadata is available in
your AAC content and enable the platform feature in your app. For this, you
instantiate a LoudnessCodecController
object by
calling its create factory method with the audio
session ID from the associated AudioTrack
; this
automatically starts applying audio updates. You can pass an
OnLoudnessCodecUpdateListener
to modify or filter
loudness parameters before they are applied on the
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 will also be updated to use the
LoudnessCodecController
APIs for a seamless app integration.
Perangkat MIDI 2.0 virtual
Android 13 menambahkan dukungan untuk terhubung ke perangkat MIDI 2.0 menggunakan USB, yang berkomunikasi menggunakan Universal MIDI Packets (UMP). Android 15 memperluas dukungan UMP ke aplikasi MIDI virtual, yang memungkinkan aplikasi komposisi mengontrol aplikasi synthesizer sebagai perangkat MIDI 2.0 virtual seperti yang dilakukan dengan perangkat USB MIDI 2.0.
Decoding software AV1 yang lebih efisien
dav1d, decoder software AV1 populer dari VideoLAN tersedia untuk perangkat Android yang tidak mendukung dekode AV1 dalam hardware. dav1d memiliki performa hingga 3x lebih baik daripada decoder software AV1 lama, sehingga memungkinkan pemutaran AV1 HD untuk lebih banyak pengguna, termasuk beberapa perangkat tingkat rendah dan menengah.
Aplikasi Anda harus memilih untuk menggunakan dav1d dengan memanggilnya berdasarkan nama
"c2.android.av1-dav1d.decoder"
. dav1d akan dijadikan decoder software
AV1 default dalam update berikutnya. Dukungan ini distandarisasi dan di-backport ke
perangkat Android 11 yang menerima update sistem Google Play.
Alat dan produktivitas developer
Meskipun sebagian besar upaya kami untuk meningkatkan produktivitas Anda berfokus pada alat seperti Android Studio, Jetpack Compose, dan library Android Jetpack, kami selalu mencari cara di platform untuk membantu Anda lebih mudah mewujudkan visi Anda.
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
.
Pengoptimalan pengalihan bahasa otomatis
Android 14 menambahkan pengenalan multibahasa di perangkat dalam audio dengan peralihan
otomatis antarbahasa, tetapi hal ini dapat menyebabkan kata dihapus,
terutama saat bahasa beralih dengan sedikit jeda di antara dua
ucapan. Android 15 menambahkan kontrol tambahan untuk membantu aplikasi menyesuaikan pengalihan ini
ke kasus penggunaannya.
EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS
membatasi pengalihan otomatis ke awal sesi audio, sedangkan
EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES
menonaktifkan
pengalihan bahasa setelah sejumlah pengalihan yang ditentukan. Opsi ini
sangat berguna jika Anda memperkirakan bahwa akan ada satu bahasa yang diucapkan
selama sesi yang akan dideteksi secara otomatis.
OpenType Variable Font API yang ditingkatkan
Android 15 meningkatkan kegunaan font variabel OpenType. Anda sekarang dapat
membuat instance FontFamily
dari font variabel tanpa menentukan
sumbu bobot dengan buildVariableFamily
API. Perender teks mengganti
nilai sumbu wght
agar cocok dengan teks yang menampilkan.
Menggunakan API baru, hal ini menyederhanakan kode untuk membuat Typeface
secara signifikan:
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
Mulai Android 15, TextView
dan pemisah
baris yang mendasarinya dapat mempertahankan bagian teks tertentu di baris yang sama untuk meningkatkan
keterbacaan. Anda dapat memanfaatkan penyesuaian akhir baris ini dengan menggunakan
tag <nobreak>
dalam resource string atau
createNoBreakSpan
. Demikian pula, Anda dapat mempertahankan kata dari
pemisahan kata dengan menggunakan tag <nohyphen>
atau
createNoHyphenationSpan
.
Misalnya, resource string berikut tidak menyertakan baris baru, dan dirender dengan teks "Pixel 8 Pro" yang terputus di tempat yang tidak diinginkan:
<resources>
<string name="pixel8pro">The power and brains behind Pixel 8 Pro.</string>
</resources>
Sebaliknya, resource string ini menyertakan tag <nobreak>
, yang menggabungkan
frasa "Pixel 8 Pro" dan mencegah pemisahan baris:
<resources>
<string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>
Perbedaan cara string ini dirender ditunjukkan dalam gambar berikut:

<nobreak>
.
<nobreak>
.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.
Mengaktifkan mode 16 KB di perangkat menggunakan opsi developer

Alihkan opsi developer Booting dengan ukuran halaman 16 KB untuk mem-booting perangkat dalam mode 16 KB.
Mulai Android 15 QPR1, Anda dapat menggunakan opsi developer yang tersedia di perangkat tertentu untuk mem-booting perangkat dalam mode 16 KB dan melakukan pengujian di perangkat. Sebelum menggunakan opsi developer, buka Setelan -> Sistem -> Update software dan terapkan update yang tersedia.
Opsi developer ini tersedia di perangkat berikut:
Pixel 8 dan 8 Pro (dengan Android 15 QPR1 atau yang lebih baru)
Peringatan: Karena masalah umum pada Android 15 QPR2 Beta 3, layar sentuh tidak berfungsi di perangkat Pixel 8 setelah menginstal Android 15 QPR2 Beta 3 dan mem-booting perangkat dalam mode 16 KB. Masalah ini tidak memengaruhi perangkat Pixel 8 Pro.
Pixel 8a (dengan Android 15 QPR1 atau yang lebih baru)
Peringatan: Karena masalah umum pada Android 15 QPR2 Beta 3, layar sentuh tidak berfungsi di perangkat Pixel 8a setelah menginstal Android 15 QPR2 Beta 3 dan mem-booting perangkat dalam mode 16 KB.
Pixel 9, 9 Pro, dan 9 Pro XL (dengan Android 15 QPR2 Beta 2 atau yang lebih baru)
Grafik
Android 15 menghadirkan peningkatan grafis terbaru, termasuk ANGLE dan penambahan ke sistem grafis Kanvas.
Modernisasi akses GPU Android
Android hardware has evolved quite a bit from the early days where the core OS would run on a single CPU and GPUs were accessed using APIs based on fixed-function pipelines. The Vulkan® graphics API has been available in the NDK since Android 7.0 (API level 24) with a lower-level abstraction that better reflects modern GPU hardware, scales better to support multiple CPU cores, and offers reduced CPU driver overhead — leading to improved app performance. Vulkan is supported by all modern game engines.
Vulkan is Android's preferred interface to the GPU. Therefore, Android 15 includes ANGLE as an optional layer for running OpenGL® ES on top of Vulkan. Moving to ANGLE will standardize the Android OpenGL implementation for improved compatibility, and, in some cases, improved performance. You can test out your OpenGL ES app stability and performance with ANGLE by enabling the developer option in Settings -> System -> Developer Options -> Experimental: Enable ANGLE on Android 15.
The Android ANGLE on Vulkan roadmap

As part of streamlining our GPU stack, going forward we will be shipping ANGLE as the GL system driver on more new devices, with the future expectation that OpenGL/ES will be only available through ANGLE. That being said, we plan to continue support for OpenGL ES on all devices.
Recommended next steps
Use the developer options to select the ANGLE driver for OpenGL ES and test your app. For new projects, we strongly encourage using Vulkan for C/C++.
Peningkatan untuk Canvas
Android 15 melanjutkan modernisasi sistem grafis Canvas Android dengan kemampuan tambahan:
Matrix44
menyediakan matriks 4x4 untuk mengubah koordinat yang harus digunakan saat Anda ingin memanipulasi kanvas dalam 3D.clipShader
memotong klip saat ini dengan shader yang ditentukan, sedangkanclipOutShader
menetapkan klip ke perbedaan klip saat ini dan shader, yang masing-masing memperlakukan shader sebagai mask alfa. Hal ini mendukung gambar bentuk kompleks secara efisien.
Performa dan baterai
Android terus berfokus untuk membantu Anda meningkatkan performa dan kualitas aplikasi. Android 15 memperkenalkan API yang membantu membuat tugas di aplikasi Anda lebih efisien untuk dijalankan, mengoptimalkan performa aplikasi, dan mengumpulkan insight tentang aplikasi Anda.
Untuk praktik terbaik yang hemat baterai, proses debug jaringan dan penggunaan daya, serta detail tentang cara kami meningkatkan efisiensi baterai pekerjaan latar belakang di Android 15 dan Android versi terbaru, lihat presentasi Meningkatkan efisiensi baterai pekerjaan latar belakang di Android dari Google I/O.
ApplicationStartInfo API
In previous versions of Android, app startup has been a bit of a mystery. It was
challenging to determine within your app whether it started from a cold, warm,
or hot state. It was also difficult to know how long your app spent during the
various launch phases: forking the process, calling onCreate
, drawing the
first frame, and more. When your Application
class was instantiated, you had no
way of knowing whether the app started from a broadcast, a content provider, a
job, a backup, boot complete, an alarm, or an Activity
.
The ApplicationStartInfo
API on Android 15 provides
all of this and more. You can even choose to add your own timestamps into the
flow to help collect timing data in one place. In addition to collecting
metrics, you can use ApplicationStartInfo
to help directly optimize app
startup; for example, you can eliminate the costly instantiation of UI-related
libraries within your Application
class when your app is starting up due to a
broadcast.
Informasi ukuran aplikasi mendetail
Since Android 8.0 (API level 26), Android has included the
StorageStats.getAppBytes
API that summarizes the installed
size of an app as a single number of bytes, which is a sum of the APK size, the
size of files extracted from the APK, and files that were generated on the
device such as ahead-of-time (AOT) compiled code. This number is not very
insightful in terms of how your app is using storage.
Android 15 adds the
StorageStats.getAppBytesByDataType([type])
API, which lets
you get insight into how your app is using up all that space, including APK file
splits, AOT and speedup related code, dex metadata, libraries, and guided
profiles.
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 memperkenalkan SQLite API yang mengekspos fitur lanjutan dari mesin SQLite dasar yang menargetkan masalah performa tertentu manifes dalam aplikasi. API ini disertakan dengan update SQLite ke versi 3.44.3.
Developer harus membaca praktik terbaik untuk performa SQLite untuk mendapatkan hasil maksimal dari database SQLite, terutama saat menangani {i>database <i}atau saat menjalankan kueri yang sensitif terhadap latensi.
- Transaksi yang ditangguhkan (hanya baca): saat menerbitkan transaksi yang
hanya-baca (tidak sertakan pernyataan tulis), gunakan
beginTransactionReadOnly()
danbeginTransactionWithListenerReadOnly(SQLiteTransactionListener)
untuk melakukan transaksiDEFERRED
hanya baca. Transaksi tersebut dapat berjalan secara bersamaan satu sama lain, dan jika {i>database<i} berada dalam mode WAL, mereka bisa berjalan serentak dengan transaksiIMMEDIATE
atauEXCLUSIVE
. - Jumlah dan ID baris: API ditambahkan untuk mengambil jumlah baris yang berubah
atau ID baris terakhir yang disisipkan tanpa mengeluarkan kueri tambahan.
getLastChangedRowCount()
menampilkan jumlah baris yang dimasukkan, diperbarui, atau dihapus oleh pernyataan SQL terbaru dalam transaksi saat ini, sedangkangetTotalChangedRowCount()
mengembalikan jumlah koneksi saat ini.getLastInsertRowId()
menampilkanrowid
baris terakhir yang akan disisipkan pada koneksi saat ini. - Pernyataan mentah: mengeluarkan pernyataan SQlite mentah, mengabaikan wrapper kemudahan dan overhead pemrosesan tambahan yang mungkin terjadi.
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 di-build dengan dukungan untuk resolusi Intent
yang lebih presisi melalui
UriRelativeFilterGroup
, yang berisi kumpulan
objek UriRelativeFilter
yang membentuk kumpulan aturan pencocokan
Intent
yang harus dipenuhi, termasuk parameter kueri URL, fragmen
URL, dan aturan pemblokiran atau pengecualian.
Aturan ini dapat ditentukan dalam file XML AndroidManifest
dengan
tag <uri-relative-filter-group>
, yang secara opsional dapat menyertakan
tag android:allow
. Tag tersebut dapat berisi tag <data>
yang menggunakan atribut tag data yang ada serta atribut android:query
dan android:fragment
.
Berikut adalah contoh sintaksis AndroidManifest
:
<intent-filter>
<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:domain="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
Ruang privasi memungkinkan pengguna membuat ruang terpisah di perangkat mereka tempat mereka dapat menyembunyikan aplikasi sensitif dari orang lain, dengan lapisan autentikasi tambahan. Ruang privasi menggunakan profil pengguna terpisah. Pengguna dapat memilih untuk menggunakan kunci perangkat atau faktor kunci terpisah untuk ruang pribadi.
Aplikasi di ruang pribadi muncul di penampung terpisah di peluncur, dan disembunyikan dari tampilan terbaru, notifikasi, setelan, dan dari aplikasi lain saat ruang pribadi dikunci. Konten yang dibuat dan didownload pengguna (seperti media atau file) dan akun dipisahkan antara ruang pribadi dan ruang utama. Sharesheet sistem dan pemilih foto dapat digunakan untuk memberi aplikasi akses ke konten di seluruh ruang saat ruang pribadi tidak dikunci.
Pengguna tidak dapat memindahkan aplikasi yang sudah ada dan datanya ke ruang pribadi. Sebagai gantinya, pengguna memilih opsi penginstalan di ruang pribadi untuk menginstal aplikasi menggunakan app store mana pun yang mereka inginkan. Aplikasi di ruang pribadi diinstal sebagai salinan terpisah dari aplikasi apa pun di ruang utama (salinan baru dari aplikasi yang sama).
Saat pengguna mengunci ruang pribadi, profil akan dihentikan. Saat profil dihentikan, aplikasi di ruang pribadi tidak lagi aktif dan tidak dapat melakukan aktivitas latar depan atau latar belakang, termasuk menampilkan notifikasi.
Sebaiknya uji aplikasi Anda dengan ruang pribadi untuk memastikan aplikasi berfungsi seperti yang diharapkan, terutama jika aplikasi Anda termasuk dalam salah satu kategori berikut:
- Aplikasi dengan logika untuk profil kerja yang mengasumsikan bahwa salinan aplikasi yang diinstal yang tidak ada di profil utama berada di profil kerja.
- Aplikasi medis
- Aplikasi peluncur
- Aplikasi app store
Membuat kueri pilihan pengguna terbaru untuk Akses Foto yang Dipilih
Apps can now highlight only the most-recently-selected photos and videos when
partial access to media permissions is granted. This feature can improve
the user experience for apps that frequently request access to photos and
videos. To use this feature in your app, enable the
QUERY_ARG_LATEST_SELECTION_ONLY
argument when querying MediaStore
through ContentResolver
.
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 integrates the latest extensions around Health Connect by Android, a secure and centralized platform to manage and share app-collected health and fitness data. This update adds support for additional data types across fitness, nutrition, skin temperature, training plans, and more.
Skin temperature tracking allows users to store and share more accurate temperature data from a wearable or other tracking device.
Training plans are structured workout plans to help a user achieve their fitness goals. Training plans support includes a variety of completion and performance goals:
- Completion goals around calories burned, distance, duration, repetition, and steps.
- Performance goals around as many repetitions as possible (AMRAP), cadence, heart rate, power, perceived rate of exertion, and speed.
Learn more about the latest updates to Health Connect in Android in the Building adaptable experiences with Android Health talk from Google I/O.
Berbagi layar aplikasi
Android 15 supports app screen sharing so users can share or record just an
app window rather than the entire device screen. This feature, first enabled in
Android 14 QPR2, includes
MediaProjection
callbacks that allow your app
to customize the app screen sharing experience. Note that for apps targeting
Android 14 (API level 34) or higher,
user consent is required for each
MediaProjection
capture session.
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, lihat presentasi Meningkatkan pengalaman pengguna aplikasi Android dari Google I/O.
Pratinjau widget yang lebih kaya dengan Generated Previews API
Before Android 15, the only way to provide widget picker previews was to specify a static image or layout resource. These previews often differ significantly from the look of the actual widget when it is placed on the home screen. Also, static resources can't be created with Jetpack Glance, so a Glance developer had to screenshot their widget or create an XML layout to have a widget preview.
Android 15 adds support for generated previews. This means that app widget
providers can generate RemoteViews
to use as the picker preview, instead
of a static resource.

Push API
Apps can provide generated previews through a push API. Apps can provide
previews at any point in their lifecycle, and don't receive an explicit request
from the host to provide previews. Previews are persisted in AppWidgetService
,
and hosts can request them on-demand. The following example loads an XML widget
layout resource and sets it as the preview:
AppWidgetManager.getInstance(appContext).setWidgetPreview(
ComponentName(
appContext,
SociaLiteAppWidgetReceiver::class.java
),
AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
RemoteViews("com.example", R.layout.widget_preview)
)
The expected flow is:
- At any time, the widget provider calls
setWidgetPreview
. The provided previews are persisted inAppWidgetService
with other provider info. setWidgetPreview
notifies hosts of an updated preview through theAppWidgetHost.onProvidersChanged
callback. In response, the widget host reloads all of its provider information.- When displaying a widget preview, the host checks
AppWidgetProviderInfo.generatedPreviewCategories
, and if the chosen category is available, callsAppWidgetManager.getWidgetPreview
to return the saved preview for this provider.
When to call setWidgetPreview
Because there is no callback to provide previews, apps can choose to send previews at any point when they are running. How often to update the preview depends on the widget's use case.
The following list describes the two main categories of preview use cases:
- Providers that show real data in their widget previews, such as personalized or recent information. These providers can set the preview once the user has signed in or has done initial configuration in their app. After this, they can set up a periodic task to update the previews at their chosen cadence. Examples of this type of widget could be a photo, calendar, weather or news widget.
- Providers that show static information in previews or quick-action widgets that don't display any data. These providers can set previews once, when the app first launches. Examples of this type of widget include a drive quick actions widget or chrome shortcuts widget.
Some providers might show static previews on the hub mode picker, but real information on the homescreen picker. These providers should follow the guidance for both of these use cases to set previews.
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 supports setting rich vibrations for incoming notifications by
channel using NotificationChannel.setVibrationEffect
, so
your users can distinguish between different types of notifications without
having to look at their device.
Chip status bar proyeksi media dan berhenti otomatis
Proyeksi media dapat mengekspos informasi pengguna pribadi. Chip status bar baru yang jelas membuat pengguna mengetahui proyeksi layar yang sedang berlangsung. Pengguna dapat mengetuk chip untuk menghentikan transmisi layar, berbagi, atau perekaman. Selain itu, untuk pengalaman pengguna yang lebih intuitif, setiap proyeksi layar yang sedang berlangsung kini otomatis berhenti saat layar perangkat dikunci.

Perangkat layar besar dan faktor bentuk
Android 15 memberi aplikasi Anda dukungan untuk mendapatkan hasil maksimal dari faktor bentuk Android, termasuk perangkat layar besar, perangkat flip, dan perangkat foldable.
Multitasking layar besar yang ditingkatkan
Android 15 memberi pengguna cara yang lebih baik untuk melakukan multitasking di perangkat layar besar. Sebagai misalnya, pengguna dapat menyimpan kombinasi aplikasi layar terpisah favorit mereka dengan cepat mengakses dan menyematkan taskbar di layar untuk beralih antar-aplikasi dengan cepat. Artinya bahwa memastikan aplikasi Anda bersifat adaptif kini menjadi semakin penting.
Google I/O memiliki sesi tentang Membangun Android adaptif aplikasi dan Membangun UI dengan Material 3 library adaptif yang dapat membantu, dan dokumentasi kami memiliki lebih banyak hal untuk membantu Anda Mendesain untuk layar.
Dukungan layar sampul
Your app can declare a property that Android 15 uses to
allow your Application
or Activity
to be presented on the small cover
screens of supported flippable devices. These screens are too small to be
considered as compatible targets for Android apps to run on, but your app can
opt in to supporting them, making your app available in more places.
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 is working to make the tap to pay experience more seamless and
reliable while continuing to support Android's robust NFC app ecosystem. On
supported devices, apps can request the NfcAdapter
to enter
observe mode, where the device listens but doesn't respond to NFC
readers, sending the app's NFC service PollingFrame
objects to process. The PollingFrame
objects can be used to auth
ahead of the first communication to the NFC reader, allowing for a one tap
transaction in many cases.
In addition, apps can register a filter on supported devices so they can be notified of polling loop activity, which allows for smooth operation with multiple NFC-aware applications.
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 transparansi dan kontrol yang lebih besar atas data mereka. Lihat presentasi Menjaga keamanan pengguna di Android dari Google I/O untuk mengetahui lebih lanjut upaya kami dalam 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
We are introducing the E2eeContactKeysManager
in Android 15, which
facilitates end-to-end encryption (E2EE) in your Android apps by providing an
OS-level API for the storage of cryptographic public keys.
The E2eeContactKeysManager
is designed to integrate with the platform
contacts app to give users a centralized way to manage and verify their
contacts' public keys.
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
In Android 15, we've made it possible for TalkBack to support Braille displays that are using the HID standard over both USB and secure Bluetooth.
This standard, much like the one used by mice and keyboards, will help Android support a wider range of Braille displays over time.
Internasionalisasi
Android 15 menambahkan fitur dan kemampuan yang melengkapi pengalaman pengguna saat perangkat digunakan dalam bahasa yang berbeda.
Font variabel CJK
Starting with Android 15, the font file for Chinese, Japanese, and Korean (CJK) languages, NotoSansCJK, is now a variable font. Variable fonts open up possibilities for creative typography in CJK languages. Designers can explore a broader range of styles and create visually striking layouts that were previously difficult or impossible to achieve.

Justifikasi antar-karakter
Starting with Android 15, text can be justified utilizing letter spacing by
using JUSTIFICATION_MODE_INTER_CHARACTER
. Inter-word justification was
first introduced in Android 8.0 (API level 26), and inter-character
justification provides similar capabilities for languages that use the
whitespace character for segmentation, such as Chinese, Japanese, and others.

JUSTIFICATION_MODE_NONE
.
JUSTIFICATION_MODE_NONE
.
JUSTIFICATION_MODE_INTER_WORD
.
JUSTIFICATION_MODE_INTER_WORD
.
JUSTIFICATION_MODE_INTER_CHARACTER
.
JUSTIFICATION_MODE_INTER_CHARACTER
.Konfigurasi baris baru otomatis
Android mulai mendukung jeda baris berbasis frasa untuk bahasa Jepang dan Korea di
Android 13 (level API 33). Namun, sementara jeda baris berbasis frasa meningkatkan
keterbacaan baris pendek teks, mereka tidak bekerja dengan baik untuk baris teks yang panjang.
Di Android 15, aplikasi dapat menerapkan jeda baris berbasis frasa hanya untuk baris pendek
teks, menggunakan LINE_BREAK_WORD_STYLE_AUTO
sebelumnya. Opsi ini memilih opsi gaya kata terbaik untuk teks.
Untuk baris teks pendek, jeda baris berbasis frasa digunakan, yang berfungsi sama
seperti LINE_BREAK_WORD_STYLE_PHRASE
, seperti yang ditunjukkan dalam
gambar berikut:

LINE_BREAK_WORD_STYLE_AUTO
menerapkan pemisah baris berbasis frasa untuk meningkatkan keterbacaan teks.
Hal ini sama dengan menerapkan
LINE_BREAK_WORD_STYLE_PHRASE
.Untuk baris teks yang lebih panjang, LINE_BREAK_WORD_STYLE_AUTO
menggunakan
gaya kata jeda baris, berfungsi sama dengan
LINE_BREAK_WORD_STYLE_NONE
, seperti yang ditunjukkan di
gambar berikut:

LINE_BREAK_WORD_STYLE_AUTO
tidak menerapkan gaya kata pemisah baris untuk meningkatkan keterbacaan teks.
Hal ini sama dengan menerapkan
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.