Android 15 memperkenalkan fitur dan API baru yang hebat untuk para developer. Bagian berikut meringkas fitur-fitur ini untuk membantu Anda mulai menggunakan API terkait.
Untuk mengetahui daftar mendetail tentang API yang baru, diubah, dan dihapus, baca laporan perbedaan API. Untuk mengetahui detail tentang API baru, buka referensi API Android — API baru ditandai agar lebih mudah dilihat. Selain itu, untuk mempelajari area mana saja dalam aplikasi perubahan platform yang mungkin memengaruhi aplikasi Anda, pastikan untuk meninjau perubahan perilaku yang memengaruhi aplikasi saat menargetkan Android 15 dan perubahan perilaku yang memengaruhi semua aplikasi terlepas daritargetSdkVersion
.
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 informasi selengkapnya tentang fitur dan solusi developer terbaru untuk media dan kamera Android, lihat diskusi Membangun pengalaman media dan kamera Android modern dari Google I/O.
Booster Cahaya Rendah
Android 15 memperkenalkan Low Light Boost, mode eksposur otomatis baru yang tersedia untuk Kamera 2 dan ekstensi kamera mode malam. Peningkatan Cahaya Rendah menyesuaikan eksposur streaming Pratinjau dalam kondisi cahaya redup. Cara ini berbeda dengan cara ekstensi kamera mode malam membuat gambar diam, karena mode malam menggabungkan burst foto untuk membuat satu gambar yang disempurnakan. Meskipun mode malam berfungsi sangat baik untuk membuat gambar diam, mode ini tidak dapat membuat streaming frame secara berkelanjutan, tetapi Peningkatan Cahaya Rendah dapat melakukannya. Dengan demikian, Boost Cahaya Rendah memungkinkan kemampuan kamera baru, seperti:
- Memberikan pratinjau gambar yang disempurnakan, sehingga pengguna lebih dapat membingkai gambar dengan cahaya redup
- Memindai kode QR dalam kondisi cahaya redup
Jika Anda mengaktifkan Peningkatan Cahaya Rendah, fitur akan otomatis menyala saat level cahaya rendah, dan dinonaktifkan saat ada lebih banyak cahaya.
Aplikasi dapat merekam streaming Pratinjau dalam kondisi cahaya redup untuk menyimpan video yang terang.
Untuk informasi selengkapnya, lihat Peningkatan Cahaya Rendah.
Kontrol kamera dalam aplikasi
Android 15 menambahkan ekstensi baru untuk kontrol yang lebih besar atas hardware kamera dan algoritmanya di perangkat yang didukung:
- Penyesuaian kekuatan flash lanjutan memungkinkan kontrol intensitas
flash yang akurat dalam mode
SINGLE
danTORCH
saat mengambil gambar.
Kontrol headroom HDR
Android 15 memilih headroom HDR yang sesuai untuk kemampuan
perangkat dasar dan kedalaman bit panel. Untuk halaman yang memiliki banyak konten
SDR, seperti aplikasi pesan yang menampilkan satu thumbnail HDR, perilaku
ini dapat berpengaruh buruk pada kecerahan konten SDR
yang dirasakan. Android 15 memungkinkan Anda mengontrol headroom HDR dengan
setDesiredHdrHeadroom
untuk mencapai keseimbangan antara konten SDR
dan HDR.
![](https://developer.android.com/static/about/versions/15/images/hdr-headroom.png?authuser=19&hl=id)
Kontrol kenyaringan
Android 15 memperkenalkan dukungan untuk standar kenyaringan CTA-2075 untuk membantu Anda menghindari inkonsistensi kenyaringan audio dan memastikan pengguna tidak perlu terus-menerus menyesuaikan volume saat beralih antar-konten. Sistem ini memanfaatkan karakteristik perangkat output yang diketahui (headphone dan speaker) beserta metadata kenyaringan yang tersedia dalam konten audio AAC untuk menyesuaikan kenyaringan audio dan tingkat kompresi rentang dinamis secara cerdas.
Untuk mengaktifkan fitur ini, Anda harus memastikan metadata kenyaringan tersedia di
konten AAC dan mengaktifkan fitur platform di aplikasi Anda. Untuk itu, Anda
membuat instance objek LoudnessCodecController
dengan
memanggil metode factory create-nya dengan ID
sesi audio dari AudioTrack
terkait; tindakan ini
akan otomatis mulai menerapkan update audio. Anda dapat meneruskan
OnLoudnessCodecUpdateListener
untuk mengubah atau memfilter
parameter kebisingan sebelum diterapkan pada
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 juga akan diupdate untuk menggunakan
LoudnessCodecController
API untuk integrasi aplikasi yang lancar.
Perangkat MIDI 2.0 virtual
Android 13 menambahkan dukungan untuk menghubungkan ke perangkat MIDI 2.0 menggunakan USB, yang berkomunikasi menggunakan Universal MIDI Packets (UMP). Android 15 memperluas dukungan UMP ke aplikasi MIDI virtual, sehingga aplikasi komposisi dapat mengontrol aplikasi synthesizer sebagai perangkat MIDI 2.0 virtual seperti yang dilakukan dengan perangkat USB MIDI 2.0.
Dekode software AV1 yang lebih efisien
dav1d, dekoder software AV1 yang populer dari VideoLAN kini tersedia untuk perangkat Android yang tidak mendukung dekode AV1 di hardware. dav1d berperforma hingga 3x lebih banyak dibandingkan dekoder software AV1 lama, sehingga memungkinkan pemutaran HD AV1 bagi lebih banyak pengguna, termasuk beberapa perangkat tingkat rendah dan menengah.
Untuk saat ini, aplikasi Anda harus memilih untuk menggunakan dav1d dengan memanggilnya berdasarkan nama
"c2.android.av1-dav1d.decoder"
. dav1d akan dijadikan sebagai dekoder software
AV1 default dalam update berikutnya. Dukungan ini distandardisasi 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 berpusat pada alat seperti Android Studio, Jetpack Compose, dan library Android Jetpack, kami selalu mencari cara di platform ini 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 kehidupan terkait buffer NIO
- Forum
- 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 baru melalui update Sistem Google Play, sehingga Anda dapat menargetkan fitur pemrograman terbaru.
Peningkatan PDF
Android 15 menyertakan peningkatan substansial pada PdfRenderer
API. Aplikasi dapat menyertakan fitur lanjutan seperti rendering
file yang dilindungi sandi, anotasi, pengeditan formulir,
penelusuran, dan pemilihan dengan salinan. Pengoptimalan PDF
terlinier didukung untuk mempercepat tampilan PDF lokal dan mengurangi penggunaan resource.
![](https://developer.android.com/static/about/versions/15/images/pdf-rendering.png?authuser=19&hl=id)
PdfRenderer
telah dipindahkan ke modul yang dapat diupdate menggunakan update sistem Google
Play terlepas dari rilis platformnya, dan kami mendukung
perubahan ini kembali ke Android 11 (level API 30) dengan membuat platform API
pra-Android 15 yang kompatibel, yang disebut
PdfRendererPreV
.
Kami menghargai masukan Anda tentang peningkatan yang telah kami lakukan pada platform API
PdfRenderer
, dan kami berencana untuk mempermudah penggabungan API ini ke dalam
aplikasi Anda dengan library Android Jetpack mendatang.
Peningkatan kualitas pengalihan bahasa otomatis
Android 14 menambahkan pengenalan multibahasa di perangkat dengan peralihan otomatis
antar-bahasa, tetapi hal ini dapat menyebabkan kata dihapus,
terutama saat bahasa beralih dengan lebih sedikit jeda di antara kedua
ucapan. Android 15 menambahkan kontrol tambahan untuk membantu aplikasi menyesuaikan peralihan 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 tombol yang ditentukan. Opsi ini
sangat berguna jika Anda mengharapkan bahwa akan ada satu bahasa yang diucapkan
selama sesi yang harus terdeteksi otomatis.
Peningkatan API Font Variabel OpenType
Android 15 meningkatkan kegunaan font variabel OpenType. Sekarang Anda 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 ditampilkan.
Dengan menggunakan API baru, hal 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 adalah contoh cara Typeface
yang dibuat dengan rendering API lama dan baru:
Dalam contoh ini, Typeface
yang dibuat dengan API lama tidak memiliki
kemampuan membuat ketebalan font yang akurat untuk instance
Font
350, 450, 550, dan 650, sehingga perender akan kembali ke bobot terdekat. Jadi,
dalam kasus ini, 300 dirender, bukan 350, 400 dirender, bukan 450, dan
seterusnya. Sebaliknya, Typeface
yang dibuat dengan API baru secara dinamis membuat
instance Font
untuk bobot tertentu, sehingga bobot yang akurat juga dirender untuk 350,
450, 550, dan 650.
Kontrol pemisah baris terperinci
Mulai Android 15, TextView
dan pemutus baris
yang mendasarinya dapat mempertahankan bagian teks tertentu dalam baris yang sama untuk meningkatkan
keterbacaan. Anda dapat memanfaatkan penyesuaian jeda baris ini dengan menggunakan tag <nobreak>
dalam resource string atau createNoBreakSpan
. Demikian pula, Anda dapat mempertahankan kata dari
tanda hubung dengan menggunakan tag <nohyphen>
atau
createNoHyphenationSpan
.
Misalnya, resource string berikut tidak menyertakan jeda baris, dan merender dengan teks "Pixel 8 Pro." yang pecah 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 jeda baris:
<resources>
<string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>
Perbedaan cara string ini dirender ditampilkan dalam gambar berikut:
![](https://developer.android.com/static/about/versions/15/images/line-breaks-none.png?authuser=19&hl=id)
<nobreak>
.![](https://developer.android.com/static/about/versions/15/images/line-breaks-included.png?authuser=19&hl=id)
<nobreak>
.Pengarsipan aplikasi
Android dan Google Play mengumumkan dukungan untuk pengarsipan aplikasi tahun lalu, yang memungkinkan pengguna mengosongkan ruang dengan menghapus sebagian aplikasi yang jarang digunakan dari perangkat yang dipublikasikan menggunakan Android App Bundle di Google Play. Android 15 kini menyertakan dukungan tingkat OS untuk pengarsipan dan pembatalan pengarsipan aplikasi sehingga memudahkan semua app store menerapkannya.
Aplikasi dengan izin REQUEST_DELETE_PACKAGES
dapat memanggil
metode PackageInstaller
requestArchive
untuk meminta pengarsipan
paket aplikasi terinstal, yang menghapus APK dan file apa pun yang di-cache, tetapi mempertahankan
data pengguna. Aplikasi yang diarsipkan ditampilkan sebagai aplikasi yang dapat ditampilkan melalui
LauncherApps
API; pengguna akan melihat perlakuan UI untuk menyoroti bahwa
aplikasi tersebut telah diarsipkan. Jika pengguna mengetuk aplikasi yang diarsipkan, penginstal yang bertanggung jawab
akan mendapatkan permintaan untuk membatalkan pengarsipan aplikasi tersebut, dan proses pemulihan dapat
dipantau oleh siaran ACTION_PACKAGE_ADDED
.
Grafis
Android 15 menghadirkan peningkatan grafis terbaru, termasuk ANGLE dan tambahan pada sistem grafis Canvas.
Memodernisasi akses GPU Android
Hardware Android telah sedikit berkembang sejak awal, ketika OS inti akan berjalan pada satu CPU dan GPU diakses menggunakan API berdasarkan pipeline fungsi tetap. Vulkan® API grafis telah tersedia di NDK sejak Android 7.0 (API level 24) dengan abstraksi tingkat rendah yang lebih mencerminkan hardware GPU modern, diskalakan lebih baik untuk mendukung beberapa core CPU, dan menawarkan overhead driver CPU yang lebih rendah, sehingga menghasilkan performa aplikasi yang lebih baik. Vulkan didukung oleh semua game engine modern.
Vulkan adalah antarmuka pilihan Android dibandingkan GPU. Oleh karena itu, Android 15 menyertakan ANGLE sebagai lapisan opsional untuk menjalankan OpenGL® ES di atas Vulkan. Pindah ke ANGLE akan menstandarkan implementasi OpenGL Android untuk kompatibilitas yang lebih baik, dan, dalam beberapa kasus, meningkatkan performa. Anda dapat menguji stabilitas dan performa aplikasi OpenGL ES menggunakan ANGLE dengan mengaktifkan opsi developer di Setelan -> Sistem -> Opsi Developer -> Eksperimental: Aktifkan ANGLE di Android 15.
Android ANGLE di roadmap Vulkan
![Roadmap perubahan mendatang pada Android GPU API.](https://developer.android.com/static/about/versions/15/images/angle-vulkan-roadmap.png?authuser=19&hl=id)
Sebagai bagian dari menyederhanakan stack GPU, ke depan kami akan mengirimkan ANGLE sebagai driver sistem GL pada lebih banyak perangkat baru, dengan ekspektasi bahwa OpenGL/ES hanya akan tersedia melalui ANGLE. Dengan demikian, kami berencana melanjutkan dukungan untuk OpenGL ES di semua perangkat.
Rekomendasi langkah selanjutnya
Gunakan opsi developer untuk memilih driver ANGLE untuk OpenGL ES dan menguji aplikasi. Untuk project baru, sebaiknya gunakan Vulkan untuk C/C++.
Peningkatan untuk Canvas
Android 15 melanjutkan modernisasi sistem grafis Canvas Android dengan kemampuan baru:
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, sementaraclipOutShader
menetapkan klip ke perbedaan klip saat ini dan shader, masing-masing memperlakukan shader sebagai masker alfa. Hal ini mendukung penggambaran bentuk yang kompleks secara efisien.
Performa dan baterai
Android akan melanjutkan fokusnya untuk membantu Anda meningkatkan performa dan kualitas aplikasi. Android 15 memperkenalkan API baru 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, men-debug penggunaan jaringan dan daya, serta detail tentang cara kami meningkatkan efisiensi baterai pekerjaan latar belakang di Android 15 dan versi terbaru Android, lihat diskusi Meningkatkan efisiensi baterai pekerjaan latar belakang di Android dari Google I/O.
API ApplicationStartInfo
Di versi Android sebelumnya, startup aplikasi menjadi sedikit misteri. Terkadang
sulit untuk menentukan dalam aplikasi Anda apakah dimulai dari kondisi dingin, hangat,
atau panas. Selain itu, sulit untuk mengetahui berapa lama waktu yang dihabiskan aplikasi Anda selama
berbagai fase peluncuran: melakukan fork proses, memanggil onCreate
, menggambar
frame pertama, dan banyak lagi. Saat class Application
dibuat instance, Anda tidak
dapat mengetahui apakah aplikasi dimulai dari siaran, penyedia konten, tugas, pencadangan, booting selesai, alarm, atau Activity
.
ApplicationStartInfo
API di Android 15 menyediakan
semua ini dan banyak lagi. 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 langsung mengoptimalkan startup
aplikasi; misalnya, Anda dapat menghilangkan pembuatan instance library terkait UI
yang mahal dalam class Application
saat aplikasi dimulai karena
siaran.
Detail informasi ukuran aplikasi
Sejak Android 8.0 (level API 26), Android telah menyertakan
StorageStats.getAppBytes
API yang merangkum ukuran
aplikasi yang diinstal sebagai satu jumlah byte, yang merupakan jumlah ukuran APK, ukuran file yang diekstrak dari APK, dan file yang dihasilkan di
perangkat seperti kode yang dikompilasi di awal (AOT). Jumlah ini tidak terlalu
memiliki gambaran terkait cara aplikasi Anda menggunakan penyimpanan.
Android 15 menambahkan
StorageStats.getAppBytesByDataType([type])
API, yang memungkinkan
Anda mendapatkan insight tentang bagaimana aplikasi menggunakan semua ruang penyimpanan tersebut, termasuk pemisahan file
APK, AOT dan kode terkait percepatan, metadata dex, library, serta profil
yang dipandu.
Pembuatan profil yang dikelola aplikasi
Android 15 menyertakan class ProfilingManager
yang baru, yang memungkinkan Anda
mengumpulkan informasi pembuatan profil dari dalam aplikasi. Kami berencana menggabungkan ini
dengan Android Jetpack API yang akan menyederhanakan pembuatan permintaan
pembuatan profil, tetapi API inti akan memungkinkan pengumpulan heap dump, profil
heap, pengambilan sampel stack, dan lainnya. Fungsi ini memberikan callback ke aplikasi Anda dengan
tag yang disediakan untuk mengidentifikasi file output, yang dikirim ke direktori file
aplikasi. API melakukan pembatasan kapasitas untuk meminimalkan dampak performa.
Peningkatan database SQLite
Android 15 memperkenalkan SQLite API baru yang mengekspos fitur lanjutan dari mesin SQLite dasar yang menargetkan masalah performa tertentu yang dapat terjadi dalam aplikasi.
Developer harus mempelajari praktik terbaik untuk performa SQLite guna memaksimalkan database SQLite, terutama saat bekerja dengan database besar atau saat menjalankan kueri yang sensitif terhadap latensi.
- Transaksi yang ditangguhkan dalam mode hanya baca: saat mengeluarkan transaksi yang bersifat
hanya baca (jangan sertakan pernyataan tulis), gunakan
beginTransactionReadOnly()
danbeginTransactionWithListenerReadOnly(SQLiteTransactionListener)
untuk menerbitkan transaksiDEFERRED
hanya baca. Transaksi tersebut dapat berjalan bersamaan satu sama lain, dan jika database berada dalam mode WAL, transaksi dapat berjalan bersamaan dengan transaksiIMMEDIATE
atauEXCLUSIVE
. - Jumlah baris dan ID: API baru ditambahkan untuk mengambil jumlah baris yang diubah atau ID baris yang terakhir disisipkan tanpa mengeluarkan kueri tambahan.
getLastChangedRowCount()
menampilkan jumlah baris yang disisipkan, diperbarui, atau dihapus oleh pernyataan SQL terbaru dalam transaksi saat ini, sedangkangetTotalChangedRowCount()
menampilkan jumlah pada koneksi saat ini.getLastInsertRowId()
menampilkanrowid
dari baris terakhir yang akan disisipkan pada koneksi saat ini. - Pernyataan mentah: mengeluarkan pernyataan SQlite mentah, dengan mengabaikan wrapper kemudahan dan overhead pemrosesan tambahan yang mungkin dikenakannya.
Update Android Dynamic Performance Framework
Android 15 melanjutkan investasi kami dalam Android Dynamic Performance Framework (ADPF), sekumpulan API yang memungkinkan game dan aplikasi dengan performa intensif untuk berinteraksi lebih langsung dengan sistem termal dan daya perangkat Android. Pada perangkat yang didukung, Android 15 akan menambahkan kemampuan ADPF baru:
- Mode efisiensi daya untuk sesi petunjuk guna menunjukkan bahwa thread yang terkait lebih mengutamakan penghematan daya daripada performa, bagus untuk workload 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 agar dapat memenuhi permintaan workload 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 dokumentasinya.
Privasi
Android 15 menyertakan berbagai fitur yang membantu developer aplikasi melindungi privasi pengguna.
Deteksi perekaman layar
Android 15 menambahkan dukungan untuk aplikasi untuk mendeteksi bahwa aplikasi sedang direkam. Callback dipanggil setiap kali aplikasi bertransisi antara terlihat atau tidak terlihat dalam perekaman layar. Aplikasi dianggap terlihat jika aktivitas yang dimiliki oleh UID proses pendaftaran direkam. Dengan demikian, jika aplikasi menjalankan operasi 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 dibuat untuk mendukung resolusi Intent
yang lebih tepat melalui
UriRelativeFilterGroup
, yang berisi kumpulan
objek UriRelativeFilter
yang membentuk kumpulan aturan pencocokan Intent
yang masing-masing 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>
baru, yang secara opsional dapat menyertakan tag
android:allow
. Tag ini dapat berisi tag <data>
yang menggunakan atribut tag data
yang ada serta atribut android:query
dan android:fragment
baru.
Berikut adalah contoh sintaksis AndroidManifest
:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<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 tempat mereka dapat menjauhkan aplikasi sensitif dari pengintip, dengan lapisan tambahan autentikasi. Ruang pribadi menggunakan profil pengguna terpisah. Pengguna dapat memilih untuk menggunakan penguncian perangkat atau faktor kunci terpisah untuk ruang privasi.
Aplikasi di ruang pribadi muncul di penampung terpisah di peluncur, dan disembunyikan dari tampilan terbaru, notifikasi, setelan, dan dari aplikasi lain ketika ruang privasi terkunci. Konten yang didownload dan dibuat pengguna (seperti media atau file) dan akun dipisahkan antara ruang privasi dan ruang utama. Sharesheet sistem dan pemilih foto dapat digunakan untuk memberi aplikasi akses ke konten melintasi ruang privasi ketika ruang privasi tidak terkunci.
Pengguna tidak dapat memindahkan aplikasi yang sudah ada dan datanya ke ruang privasi. Sebagai gantinya, pengguna memilih opsi instal di ruang privasi untuk menginstal aplikasi menggunakan mana pun {i>app store<i} yang mereka sukai. Aplikasi di ruang privasi dipasang sebagai salinan terpisah dari aplikasi apa pun di ruang utama (salinan baru dari aplikasi yang sama).
Saat pengguna mengunci ruang privasi, profil akan dihentikan. Meskipun profil dihentikan, aplikasi di ruang privasi tidak lagi aktif dan tidak dapat berfungsi aktivitas latar depan atau latar belakang, termasuk menampilkan notifikasi.
Sebaiknya uji aplikasi Anda dengan ruang privasi untuk memastikan aplikasi berfungsi seperti yang diharapkan, terutama jika aplikasi Anda termasuk dalam salah satu kategori:
- Aplikasi dengan logika untuk profil kerja yang mengasumsikan bahwa salinan yang telah diinstal dari aplikasi mereka yang tidak ada di profil utama berada di profil kerja Anda.
- Aplikasi medis
- Aplikasi peluncur
- Aplikasi app store
Buat kueri pilihan pengguna terbaru untuk Akses Foto yang Dipilih
Sekarang, aplikasi dapat hanya menandai foto
dan video yang baru dipilih saat akses sebagian ke izin media diberikan. Fitur
ini dapat meningkatkan pengalaman pengguna untuk aplikasi yang sering meminta
akses ke foto dan video. Untuk menggunakan fitur ini di aplikasi Anda, aktifkan
argumen QUERY_ARG_LATEST_SELECTION_ONLY
saat membuat kueri MediaStore
melalui 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 menyertakan ekstensi Layanan Iklan Android terbaru, yang menyertakan Privacy Sandbox di Android versi terbaru. Penambahan ini adalah bagian dari upaya kami untuk mengembangkan teknologi baru yang meningkatkan privasi pengguna dan memungkinkan pengalaman iklan yang dipersonalisasi dan efektif untuk aplikasi seluler. Halaman sandbox privasi kami memiliki informasi selengkapnya tentang Privacy Sandbox di pratinjau developer Android dan program beta untuk membantu Anda memulai.
Health Connect
Android 15 mengintegrasikan ekstensi terbaru seputar Health Connect dari Android, platform yang aman dan terpusat untuk mengelola dan membagikan data kesehatan dan kebugaran yang dikumpulkan aplikasi. Update ini menambahkan dukungan untuk jenis data baru di seluruh kebugaran, nutrisi, suhu kulit, rencana pelatihan, dan lainnya.
Pelacakan suhu kulit memungkinkan pengguna menyimpan dan membagikan data suhu yang lebih akurat dari perangkat wearable atau pelacak lainnya.
Rencana pelatihan adalah rencana olahraga terstruktur untuk membantu pengguna mencapai sasaran kebugarannya. Dukungan rencana pelatihan mencakup berbagai sasaran penyelesaian dan performa:
- Sasaran penyelesaian terkait kalori yang terbakar, jarak, durasi, pengulangan, dan langkah.
- Sasaran performa seputar sebanyak mungkin pengulangan (AMRAP), irama, detak jantung, daya, tingkat pengerahan tenaga, dan kecepatan.
Pelajari lebih lanjut update terbaru untuk Health Connect di Android dalam bincang-bincang Membangun pengalaman yang dapat disesuaikan dengan Android Health dari Google I/O.
Berbagi layar sebagian
Android 15 mendukung berbagi layar sebagian sehingga pengguna dapat membagikan atau merekam hanya
jendela aplikasi, bukan seluruh layar perangkat. Fitur ini, pertama kali diaktifkan di
Android 14 QPR2, mencakup
callback MediaProjection
yang memungkinkan aplikasi Anda
menyesuaikan pengalaman berbagi layar sebagian. Perhatikan bahwa untuk aplikasi yang menargetkan
Android 14 (level API 34) atau yang lebih tinggi,
izin pengguna sekarang diperlukan untuk setiap
sesi pengambilan MediaProjection
.
Pengalaman pengguna dan UI sistem
Android 15 memberi developer aplikasi dan pengguna lebih banyak kontrol dan fleksibilitas untuk mengonfigurasi perangkat agar sesuai dengan kebutuhan mereka.
Untuk mempelajari lebih lanjut cara menggunakan peningkatan terbaru di Android 15 guna meningkatkan pengalaman pengguna aplikasi Anda, lihat artikel Meningkatkan pengalaman pengguna aplikasi Android dari Google I/O.
Pratinjau widget yang lebih beragam 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 sangat berbeda dengan tampilan widget sebenarnya saat ditempatkan di layar utama. Selain itu, resource statis tidak dapat dibuat dengan Jetpack Glance, sehingga developer Sekilas harus mengambil screenshot widget mereka atau membuat tata letak XML agar dapat melakukan pratinjau widget.
Android 15 menambahkan dukungan untuk pratinjau yang dibuat. Hal ini berarti penyedia widget
aplikasi dapat membuat RemoteViews
untuk digunakan sebagai pratinjau alat pilih, bukan
resource statis.
![](https://developer.android.com/static/about/versions/15/images/generated-previews.png?authuser=19&hl=id)
API Push
Aplikasi dapat memberikan pratinjau yang dihasilkan melalui push API. Aplikasi dapat menyediakan
pratinjau kapan saja dalam siklus prosesnya, dan tidak menerima permintaan eksplisit
dari host untuk menyediakan pratinjau. Pratinjau disimpan di AppWidgetService
,
dan host dapat memintanya sesuai permintaan. Contoh berikut memuat resource tata letak
widget XML dan menetapkannya 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:
- Kapan pun, penyedia widget akan memanggil
setWidgetPreview
. Pratinjau yang diberikan dipertahankan diAppWidgetService
dengan info penyedia lainnya. setWidgetPreview
memberi tahu host tentang pratinjau yang telah diperbarui melalui callbackAppWidgetHost.onProvidersChanged
. Sebagai respons, host widget memuat ulang semua informasi penyedianya.- Saat menampilkan pratinjau widget, host akan memeriksa
AppWidgetProviderInfo.generatedPreviewCategories
, dan jika kategori yang dipilih tersedia, memanggilAppWidgetManager.getWidgetPreview
untuk menampilkan pratinjau tersimpan untuk penyedia ini.
Waktu menelepon setWidgetPreview
Karena tidak ada callback untuk memberikan pratinjau, aplikasi dapat memilih untuk mengirim pratinjau kapan saja saat aplikasi berjalan. Frekuensi update pratinjau bergantung pada kasus penggunaan widget.
Daftar berikut menjelaskan dua kategori utama kasus penggunaan pratinjau:
- Penyedia yang menampilkan data nyata dalam pratinjau widget mereka, seperti informasi yang dipersonalisasi atau informasi terbaru. Penyedia ini dapat menyetel pratinjau setelah pengguna login atau melakukan konfigurasi awal di aplikasinya. Setelah ini, mereka dapat menyiapkan tugas berkala untuk mengupdate pratinjau sesuai ritme yang mereka pilih. Contoh jenis widget ini dapat berupa foto, kalender, cuaca, atau widget berita.
- Penyedia yang menampilkan informasi statis dalam pratinjau atau widget tindakan cepat yang tidak menampilkan data apa pun. Penyedia ini dapat menyetel pratinjau satu kali, saat aplikasi pertama kali diluncurkan. Contoh jenis widget ini mencakup widget tindakan cepat drive atau widget pintasan Chrome.
Beberapa penyedia mungkin menampilkan pratinjau statis pada alat pilih mode hub, tetapi informasi nyata pada alat pilih layar utama. Penyedia ini harus mengikuti panduan untuk kedua kasus penggunaan tersebut guna menetapkan pratinjau.
Picture-in-Picture
Android 15 memperkenalkan perubahan baru di Picture-in-Picture (PiP) yang memastikan transisi yang lebih lancar saat masuk ke mode PiP. Hal ini akan bermanfaat untuk aplikasi yang memiliki elemen UI yang ditempatkan di atas UI utamanya, yang masuk ke dalam PiP.
Developer menggunakan callback onPictureInPictureModeChanged
untuk menentukan logika
yang mengalihkan visibilitas elemen UI overlay. Callback ini
dipicu saat animasi masuk atau keluar PiP selesai. Mulai
Android 15, class PictureInPictureUiState
menyertakan status baru.
Dengan status UI baru ini, aplikasi yang menargetkan Android 15 akan mengamati
callback Activity#onPictureInPictureUiStateChanged
yang dipanggil dengan
isTransitioningToPip()
segera setelah animasi PiP dimulai. Ada
banyak elemen UI yang tidak relevan untuk aplikasi saat berada dalam mode PiP, misalnya
tampilan atau tata letak yang menyertakan informasi seperti saran, video
yang akan datang, rating, dan judul. Saat aplikasi beralih ke mode PiP, gunakan
callback onPictureInPictureUiStateChanged
untuk menyembunyikan elemen UI ini. Saat
aplikasi beralih ke mode layar penuh dari jendela PiP, gunakan
callback onPictureInPictureModeChanged
untuk memperlihatkan elemen ini, seperti yang ditunjukkan dalam
contoh berikut:
override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
if (pipState.isTransitioningToPip()) {
// Hide UI elements
}
}
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
if (isInPictureInPictureMode) {
// Unhide UI elements
}
}
Tombol visibilitas cepat elemen UI yang tidak relevan ini (untuk jendela PiP) membantu memastikan animasi masuk PiP yang lebih halus dan bebas kedipan.
Peningkatan aturan Jangan Ganggu
AutomaticZenRule
memungkinkan aplikasi menyesuaikan aturan
Pengelolaan Perhatian (Jangan Ganggu) dan memutuskan kapan harus mengaktifkan atau menonaktifkannya. Android 15 meningkatkan aturan ini secara signifikan dengan tujuan meningkatkan
pengalaman pengguna. Peningkatan berikut disertakan:
- Menambahkan jenis ke
AutomaticZenRule
, sehingga sistem dapat menerapkan perlakuan khusus ke beberapa aturan. - Menambahkan ikon ke
AutomaticZenRule
agar mode menjadi lebih dikenali. - Menambahkan string
triggerDescription
keAutomaticZenRule
yang menjelaskan kondisi saat aturan akan menjadi aktif bagi pengguna. - Menambahkan
ZenDeviceEffects
keAutomaticZenRule
, yang memungkinkan aturan memicu hal-hal seperti tampilan skala abu-abu, mode malam, atau meredupkan wallpaper.
Menyetel VibrationEffect untuk saluran notifikasi
Android 15 mendukung penyetelan getaran yang kuat untuk notifikasi masuk melalui
saluran menggunakan NotificationChannel.setVibrationEffect
sehingga
pengguna dapat membedakan berbagai jenis notifikasi tanpa
harus melihat perangkatnya.
Perangkat layar besar dan faktor bentuk
Android 15 memberi aplikasi Anda dukungan untuk mengoptimalkan faktor bentuk Android, termasuk perangkat layar besar, perangkat foldable, dan perangkat foldable.
Peningkatan multitasking layar besar
Android 15 memberi pengguna cara yang lebih baik untuk melakukan multitasking di perangkat layar besar. Misalnya, pengguna dapat menyimpan kombinasi aplikasi layar terpisah favorit mereka untuk akses cepat dan menyematkan taskbar di layar untuk beralih antar-aplikasi dengan cepat. Artinya, memastikan aplikasi Anda adaptif kini menjadi makin penting.
Google I/O memiliki sesi tentang Membangun aplikasi Android adaptif dan Mem-build UI dengan library adaptif Material 3 yang dapat membantu, dan dokumentasi kami memiliki lebih banyak untuk membantu Anda dalam Mendesain untuk layar besar.
Dukungan layar sampul
Aplikasi Anda dapat mendeklarasikan properti yang digunakan Android 15 untuk
memungkinkan Application
atau Activity
ditampilkan di layar penutup
kecil pada perangkat foldable yang didukung. Layar ini terlalu kecil untuk
dianggap sebagai target kompatibel untuk menjalankan aplikasi Android, tetapi aplikasi Anda dapat
memilih untuk mendukungnya, sehingga aplikasi tersedia di lebih banyak tempat.
Konektivitas
Android 15 mengupdate platform untuk memberi aplikasi Anda akses ke kemajuan terbaru dalam teknologi komunikasi dan nirkabel.
Dukungan satelit
Android 15 terus memperluas dukungan platform untuk konektivitas satelit dan menyertakan beberapa elemen UI untuk memastikan pengalaman pengguna yang konsisten di seluruh lanskap konektivitas satelit.
Aplikasi dapat menggunakan ServiceState.isUsingNonTerrestrialNetwork()
untuk
mendeteksi saat perangkat terhubung ke satelit, sehingga memberi aplikasi lebih banyak informasi
mengapa layanan jaringan lengkap mungkin tidak tersedia. Selain itu, Android 15
menyediakan dukungan untuk aplikasi SMS dan MMS serta aplikasi RCS yang dimuat sebelumnya untuk menggunakan
konektivitas satelit untuk mengirim dan menerima pesan.
![](https://developer.android.com/static/about/versions/15/images/satellite-notification.png?authuser=19&hl=id)
Pengalaman NFC yang lebih lancar
Android 15 berupaya membuat pengalaman pembayaran nirsentuh lebih lancar dan
andal sambil terus mendukung ekosistem aplikasi NFC Android yang kuat. Pada
perangkat yang didukung, aplikasi dapat meminta NfcAdapter
untuk memasuki
mode pengamatan, yaitu perangkat memproses tetapi tidak merespons pembaca NFC, yang mengirimkan PollingFrame
objek layanan NFC aplikasi untuk diproses. Objek PollingFrame
dapat digunakan untuk mengautentikasi sebelum komunikasi pertama ke pembaca NFC, sehingga dalam banyak kasus, memungkinkan untuk transaksi sekali ketuk.
Selain itu, aplikasi kini dapat mendaftarkan filter di perangkat yang didukung sehingga dapat menerima notifikasi tentang aktivitas loop polling, yang memungkinkan operasi yang lancar dengan beberapa aplikasi yang mendukung NFC.
Peran Wallet
Android 15 memperkenalkan peran Wallet baru yang memungkinkan integrasi yang lebih erat dengan aplikasi dompet pilihan pengguna. Peran ini menggantikan setelan pembayaran tanpa kontak fisik default NFC. Pengguna dapat mengelola pemegang peran Wallet dengan membuka Setelan > Aplikasi > Aplikasi Default.
Peran Wallet digunakan saat merutekan ketukan NFC untuk AID yang terdaftar dalam kategori pembayaran. Ketukan selalu membuka pemegang peran Wallet, kecuali jika aplikasi lain yang terdaftar untuk AID yang sama berjalan di latar depan.
Peran ini juga digunakan untuk menentukan tempat kartu QuickAccess Wallet harus berada saat diaktifkan. Jika peran disetel ke "Tidak ada", kartu QuickAccess tidak akan tersedia dan ketukan NFC kategori pembayaran hanya akan 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. Baca pembahasan Mengamankan keamanan pengguna di Android dari Google I/O untuk mengetahui lebih banyak hal yang kami lakukan untuk meningkatkan perlindungan pengguna dan melindungi aplikasi Anda dari ancaman baru.
Mengintegrasikan Pengelola Kredensial 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.
Integrasikan 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 menyeluruh (E2EE) di aplikasi Android Anda dengan menyediakan
API level 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 di URI konten
Android 15 memperkenalkan kumpulan API baru yang melakukan pemeriksaan izin pada URI konten:
Context.checkContentUriPermissionFull
: Opsi ini melakukan pemeriksaan izin penuh pada URI konten.- Atribut manifes
Activity
requireContentUriPermissionFromCaller
: Ini menerapkan izin yang ditentukan pada URI konten yang disediakan saat peluncuran aktivitas. - Class
ComponentCaller
untuk pemanggilActivity
: Ini mewakili aplikasi yang meluncurkan aktivitas.
Aksesibilitas
Android 15 menambahkan fitur yang meningkatkan aksesibilitas bagi pengguna.
Braille yang Lebih Baik
Di Android 15, kami telah memungkinkan TalkBack mendukung layar Braille yang menggunakan standar HID melalui USB dan Bluetooth yang aman.
Standar ini, seperti yang digunakan oleh mouse dan keyboard, akan membantu Android mendukung lebih banyak layar Braille dari waktu ke waktu.
Internasionalisasi
Android 15 menambahkan fitur dan kemampuan yang melengkapi pengalaman pengguna saat perangkat digunakan dalam berbagai bahasa.
Font variabel CJK
Mulai Android 15, file font untuk bahasa China, Jepang, dan Korea (CJK), NotoSansCJK, sekarang menjadi font variabel. {i>Font<i} variabel membuka kemungkinan baru untuk tipografi kreatif dalam bahasa CJK. Desainer dapat mempelajari berbagai gaya yang lebih luas dan membuat tata letak yang memukau secara visual yang sebelumnya sulit atau tidak mungkin dicapai.
![](https://developer.android.com/static/about/versions/15/images/cjk-variable-font.png?authuser=19&hl=id)
Justifikasi antarkarakter
Mulai Android 15, teks dapat diratakan menggunakan spasi huruf
menggunakan JUSTIFICATION_MODE_INTER_CHARACTER
. Justifikasi antarkata pertama kali
diperkenalkan di Android 8.0 (API level 26), dan justifikasi
antar-karakter memberikan kemampuan serupa untuk bahasa yang menggunakan
karakter spasi kosong untuk segmentasi, seperti China, Jepang, dan lainnya.
![](https://developer.android.com/static/about/versions/15/images/none-japanese.png?authuser=19&hl=id)
JUSTIFICATION_MODE_NONE
.![](https://developer.android.com/static/about/versions/15/images/none-english.png?authuser=19&hl=id)
JUSTIFICATION_MODE_NONE
.![](https://developer.android.com/static/about/versions/15/images/inter-word-japanese.png?authuser=19&hl=id)
JUSTIFICATION_MODE_INTER_WORD
.![](https://developer.android.com/static/about/versions/15/images/inter-word-english.png?authuser=19&hl=id)
JUSTIFICATION_MODE_INTER_WORD
.![](https://developer.android.com/static/about/versions/15/images/inter-character-japanese.png?authuser=19&hl=id)
JUSTIFICATION_MODE_INTER_CHARACTER
baru.![](https://developer.android.com/static/about/versions/15/images/inter-character-english.png?authuser=19&hl=id)
JUSTIFICATION_MODE_INTER_CHARACTER
baru.Konfigurasi pemisah baris otomatis
Android mulai mendukung jeda baris berbasis frasa untuk bahasa Jepang dan Korea di
Android 13 (API level 33). Meskipun jeda baris berbasis frasa meningkatkan
keterbacaan baris teks pendek, jeda baris tidak berfungsi dengan baik untuk baris teks yang panjang.
Di Android 15, aplikasi kini dapat menerapkan jeda baris berbasis frasa hanya untuk baris
teks pendek, menggunakan opsi
LINE_BREAK_WORD_STYLE_AUTO
. Opsi ini memilih opsi gaya kata terbaik untuk teks.
Untuk baris teks pendek, jeda baris berbasis frasa akan digunakan, dan berfungsi sama
seperti LINE_BREAK_WORD_STYLE_PHRASE
, seperti ditunjukkan dalam
gambar berikut:
![](https://developer.android.com/static/about/versions/15/images/line-break-auto-short.png?authuser=19&hl=id)
LINE_BREAK_WORD_STYLE_AUTO
menerapkan jeda baris berbasis frasa untuk meningkatkan keterbacaan teks.
Ini sama dengan menerapkan
LINE_BREAK_WORD_STYLE_PHRASE
.Untuk baris teks yang lebih panjang, LINE_BREAK_WORD_STYLE_AUTO
menggunakan
gaya kata tanpa jeda baris, yang berfungsi sama seperti
LINE_BREAK_WORD_STYLE_NONE
, seperti yang ditunjukkan pada
gambar berikut:
![](https://developer.android.com/static/about/versions/15/images/line-break-auto-long.png?authuser=19&hl=id)
LINE_BREAK_WORD_STYLE_AUTO
tidak menerapkan gaya kata jeda baris untuk meningkatkan keterbacaan teks.
Ini sama dengan menerapkan
LINE_BREAK_WORD_STYLE_NONE
.Font Hentaigana Jepang Baru
Di Android 15, file font baru untuk Hiragana Jepang lama (dikenal sebagai Hentaigana) dipaketkan secara default. Bentuk unik karakter Hentaigana dapat menambahkan gaya khas pada karya seni atau desain sekaligus membantu menjaga transmisi dan pemahaman yang akurat tentang dokumen Jepang kuno.
![](https://developer.android.com/static/about/versions/15/images/hentaigana-font.png?authuser=19&hl=id)
Kerucut VideoLAN Hak Cipta (c) 1996-2010 VideoLAN. Logo ini atau versi yang dimodifikasi dapat digunakan atau diubah oleh siapa saja untuk merujuk ke project VideoLAN atau produk apa pun yang dikembangkan oleh tim VideoLAN, tetapi tidak menunjukkan dukungan dari project.
Vulkan dan logo Vulkan adalah merek dagang terdaftar dari Khronos Group Inc.
OpenGL adalah merek dagang terdaftar dan logo OpenGL ES adalah merek dagang dari Hewlett Packard Enterprise yang digunakan atas izin dari Khronos.