Android 15 memperkenalkan fitur dan API baru yang hebat bagi para 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 level API 35. Untuk mempelajari area tempat perubahan platform dapat memengaruhi aplikasi Anda, pastikan untuk memeriksa perubahan perilaku Android 15 untuk aplikasi yang menargetkan Android 15 dan untuk semua aplikasi.
Kamera dan media
Android 15 menyertakan berbagai fitur yang meningkatkan pengalaman kamera dan media serta memberi Anda akses ke alat dan hardware untuk mendukung kreator dalam mewujudkan visi mereka di Android.
Untuk mengetahui informasi selengkapnya tentang fitur dan solusi developer terbaru untuk media dan kamera Android, lihat video Building modern Android media and camera experiences dari Google I/O.
Peningkatan Cahaya Rendah
Android 15 引入了弱光增强功能,这是一种自动曝光模式,适用于 Camera 2 和夜间模式相机扩展。“弱光增强”功能可在光线昏暗的环境下调整预览画面的曝光度。这与夜间模式相机扩展程序创建静态图片的方式不同,因为夜间模式会将一系列照片组合起来,以创建一张经过增强的单张图片。虽然夜间模式非常适合拍摄静态图片,但无法创建连续的帧流,而“低光增强”功能可以。因此,弱光增强功能可启用相机功能,例如:
- 提供增强型图片预览,以便用户更好地取景拍摄低光照片
- 在光线不足的情况下扫描二维码
如果您启用“弱光增强”功能,该功能会在光线较弱时自动开启,在光线较强时关闭。
应用可以在光线昏暗的环境下录制预览画面,以保存经过亮度提升的视频。
如需了解详情,请参阅弱光增强。
Kontrol kamera dalam aplikasi
Android 15 添加了一个扩展程序,可让您更好地控制支持的设备上的相机硬件及其算法:
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 kenyaringan

Android 15 memperkenalkan dukungan untuk standar kenyaringan CTA-2075 guna membantu Anda menghindari inkonsistensi kenyaringan audio dan memastikan pengguna tidak perlu terus-menerus menyesuaikan volume saat beralih antarkonten. Sistem ini memanfaatkan informasi karakteristik perangkat output (headphone dan speaker) beserta metadata kenyaringan yang tersedia dalam konten audio AAC untuk menyesuaikan secara cerdas tingkat kenyaringan audio dan rentang dinamis.
Untuk mengaktifkan fitur ini, pastikan metadata kenyaringan tersedia di
konten AAC dan mengaktifkan fitur platform di aplikasi Anda. Untuk itu, Anda dapat
Buat instance objek LoudnessCodecController dengan
memanggil metode factory create-nya dengan audio
ID sesi dari AudioTrack terkait; ingin
otomatis mulai menerapkan pembaruan audio. Anda dapat meneruskan
OnLoudnessCodecUpdateListener untuk mengubah atau memfilter
parameter volume sebelum diterapkan di
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 添加了对使用 USB 连接 MIDI 2.0 设备的支持,这些设备使用通用 MIDI 数据包 (UMP) 进行通信。Android 15 将 UMP 支持扩展到了虚拟 MIDI 应用,使作曲应用能够像使用 USB MIDI 2.0 设备一样,将虚拟 MIDI 2.0 设备用作控制合成器应用的设备。
Dekode 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 berpusat pada alat seperti Android Studio, Jetpack Compose, dan library Android Jetpack, kami selalu mencari cara di platform untuk membantu Anda mewujudkan visi dengan lebih mudah.
Update OpenJDK 17
Android 15 melanjutkan pekerjaan memuat ulang library inti Android agar selaras dengan fitur dalam rilis OpenJDK LTS terbaru.
Fitur dan peningkatan utama berikut disertakan:
- Peningkatan kualitas hidup di sekitar buffer NIO
- Streaming
- Metode
mathdanstrictmathtambahan - Update paket
utiltermasukcollection,map, dansetyang diurutkan - Dukungan
ByteBufferdiDeflater - Update keamanan seperti
X500PrivateCredentialdan 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 menyertakan peningkatan substansial pada PdfRenderer
Google Cloud Platform. Aplikasi dapat menggabungkan fitur lanjutan seperti rendering
file yang dilindungi sandi, anotasi, pengeditan formulir,
penelusuran, dan pemilihan dengan salinan. PDF yang dilinierkan
pengoptimalan didukung untuk mempercepat penayangan PDF lokal dan mengurangi penggunaan resource.
Library Jetpack PDF menggunakan API ini untuk menyederhanakan penambahan PDF
menampilkan aplikasi Anda.
PdfRenderer telah dipindahkan ke modul yang dapat diupdate menggunakan update sistem
Google Play, terlepas dari rilis platform, dan kami mendukung
perubahan ini kembali ke Android 11 (API level 30) dengan membuat platform API
versi pra-Android 15 yang kompatibel, yang disebut
PdfRendererPreV.
Penyempurnaan 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.
Peningkatan OpenType Variable Font API
Android 15 meningkatkan kegunaan font variabel OpenType. Anda dapat membuat
instance FontFamily dari font variabel tanpa menentukan sumbu bobot
dengan buildVariableFamily API. Perender teks mengganti nilai
dari sumbu wght agar cocok dengan teks yang menampilkan.
Menggunakan API ini sangat menyederhanakan kode untuk membuat Typeface:
Kotlin
val newTypeface = Typeface.CustomFallbackBuilder( FontFamily.Builder( Font.Builder(assets, "RobotoFlex.ttf").build()) .buildVariableFamily()) .build()
Java
Typeface newTypeface = Typeface.CustomFallbackBuilder( new FontFamily.Builder( new Font.Builder(assets, "RobotoFlex.ttf").build()) .buildVariableFamily()) .build();
Sebelumnya, untuk membuat Typeface yang sama, Anda memerlukan lebih banyak kode:
Kotlin
val oldTypeface = Typeface.CustomFallbackBuilder( FontFamily.Builder( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 400") .setWeight(400) .build()) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 100") .setWeight(100) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 200") .setWeight(200) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 300") .setWeight(300) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 500") .setWeight(500) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 600") .setWeight(600) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 700") .setWeight(700) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 800") .setWeight(800) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 900") .setWeight(900) .build() ).build() ).build()
Java
Typeface oldTypeface = new Typeface.CustomFallbackBuilder( new FontFamily.Builder( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 400") .setWeight(400) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 100") .setWeight(100) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 200") .setWeight(200) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 300") .setWeight(300) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 500") .setWeight(500) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 600") .setWeight(600) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 700") .setWeight(700) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 800") .setWeight(800) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 900") .setWeight(900) .build() ) .build() ).build();
Berikut ini contoh cara Typeface dibuat dengan API lama dan baru
merender:
Dalam contoh ini, Typeface yang dibuat dengan API lama tidak memiliki
menciptakan bobot font yang akurat untuk 350, 450, 550 dan 650
Font, sehingga perender akan kembali ke bobot terdekat. Jadi ketika
dalam hal ini, 300 dirender, bukan 350, 400 dirender, bukan 450, dan
dan seterusnya. Sebaliknya, Typeface yang dibuat dengan API baru akan secara dinamis membuat
instance Font untuk bobot tertentu, jadi bobot yang akurat dirender untuk 350,
450, 550, dan 650.
Kontrol pemisah baris terperinci
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 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 menyertakan dukungan tingkat OS untuk pengarsipan dan pembatalan pengarsipan aplikasi, sehingga mempermudah semua app store untuk menerapkannya.
Aplikasi dengan izin REQUEST_DELETE_PACKAGES dapat memanggil
metode PackageInstaller requestArchive untuk meminta pengarsipan
paket aplikasi yang diinstal, yang akan menghapus APK dan file dalam cache, tetapi mempertahankan
data pengguna. Aplikasi yang diarsipkan akan ditampilkan sebagai aplikasi yang dapat ditampilkan melalui
LauncherApps API; pengguna akan melihat tampilan UI
untuk menyoroti bahwa mereka
aplikasi akan diarsipkan. Jika pengguna mengetuk aplikasi yang diarsipkan, penginstal yang bertanggung jawab
akan mendapatkan permintaan untuk membatalkan pengarsipan file, dan proses pemulihan dapat
dipantau oleh siaran ACTION_PACKAGE_ADDED.
Mengaktifkan mode 16 KB di perangkat menggunakan opsi developer
Aktifkan opsi developer Boot dengan ukuran halaman 16 KB untuk mem-boot perangkat dalam mode 16 KB.
Dalam versi QPR Android 15, Anda dapat menggunakan opsi developer yang tersedia di perangkat tertentu untuk mem-boot 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 tinggi)
Pixel 8a (dengan Android 15 QPR1 atau yang lebih baru)
Pixel 9, 9 Pro, dan 9 Pro XL (dengan Android 15 QPR2 atau yang lebih baru)
Pixel 9a (dengan Android 16 atau yang lebih baru)
Grafik
Android 15 menghadirkan peningkatan grafis terbaru, termasuk ANGLE dan penambahan pada sistem grafis Canvas.
Memodernisasi akses GPU Android
Hardware Android telah berkembang cukup banyak sejak awal ketika OS inti akan berjalan di satu CPU dan GPU diakses menggunakan API berdasarkan pipeline fungsi tetap. API grafis Vulkan® telah tersedia di NDK sejak Android 7.0 (API level 24) dengan abstraksi tingkat rendah yang lebih mencerminkan hardware GPU modern, diskalakan dengan lebih baik untuk mendukung beberapa core CPU, dan menawarkan overhead driver CPU yang lebih rendah — sehingga meningkatkan performa aplikasi. Vulkan didukung oleh semua game engine modern.
Vulkan adalah antarmuka pilihan Android untuk GPU. Oleh karena itu, Android 15 menyertakan ANGLE sebagai lapisan opsional untuk menjalankan OpenGL® ES di atas Vulkan. Beralih ke ANGLE akan menstandarkan implementasi OpenGL Android untuk meningkatkan kompatibilitas, dan, dalam beberapa kasus, meningkatkan performa. Anda dapat menguji stabilitas dan performa aplikasi OpenGL ES dengan ANGLE dengan mengaktifkan opsi developer di Setelan -> Sistem -> Opsi Developer -> Eksperimental: Aktifkan ANGLE di Android 15.
Roadmap Android ANGLE di Vulkan
Sebagai bagian dari penyederhanaan stack GPU, ke depannya kami akan mengirimkan ANGLE sebagai driver sistem GL di lebih banyak perangkat baru, dengan ekspektasi di masa mendatang bahwa OpenGL/ES hanya akan tersedia melalui ANGLE. Meskipun demikian, kami berencana untuk melanjutkan dukungan untuk OpenGL ES di semua perangkat.
Rekomendasi langkah selanjutnya
Gunakan opsi developer untuk memilih driver ANGLE untuk OpenGL ES dan menguji aplikasi Anda. Untuk project baru, sebaiknya gunakan Vulkan untuk C/C++.
Peningkatan untuk Canvas
Android 15 melanjutkan modernisasi sistem grafis Canvas Android dengan kemampuan tambahan:
Matrix44menyediakan matriks 4x4 untuk mengubah koordinat yang harus digunakan saat Anda ingin memanipulasi kanvas dalam 3D.clipShadermemotong klip saat ini dengan shader yang ditentukan, sedangkanclipOutShadermenetapkan 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 mengetahui praktik terbaik yang hemat baterai, cara men-debug penggunaan jaringan dan daya, serta detail tentang cara kami meningkatkan efisiensi baterai untuk tugas latar belakang di Android 15 dan versi Android terbaru, lihat video Improving battery efficiency of background work on Android dari Google I/O.
ApplicationStartInfo API
Pada versi Android sebelumnya, startup aplikasi agak misterius. Sulit
untuk menentukan dalam aplikasi Anda apakah aplikasi dimulai dari status cold, warm,
atau hot. Sulit juga untuk mengetahui berapa lama aplikasi Anda menghabiskan waktu selama
berbagai fase peluncuran: melakukan fork pada proses, memanggil onCreate, menggambar
frame pertama, dan lainnya. Saat class Application dibuat instance-nya, Anda tidak
memiliki cara untuk mengetahui apakah aplikasi dimulai dari siaran, penyedia konten, tugas, pencadangan, booting selesai, alarm, atau Activity.
ApplicationStartInfo API di Android 15 menyediakan
semua hal ini dan lainnya. Anda bahkan dapat memilih untuk menambahkan stempel waktu Anda sendiri ke dalam
alur untuk membantu mengumpulkan data pengaturan waktu di satu tempat. Selain mengumpulkan
metrik, Anda dapat menggunakan ApplicationStartInfo untuk membantu mengoptimalkan langsung
startup aplikasi; misalnya, Anda dapat menghilangkan pembuatan instance library terkait
UI yang mahal dalam class Application saat aplikasi dimulai karena
siaran.
Informasi ukuran aplikasi mendetail
Sejak Android 8.0 (API level 26), Android telah menyertakan
StorageStats.getAppBytes API yang merangkum ukuran
aplikasi yang diinstal sebagai satu angka byte, yang merupakan jumlah ukuran APK, ukuran file yang diekstrak dari APK, dan file yang dihasilkan di
perangkat seperti kode yang dikompilasi ahead-of-time (AOT). Jumlah ini tidak terlalu
mendalam dalam hal cara aplikasi Anda menggunakan penyimpanan.
Android 15 menambahkan
StorageStats.getAppBytesByDataType([type]) API, yang memungkinkan
Anda mendapatkan insight tentang cara aplikasi menggunakan semua ruang tersebut, termasuk pemisahan file
APK, AOT, dan kode terkait percepatan, metadata dex, library, dan profil
yang dipandu.
Pembuatan profil yang dikelola aplikasi
Android 15 menyertakan class ProfilingManager,
yang memungkinkan Anda mengumpulkan informasi pembuatan profil dari dalam aplikasi seperti heap
dump, profil heap, sampling stack, dan lainnya. Fitur ini memberikan callback ke aplikasi Anda dengan tag yang disediakan untuk mengidentifikasi file output, yang dikirim ke direktori file aplikasi Anda. API melakukan pembatasan kapasitas untuk meminimalkan dampak
performa.
Untuk menyederhanakan pembuatan permintaan pembuatan profil di aplikasi Anda, sebaiknya gunakan
AndroidX API Profiling yang sesuai, yang tersedia
di Core 1.15.0-rc01 atau yang lebih tinggi.
Peningkatan database SQLite
Android 15 引入了 SQLite API,这些 API 可公开底层 SQLite 引擎的高级功能,以解决可能在应用中出现的特定性能问题。将 SQLite 更新到版本 3.44.3。
开发者应参阅 SQLite 性能最佳实践 以便充分利用其 SQLite 数据库,尤其是在处理大型 或运行对延迟敏感的查询时
- 只读延迟事务:在发出
只读(不包括写入语句),请使用
beginTransactionReadOnly()和beginTransactionWithListenerReadOnly(SQLiteTransactionListener)发出只读的DEFERRED事务。此类事务 如果数据库处于 WAL 模式 与IMMEDIATE或EXCLUSIVE事务并发运行。 - 行数和 ID:添加了 API 以检索已更改的行数和 ID
行或最后插入的行 ID 而不发出额外的查询。
getLastChangedRowCount()会返回当前事务中最近的 SQL 语句插入、更新或删除的行数,而getTotalChangedRowCount()会返回当前连接的计数。getLastInsertRowId()返回最后一行的rowid以便在当前连接中插入 - 原始语句:发出原始 SQlite 语句,从而绕过便利 及其可能产生的任何额外处理开销。
Update Android Dynamic Performance Framework
Android 15 继续投资于 Android 动态性能框架 (ADPF),这是一组 API,可让游戏和性能密集型应用更为直接地与 Android 设备的电源和散热系统进行互动。在受支持的设备上,Android 15 添加了 ADPF 功能:
- 针对提示会话的节能模式,用于指明其关联的线程应优先节能而非性能,非常适合长时间运行的后台工作负载。
- 系统可以在提示会话中报告 GPU 和 CPU 工作时长,以便同时调整 CPU 和 GPU 频率,以最佳方式满足工作负载需求。
- 热余量阈值,用于根据余量预测来解读可能的热节流状态。
如需详细了解如何在应用和游戏中使用 ADPF,请参阅相关文档。
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 android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="astore.com" />
<uri-relative-filter-group>
<data android:pathPrefix="/auth" />
<data android:query="region=na" />
</uri-relative-filter-group>
<uri-relative-filter-group android:allow="false">
<data android:pathPrefix="/auth" />
<data android:query="mobileoptout=true" />
</uri-relative-filter-group>
<uri-relative-filter-group android:allow="false">
<data android:pathPrefix="/auth" />
<data android:fragmentPrefix="faq" />
</uri-relative-filter-group>
</intent-filter>
Ruang privasi
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
Aplikasi kini hanya dapat menyoroti foto dan video yang baru saja 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 包含最新的 Android 广告服务扩展,其中包含最新版本的 Privacy Sandbox on Android。我们一直致力于开发可更好地保护用户隐私,并为移动应用打造高效的个性化广告体验的技术,此次添加新功能就是其中的一项举措。我们的 Privacy Sandbox 页面详细介绍了 Privacy Sandbox on Android 开发者预览版和 Beta 版计划,可帮助您上手使用。
Health Connect
Android 15 集成了与 Health Connect by Android 相关的最新扩展程序。Health Connect by Android 是一个安全的集中式平台,可用于管理和共享应用收集的健康与健身数据。此次更新 增加了对健身、 营养、体表温度、训练计划等。
体表温度追踪功能让用户可以更精确地存储和分享体表温度 来自穿戴式设备或其他跟踪设备的体温数据。
训练计划是一种结构化的锻炼计划,可帮助用户实现健身目标。训练计划支持各种完成和表现目标:
如需详细了解 Android 中 Health Connect 的最新更新,请参阅 利用 Android 打造自适应体验 健康演讲。
Berbagi layar aplikasi
Android 15 mendukung berbagi layar aplikasi sehingga pengguna dapat berbagi atau merekam
jendela aplikasi, bukan seluruh layar perangkat. Fitur ini, yang pertama kali diaktifkan di
Android 14 QPR2, mencakup
callback MediaProjection yang memungkinkan aplikasi Anda
menyesuaikan pengalaman berbagi layar aplikasi. Perhatikan bahwa untuk aplikasi yang menargetkan
Android 14 (level API 34) atau yang lebih tinggi,
izin pengguna diperlukan untuk setiap
sesi pengambilan MediaProjection.
Pengalaman pengguna dan UI sistem
Android 15 memberi developer 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 untuk meningkatkan pengalaman pengguna aplikasi Anda, lihat video Improve the user experience of your Android app dari Google I/O.
Pratinjau widget yang lebih lengkap dengan Generated Previews API
Sebelum Android 15, satu-satunya cara untuk menyediakan pratinjau pemilih widget adalah dengan menentukan resource gambar atau tata letak statis. Pratinjau ini sering kali berbeda secara signifikan dengan tampilan widget sebenarnya saat ditempatkan di layar utama. Selain itu, resource statis tidak dapat dibuat dengan Jetpack Glance, sehingga developer Glance harus mengambil screenshot widget atau membuat tata letak XML untuk memiliki pratinjau widget.
Android 15 menambahkan dukungan untuk pratinjau yang dihasilkan. Artinya, widget aplikasi
penyedia dapat membuat RemoteViews untuk digunakan sebagai pratinjau pemilih,
resource statis.
Push API
Aplikasi dapat menyediakan pratinjau yang dihasilkan melalui API push. Aplikasi dapat memberikan
melihat pratinjau di titik mana pun dalam siklus prosesnya, dan tidak menerima permintaan eksplisit
dari {i>host<i} untuk
menyediakan pratinjau. Pratinjau disimpan di AppWidgetService,
dan host dapat memintanya secara on-demand. Contoh berikut memuat widget XML
dan menyetelnya sebagai pratinjau:
AppWidgetManager.getInstance(appContext).setWidgetPreview(
ComponentName(
appContext,
SociaLiteAppWidgetReceiver::class.java
),
AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
RemoteViews("com.example", R.layout.widget_preview)
)
Alur yang diharapkan adalah:
- Penyedia widget akan memanggil
setWidgetPreviewkapan saja. Pratinjau yang disediakan dipertahankan diAppWidgetServicedengan info penyedia lainnya. setWidgetPreviewmemberi tahu host tentang pratinjau yang diperbarui melalui callbackAppWidgetHost.onProvidersChanged. Sebagai respons, widget {i>host<i} memuat ulang semua informasi penyedianya.- Saat menampilkan pratinjau widget, host akan memeriksa
AppWidgetProviderInfo.generatedPreviewCategories, dan jika kategori yang dipilih tersedia, panggilAppWidgetManager.getWidgetPreviewuntuk menampilkan pratinjau tersimpan untuk penyedia ini.
Waktu untuk menelepon setWidgetPreview
Karena tidak ada callback untuk menyediakan pratinjau, aplikasi dapat memilih untuk mengirim melihat pratinjau kapan saja saat dijalankan. Frekuensi update pratinjau bergantung pada kasus penggunaan widget.
Daftar berikut menjelaskan dua kategori utama kasus penggunaan pratinjau:
- Penyedia yang menampilkan data sebenarnya dalam pratinjau widget mereka, misalnya data yang dipersonalisasi atau informasi terbaru. Penyedia ini dapat menetapkan pratinjau setelah pengguna login atau telah melakukan konfigurasi awal di aplikasi mereka. Setelah itu, mereka dapat menyiapkan tugas berkala untuk memperbarui pratinjau pada ritme yang dipilih. Contoh widget jenis ini dapat berupa foto, kalender, cuaca, atau berita .
- Penyedia yang menampilkan informasi statis di pratinjau atau widget tindakan cepat yang tidak menampilkan data apa pun. Penyedia ini dapat menetapkan pratinjau satu kali, saat aplikasi pertama kali diluncurkan. Contoh jenis widget ini mencakup perjalanan cepat tindakan atau widget pintasan Chrome.
Beberapa penyedia mungkin menampilkan pratinjau statis pada pemilih mode hub, tetapi informasi di pemilih layar utama. Penyedia ini harus mengikuti panduan untuk kedua kasus penggunaan ini guna menetapkan pratinjau.
Picture-in-Picture
Android 15 memperkenalkan perubahan pada Picture-in-Picture (PiP) yang memastikan transisi yang lebih lancar saat memasuki mode PiP. Hal ini akan bermanfaat bagi aplikasi dengan elemen UI yang ditempatkan di atas UI utamanya, yang akan masuk ke PiP.
Developer menggunakan callback onPictureInPictureModeChanged untuk menentukan logika
yang mengubah visibilitas elemen UI overlay. Callback ini
dipicu saat animasi masuk atau keluar PiP selesai. Dimulai dalam
Android 15, class PictureInPictureUiState menyertakan status lain.
Dengan status UI ini, aplikasi yang menargetkan Android 15 (API level 35) akan mengamati
Callback Activity#onPictureInPictureUiStateChanged dipanggil dengan
isTransitioningToPip() segera setelah animasi PiP dimulai. Ada
banyak elemen UI yang tidak relevan untuk aplikasi saat dalam mode PiP, untuk
contoh tampilan atau tata letak yang menyertakan informasi seperti saran, teks mendatang
video, rating, dan judul. Saat aplikasi masuk ke mode PiP, gunakan
Callback onPictureInPictureUiStateChanged untuk menyembunyikan elemen UI ini. Jika
aplikasi masuk ke mode layar penuh dari jendela PiP, gunakan
Callback onPictureInPictureModeChanged untuk memperlihatkan elemen ini, seperti yang ditunjukkan pada
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 dari elemen UI yang tidak relevan (untuk jendela PiP) membantu memastikan animasi masuk PiP yang lebih halus dan bebas kedipan.
Aturan Jangan Ganggu yang ditingkatkan
AutomaticZenRule 允许应用自定义注意力机制
管理(勿扰)规则,并确定何时启用或停用
。Android 15 极大地增强了这些规则,旨在提高
用户体验。其中包含以下增强功能:
- 向
AutomaticZenRule添加类型,让系统能够应用特殊类型 对某些规则的处理 - 向
AutomaticZenRule添加图标,使模式更加丰富 易于识别。 - 将
triggerDescription字符串添加到AutomaticZenRule,用于描述 规则应当对用户生效的条件。 - 已添加
ZenDeviceEffects更改为AutomaticZenRule,从而允许规则触发灰度等操作 显示、夜间模式或调暗壁纸。
Menetapkan VibrationEffect untuk saluran notifikasi
Android 15 mendukung setelan getaran yang kaya untuk notifikasi masuk dengan
saluran menggunakan NotificationChannel.setVibrationEffect, sehingga
pengguna dapat membedakan berbagai jenis notifikasi tanpa
hanya dengan melihat
perangkat mereka.
Chip status bar proyeksi media dan penghentian otomatis
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 memanfaatkan faktor bentuk Android secara maksimal, termasuk perangkat layar besar, perangkat flip, dan perangkat foldable.
Multitasking perangkat layar besar yang ditingkatkan
Android 15 为用户提供了在大屏设备上更好地进行多任务处理的方式。对于 例如,用户可以保存自己喜爱的分屏应用组合, 访问并固定屏幕上的任务栏,以便在应用之间快速切换。这意味着 让应用具备自适应能力比以往任何时候都更加重要。
Google I/O 大会上有一些关于构建自适应 Android 的会议 应用和使用 Material 3 构建界面 自适应库 我们的文档中提供了更多帮助信息,帮助您针对大型语言 。
Dukungan layar penutup
Aplikasi Anda dapat mendeklarasikan properti yang digunakan Android 15 untuk
memungkinkan Application atau Activity ditampilkan di layar penutup
kecil perangkat yang dapat dibalik yang didukung. Layar ini terlalu kecil untuk
dianggap sebagai target yang kompatibel untuk menjalankan aplikasi Android, tetapi aplikasi Anda dapat
memilih untuk mendukungnya, sehingga aplikasi Anda 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 继续扩大对卫星连接的平台支持,并包含一些界面元素,以确保在整个卫星连接环境中提供一致的用户体验。
应用可以使用 ServiceState.isUsingNonTerrestrialNetwork() 执行以下操作:
检测设备是否连接到卫星,让他们更清楚地了解
可能会导致完全网络服务不可用的原因此外,Android 15 支持短信和彩信应用以及预加载的 RCS 应用,以便使用卫星连接发送和接收消息。
Pengalaman NFC yang lebih lancar
Android 15 正在努力打造更顺畅、更可靠的感应式付款体验,同时继续支持 Android 强大的 NFC 应用生态系统。在受支持的设备上,应用可以请求 NfcAdapter 进入观察模式,在该模式下,设备会监听但不会响应 NFC 读卡器,并将应用的 NFC 服务 PollingFrame
对象发送以进行处理。PollingFrame 对象可用于在与 NFC 读卡器进行首次通信之前进行身份验证,在许多情况下,这支持一触式交易。
此外,应用可以在受支持的设备上注册过滤器,以便在有轮询循环活动时收到通知,从而能够与多个感知 NFC 的应用顺畅运行。
Peran Wallet
Android 15 引入了钱包角色,可与用户的首选钱包应用更紧密地集成。此角色会取代 NFC 默认的感应式付款设置。用户可以前往设置 > 应用 > 默认应用,管理钱包角色持有者。
在为在付款类别中注册的 AID 路由 NFC 感应式付款时,系统会使用钱包角色。点按操作始终会转到 Google 钱包角色持有者,除非有已注册相同 AID 的其他应用在前台运行。
此角色还用于确定“Google 钱包”快速访问功能块在启用后应显示在何处。将角色设为“无”时,“快速访问”功能块不可用,并且支付类别 NFC 点按仅传送到前台应用。
Keamanan
Android 15 membantu Anda meningkatkan keamanan aplikasi, melindungi data aplikasi, dan memberi pengguna lebih banyak transparansi dan kontrol atas data mereka. Lihat video Safeguarding user security on Android dari Google I/O untuk mengetahui lebih lanjut upaya kami dalam meningkatkan perlindungan pengguna dan melindungi aplikasi Anda dari ancaman baru.
Mengintegrasikan Credential Manager dengan isi otomatis
Mulai Android 15, developer dapat menautkan tampilan tertentu seperti kolom nama pengguna atau sandi dengan permintaan Pengelola Kredensial, sehingga lebih mudah untuk memberikan pengalaman pengguna yang disesuaikan selama proses login. Saat pengguna berfokus pada salah satu tampilan ini, permintaan yang sesuai akan dikirim ke Pengelola Kredensial. Kredensial yang dihasilkan digabungkan di seluruh penyedia dan ditampilkan di UI penggantian isi otomatis, seperti saran inline atau saran dropdown. Library androidx.credentials Jetpack adalah endpoint pilihan yang dapat digunakan developer dan akan segera tersedia untuk lebih meningkatkan fitur ini di Android 15 dan yang lebih baru.
Mengintegrasikan pendaftaran dan login sekali ketuk dengan perintah biometrik
Credential Manager将生物识别提示集成到凭据创建过程中 和登录流程,这样提供商就无需管理 生物识别提示。因此,凭据提供程序只需专注于创建和获取流程的结果,并辅以生物识别流程结果。这一简化的流程创建了更高效、更精简的凭据 创建和检索过程。
Pengelolaan kunci untuk enkripsi end-to-end
Kami memperkenalkan E2eeContactKeysManager di Android 15, yang
memfasilitasi enkripsi end-to-end (E2EE) di aplikasi Android Anda dengan menyediakan
API tingkat OS untuk penyimpanan kunci publik kriptografis.
E2eeContactKeysManager dirancang untuk berintegrasi dengan aplikasi
kontak platform guna memberi pengguna cara terpusat untuk mengelola dan memverifikasi
kunci publik kontak mereka.
Pemeriksaan izin pada URI konten
Android 15 memperkenalkan serangkaian API yang melakukan pemeriksaan izin pada URI konten:
Context.checkContentUriPermissionFull: Tindakan ini melakukan pemeriksaan izin penuh pada URI konten.- Atribut manifes
ActivityrequireContentUriPermissionFromCaller: Ini menerapkan izin yang ditentukan pada URI konten yang diberikan saat peluncuran aktivitas. - Class
ComponentCalleruntuk pemanggilActivity: Class 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 untuk mendukung layar Braille yang menggunakan standar HID melalui USB dan Bluetooth aman.
Standar ini, seperti yang digunakan oleh mouse dan keyboard, akan membantu Android mendukung berbagai penampil Braille yang lebih luas dari waktu ke waktu.
Internasionalisasi
Android 15 menambahkan fitur dan kemampuan yang melengkapi pengalaman pengguna saat perangkat digunakan dalam bahasa yang berbeda.
Font variabel CJK
Mulai Android 15, file font untuk bahasa China, Jepang, dan Korea (CJK), NotoSansCJK, kini menjadi font variabel. Font variabel membuka kemungkinan untuk tipografi kreatif dalam bahasa CJK. Desainer dapat menjelajahi berbagai gaya yang lebih luas dan membuat tata letak yang menarik secara visual yang sebelumnya sulit atau tidak mungkin dicapai.
Justifikasi antar-karakter
Mulai Android 15, teks dapat dibenarkan menggunakan spasi huruf dengan
menggunakan JUSTIFICATION_MODE_INTER_CHARACTER. Justifikasi antarkata
pertama kali diperkenalkan di Android 8.0 (API level 26), dan justifikasi antarkarakter
memberikan kemampuan serupa untuk bahasa yang menggunakan
karakter spasi kosong untuk segmentasi, seperti China, Jepang, dan lainnya.
JUSTIFICATION_MODE_NONE.
JUSTIFICATION_MODE_NONE.
JUSTIFICATION_MODE_INTER_WORD.
JUSTIFICATION_MODE_INTER_WORD.
JUSTIFICATION_MODE_INTER_CHARACTER.
JUSTIFICATION_MODE_INTER_CHARACTER.Konfigurasi pemisah baris 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
Di Android 15, file font untuk huruf Hiragana Jepang lama (yang dikenal sebagai Hentaigana) secara default dipaketkan. Bentuk unik karakter Hentaigana dapat menambahkan gaya unik pada karya seni atau desain sekaligus membantu mempertahankan transmisi dan pemahaman yang akurat tentang dokumen Jepang kuno.
Kegel VideoLAN Hak Cipta (c) 1996-2010 VideoLAN. Logo ini atau versi yang dimodifikasi dapat digunakan atau dimodifikasi oleh siapa saja untuk merujuk ke project VideoLAN atau produk apa pun yang dikembangkan oleh tim VideoLAN, tetapi tidak menunjukkan dukungan oleh 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 Hewlett Packard Enterprise yang digunakan dengan izin dari Khronos.