Ringkasan Fitur dan API

Android 14 memperkenalkan fitur dan API hebat untuk para developer. Berikut ini membantu Anda mempelajari fitur-fitur yang tersedia untuk aplikasi Anda, serta mulai menggunakan API terkait.

Untuk melihat daftar mendetail tentang API yang ditambahkan, diubah, dan dihapus, baca laporan perbedaan API. Untuk mengetahui detail tentang API yang ditambahkan, buka referensi API Android — untuk Android 14, cari API yang ditambahkan di level API 34. Untuk mempelajari area dengan perubahan platform yang mungkin memengaruhi aplikasi Anda, pastikan untuk memeriksa perubahan perilaku Android 14 untuk aplikasi yang menargetkan Android 14 dan untuk semua aplikasi.

Internasionalisasi

Preferensi bahasa per aplikasi

Android 14 memperluas fitur bahasa per aplikasi yang diperkenalkan di Android 13 (API level 33) dengan kemampuan tambahan berikut:

  • Otomatis membuat localeConfig aplikasi: Mulai dari Android Studio Giraffe Canary 7 dan AGP 8.1.0-alpha07, Anda dapat mengonfigurasi aplikasi untuk mendukung preferensi bahasa per aplikasi secara otomatis. Berdasarkan resource project, plugin Android Gradle menghasilkan file LocaleConfig dan menambahkan referensi ke file tersebut dalam file manifes akhir, sehingga Anda tidak perlu lagi membuat atau memperbarui file secara manual. AGP menggunakan resource dalam folder res modul aplikasi Anda dan dependensi modul library apa pun untuk menentukan lokalitas yang akan disertakan dalam file LocaleConfig.

  • Update dinamis untuk localeConfig aplikasi: Gunakan metode setOverrideLocaleConfig() dan getOverrideLocaleConfig() di LocaleManager untuk memperbarui secara dinamis daftar bahasa yang didukung aplikasi Anda di setelan sistem perangkat. Gunakan fleksibilitas ini untuk menyesuaikan daftar bahasa yang didukung per region, menjalankan eksperimen A/B, atau memberikan daftar lokalitas yang diupdate jika aplikasi Anda menggunakan push sisi server untuk pelokalan.

  • Visibilitas bahasa aplikasi untuk editor metode input (IME): IME dapat menggunakan metode getApplicationLocales() untuk memeriksa bahasa aplikasi saat ini dan mencocokkan bahasa IME dengan bahasa tersebut.

Grammatical Inflection API

Tiga miliar orang menggunakan bahasa bergender: bahasa yang kategori gramatikalnya—seperti kata benda, kata kerja, kata sifat, dan preposisi—diterapkan dengan gender orang dan objek yang Anda ajak bicara atau Anda bicarakan. Secara tradisional, banyak bahasa bergender menggunakan gender gramatikal maskulin sebagai gender default atau generik.

Menjangkau pengguna dalam gender gramatikal yang salah, seperti menyapa perempuan dengan gender gramatikal yang maskulin, dapat memberi dampak negatif pada performa dan sikap mereka. Sebaliknya, UI dengan bahasa yang mencerminkan gender gramatikal pengguna dengan benar dapat meningkatkan interaksi pengguna dan memberikan pengalaman pengguna yang lebih personal dan terdengar alami.

Guna membantu Anda mem-build UI yang berorientasi pengguna untuk bahasa-bahasa bergender, Android 14 memperkenalkan Grammatical Inflection API, yang memungkinkan Anda menambahkan dukungan untuk gender gramatikal tanpa perlu memfaktorkan ulang aplikasi.

Preferensi regional

Preferensi regional memungkinkan pengguna mempersonalisasi satuan suhu, hari pertama dalam seminggu, dan sistem penomoran. Orang Eropa yang tinggal di Amerika Serikat mungkin lebih memilih satuan suhu dalam Celsius, bukan Fahrenheit, dan menginginkan aplikasi memperlakukan Senin sebagai awal minggu, bukan default Minggu seperti di Amerika.

Menu Setelan Android yang baru untuk preferensi ini memberi pengguna lokasi yang dapat ditemukan dan terpusat untuk mengubah preferensi aplikasi. Preferensi ini juga tetap ada melalui pencadangan dan pemulihan. Beberapa API dan intent—seperti getTemperatureUnit dan getFirstDayOfWeek— memberikan pembacaan aplikasi Anda akses ke preferensi pengguna, sehingga aplikasi dapat menyesuaikan cara menampilkan informasi. Anda juga dapat mendaftarkan BroadcastReceiver di ACTION_LOCALE_CHANGED untuk menangani perubahan konfigurasi lokalitas saat preferensi regional berubah.

Untuk menemukan setelan ini, buka aplikasi Settings, lalu buka System > Languages & input > Regional preferences.

Layar Preferensi regional di setelan sistem Android.
Opsi suhu untuk preferensi regional di setelan sistem Android.

Aksesibilitas

Penskalaan font non-linear ke 200%

Mulai Android 14, sistem mendukung penskalaan font hingga 200%, yang memberikan opsi aksesibilitas tambahan kepada pengguna yang mengalami gangguan penglihatan, sesuai dengan Panduan Aksesibilitas Konten Web (WCAG).

Agar elemen teks besar di layar tidak diskalakan terlalu besar, sistem akan menerapkan kurva penskalaan nonlinear. Strategi penskalaan ini berarti teks besar tidak diskalakan pada kecepatan yang sama dengan teks yang lebih kecil. Penskalaan font nonlinear membantu mempertahankan hierarki proporsional antara elemen dengan ukuran yang berbeda sekaligus memitigasi masalah dengan penskalaan teks linear pada derajat yang tinggi (seperti teks terpotong atau teks yang menjadi lebih sulit dibaca karena ukuran layar yang sangat besar).

Menguji aplikasi dengan penskalaan font nonlinear

Aktifkan ukuran font maksimum di setelan aksesibilitas perangkat untuk menguji aplikasi Anda.

Jika Anda sudah menggunakan unit piksel yang diskalakan (sp) untuk menentukan ukuran teks, opsi tambahan dan peningkatan penskalaan ini akan otomatis diterapkan pada teks di aplikasi Anda. Namun, Anda tetap harus melakukan pengujian UI dengan ukuran font maksimum yang diaktifkan (200%) untuk memastikan aplikasi Anda menerapkan ukuran font dengan benar dan dapat mengakomodasi ukuran font yang lebih besar tanpa memengaruhi kegunaan.

Untuk mengaktifkan ukuran font 200%, ikuti langkah-langkah berikut:

  1. Buka aplikasi Settings dan buka Accessibility > Display size and text.
  2. Untuk opsi Font size, ketuk ikon plus (+) hingga setelan ukuran font maksimum diaktifkan, seperti yang ditunjukkan dalam gambar yang menyertai bagian ini.

Menggunakan satuan piksel yang diskalakan (sp) untuk ukuran teks

Ingatlah untuk selalu menentukan ukuran teks dalam unit sp. Saat aplikasi Anda menggunakan unit sp, Android dapat menerapkan ukuran teks pilihan pengguna dan menskalakannya dengan tepat.

Jangan menggunakan unit sp untuk padding atau menentukan tinggi tampilan dengan asumsi padding implisit: dengan penskalaan font nonlinear, dimensi sp mungkin tidak proporsional, sehingga 4sp + 20sp mungkin tidak sama dengan 24sp.

Mengonversi satuan piksel yang diskalakan (sp)

Gunakan TypedValue.applyDimension() untuk mengonversi dari unit sp ke piksel, dan gunakan TypedValue.deriveDimension() untuk mengonversi piksel ke sp. Metode ini menerapkan kurva penskalaan nonlinear yang sesuai secara otomatis.

Hindari persamaan hardcode menggunakan Configuration.fontScale atau DisplayMetrics.scaledDensity. Karena penskalaan font bersifat nonlinear, kolom scaledDensity tidak lagi akurat. Kolom fontScale harus digunakan untuk tujuan informasi hanya karena font tidak lagi diskalakan dengan nilai skalar tunggal.

Menggunakan satuan sp untuk lineHeight

Selalu tentukan android:lineHeight menggunakan satuan sp, bukan dp, sehingga tinggi baris diskalakan bersama dengan teks Anda. Atau, jika teks Anda adalah sp, tetapi lineHeight dalam dp atau px, teks tidak akan diskalakan dan tampak sempit. TextView otomatis mengoreksi lineHeight sehingga proporsi yang Anda inginkan dipertahankan, tetapi hanya jika textSize dan lineHeight ditentukan dalam unit sp.

Kamera dan media

Ultra HDR untuk gambar

Ilustrasi kualitas gambar Standard Dynamic Range (SDR) versus High Dynamic Range (HDR).

Android 14 menambahkan dukungan untuk gambar Rentang Dinamis Tinggi (HDR) yang mempertahankan lebih banyak informasi dari sensor saat mengambil foto, yang memungkinkan warna cerah dan kontras yang lebih besar. Android menggunakan format Ultra HDR, yang sepenuhnya kompatibel dengan gambar JPEG, sehingga aplikasi dapat beroperasi dengan gambar HDR secara lancar, yang menampilkannya dalam Standard Dynamic Range (SDR) sesuai kebutuhan.

Rendering gambar ini di UI dalam HDR dilakukan secara otomatis oleh framework saat aplikasi memilih menggunakan UI HDR untuk Jendela Aktivitasnya, baik melalui entri manifes maupun saat runtime dengan memanggil Window.setColorMode(). Anda juga dapat mengambil gambar diam Ultra HDR yang dikompresi di perangkat yang didukung. Dengan lebih banyak warna yang dipulihkan dari sensor, pengeditan di postingan dapat menjadi lebih fleksibel. Gainmap yang terkait dengan gambar Ultra HDR dapat digunakan untuk merendernya menggunakan OpenGL atau Vulkan.

Zoom, Fokus, Postview, dan lainnya di ekstensi kamera

Android 14 mengupgrade dan meningkatkan ekstensi kamera, sehingga aplikasi dapat menangani waktu pemrosesan yang lebih lama, yang memungkinkan gambar yang lebih baik menggunakan algoritma komputasi yang intensif seperti fotografi cahaya redup pada perangkat yang didukung. Fitur-fitur ini memberi pengguna pengalaman yang lebih andal saat menggunakan kemampuan ekstensi kamera. Contoh peningkatan ini mencakup:

Zoom dalam sensor

When REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE in CameraCharacteristics contains SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW, your app can use advanced sensor capabilities to give a cropped RAW stream the same pixels as the full field of view by using a CaptureRequest with a RAW target that has stream use case set to CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW. By implementing the request override controls, the updated camera gives users zoom control even before other camera controls are ready.

Audio USB lossless

Android 14 mendapatkan dukungan untuk format audio lossless untuk pengalaman tingkat audiophile dibandingkan headset berkabel USB. Anda dapat mengkueri perangkat USB untuk atribut mixer pilihannya, mendaftarkan pemroses untuk perubahan atribut mixer yang diinginkan, dan mengonfigurasi atribut mixer menggunakan class AudioMixerAttributes. Class ini mewakili format, seperti mask saluran, frekuensi sampel, dan perilaku mixer audio. Class ini memungkinkan audio dikirim secara langsung, tanpa pencampuran, penyesuaian volume, atau efek pemrosesan.

Alat dan produktivitas developer

Credential Manager

Android 14 adds Credential Manager as a platform API, with additional support back to Android 4.4 (API level 19) devices through a Jetpack Library using Google Play services. Credential Manager aims to make sign-in easier for users with APIs that retrieve and store credentials with user-configured credential providers. Credential Manager supports multiple sign-in methods, including username and password, passkeys, and federated sign-in solutions (such as Sign-in with Google) in a single API.

Passkeys provide many advantages. For example, passkeys are built on industry standards, can work across different operating systems and browser ecosystems, and can be used with both websites and apps.

For more information, see the Credential Manager and passkeys documentation and the blogpost about Credential Manager and passkeys.

Health Connect

Health Connect is an on-device repository for user health and fitness data. It allows users to share data between their favorite apps, with a single place to control what data they want to share with these apps.

On devices running Android versions prior to Android 14, Health Connect is available to download as an app on the Google Play store. Starting with Android 14, Health Connect is part of the platform and receives updates through Google Play system updates without requiring a separate download. With this, Health Connect can be updated frequently, and your apps can rely on Health Connect being available on devices running Android 14 or higher. Users can access Health Connect from the Settings in their device, with privacy controls integrated into the system settings.

Users can get started using Health Connect without a separate app download on devices running Android 14 or higher.
Users can control which apps have access to their health and fitness data through system settings.

Health Connect includes several new features in Android 14, such as exercise routes, allowing users to share a route of their workout which can be visualized on a map. A route is defined as a list of locations saved within a window of time, and your app can insert routes into exercise sessions, tying them together. To ensure that users have complete control over this sensitive data, users must allow sharing individual routes with other apps.

For more information, see the Health Connection documentation and the blogpost on What's new in Android Health.

Update OpenJDK 17

Android 14 melanjutkan pekerjaan memuat ulang library inti Android agar selaras dengan fitur dalam rilis OpenJDK LTS terbaru, termasuk update library dan dukungan bahasa Java 17 untuk developer aplikasi dan platform.

Fitur dan peningkatan berikut disertakan:

  • Mengupdate sekitar 300 class java.base ke dukungan Java 17.
  • Pemblokiran Teks, yang memperkenalkan literal string multibaris ke bahasa pemrograman Java.
  • Pencocokan Pola untuk instance, yang memungkinkan objek diperlakukan sebagai memiliki jenis tertentu dalam instanceof tanpa variabel tambahan.
  • Class tertutup, yang memungkinkan Anda membatasi class dan antarmuka yang dapat memperluas atau menerapkannya.

Berkat update sistem Google Play (Project Mainline), lebih dari 600 juta perangkat diaktifkan untuk menerima update Android Runtime (ART) terbaru yang menyertakan perubahan ini. Ini adalah bagian dari komitmen kami untuk memberi aplikasi lingkungan yang lebih konsisten dan aman di seluruh perangkat, serta memberikan fitur dan kemampuan baru kepada pengguna, terlepas dari rilis platform.

Java dan OpenJDK adalah merek dagang atau merek dagang terdaftar dari Oracle dan/atau afiliasinya.

Peningkatan untuk app store

Android 14 introduces several PackageInstaller APIs that allow app stores to improve their user experience.

Request install approval before downloading

Installing or updating an app might require user approval. For example, when an installer making use of the REQUEST_INSTALL_PACKAGES permission attempts to install a new app. In prior Android versions, app stores can only request user approval after APKs are written to the install session and the session is committed.

Starting with Android 14, the requestUserPreapproval() method lets installers request user approval before committing the install session. This improvement lets an app store defer downloading any APKs until after the installation has been approved by the user. Furthermore, once a user has approved installation, the app store can download and install the app in the background without interrupting the user.

Claim responsibility for future updates

The setRequestUpdateOwnership() method allows an installer to indicate to the system that it intends to be responsible for future updates to an app it is installing. This capability enables update ownership enforcement, meaning that only the update owner is permitted to install automatic updates to the app. Update ownership enforcement helps to ensure that users receive updates only from the expected app store.

Any other installer, including those making use of the INSTALL_PACKAGES permission, must receive explicit user approval in order to install an update. If a user decides to proceed with an update from another source, update ownership is lost.

Update apps at less-disruptive times

App stores typically want to avoid updating an app that is actively in use because this leads to the app's running processes being killed, which potentially interrupts what the user was doing.

Starting with Android 14, the InstallConstraints API gives installers a way to ensure that their app updates happen at an opportune moment. For example, an app store can call the commitSessionAfterInstallConstraintsAreMet() method to make sure that an update is only committed when the user is no longer interacting with the app in question.

Seamlessly install optional splits

With split APKs, features of an app can be delivered in separate APK files, rather than as a monolithic APK. Split APKs allow app stores to optimize the delivery of different app components. For example, app stores might optimize based on the properties of the target device. The PackageInstaller API has supported splits since its introduction in API level 22.

In Android 14, the setDontKillApp() method allows an installer to indicate that the app's running processes shouldn't be killed when new splits are installed. App stores can use this feature to seamlessly install new features of an app while the user is using the app.

Paket metadata aplikasi

Mulai Android 14, penginstal paket Android memungkinkan Anda menentukan metadata aplikasi, seperti praktik keamanan data, yang akan disertakan di halaman app store seperti Google Play.

Mendeteksi kapan pengguna mengambil screenshot perangkat

Untuk menciptakan pengalaman yang lebih standar dalam mendeteksi screenshot, Android 14 memperkenalkan API deteksi screenshot yang menjaga privasi. API ini memungkinkan aplikasi mendaftarkan callback per aktivitas. Callback ini dipanggil, dan pengguna akan diberi tahu saat pengguna mengambil screenshot ketika aktivitas itu terlihat.

Pengalaman pengguna

Tindakan kustom Sharesheet dan peringkat yang ditingkatkan

Android 14 mengupdate sharesheet sistem untuk mendukung tindakan aplikasi kustom dan hasil pratinjau yang lebih informatif bagi pengguna.

Menambahkan tindakan kustom

Dengan Android 14, aplikasi Anda dapat menambahkan tindakan kustom ke sharesheet sistem yang dipanggilnya.

Screenshot tindakan kustom di sharesheet.

Meningkatkan peringkat target Berbagi Langsung

Android 14 menggunakan lebih banyak sinyal dari aplikasi untuk menentukan peringkat target langsung berbagi agar memberikan hasil yang lebih bermanfaat bagi pengguna. Agar dapat memberikan sinyal yang paling berguna untuk peringkat, ikuti panduan untuk meningkatkan peringkat target Berbagi Langsung. Aplikasi komunikasi juga dapat melaporkan penggunaan pintasan untuk pesan keluar dan masuk.

Baris Direct Share di sharesheet, seperti yang ditunjukkan oleh 1

Dukungan untuk animasi bawaan dan kustom untuk Kembali Prediktif

Video: Animasi kembali prediktif

Android 13 memperkenalkan animasi "kembali ke layar utama" prediktif di balik opsi developer. Saat digunakan pada aplikasi yang didukung dengan opsi developer yang diaktifkan, menggeser kembali akan menampilkan animasi yang menunjukkan bahwa gestur kembali akan menutup aplikasi untuk kembali ke layar utama.

Android 14 menyertakan beberapa peningkatan dan panduan baru untuk Kembali Prediktif:

Dengan rilis pratinjau Android 14 ini, semua fitur Kembali Prediktif tetap berada di balik opsi developer. Lihat panduan developer untuk memigrasikan aplikasi ke kembali prediktif, serta panduan developer untuk membuat transisi kustom dalam aplikasi.

Penggantian per aplikasi produsen perangkat layar besar

Per-app overrides enable device manufacturers to change the behavior of apps on large screen devices. For example, the FORCE_RESIZE_APP override instructs the system to resize the app to fit display dimensions (avoiding size compatibility mode) even if resizeableActivity="false" is set in the app manifest.

Overrides are intended to improve the user experience on large screens.

New manifest properties enable you to disable some device manufacturer overrides for your app.

Penggantian per aplikasi pengguna perangkat layar besar

Penggantian per aplikasi mengubah perilaku aplikasi di perangkat layar besar. Misalnya, penggantian produsen perangkat OVERRIDE_MIN_ASPECT_RATIO_LARGE menetapkan rasio aspek aplikasi ke 16:9, terlepas dari konfigurasi aplikasi.

Android 14 QPR1 memungkinkan pengguna menerapkan penggantian per aplikasi melalui menu setelan baru di perangkat layar besar.

Berbagi layar aplikasi

Berbagi layar aplikasi memungkinkan pengguna membagikan jendela aplikasi, bukan seluruh layar perangkat selama perekaman konten layar.

Dengan berbagi layar aplikasi, bilah status, bilah navigasi, notifikasi, dan elemen UI sistem lainnya dikecualikan dari tampilan bersama. Hanya konten aplikasi yang dipilih yang dibagikan.

Berbagi layar aplikasi meningkatkan produktivitas dan privasi dengan memungkinkan pengguna menjalankan beberapa aplikasi, tetapi membatasi berbagi konten hanya untuk satu aplikasi.

Smart Reply dengan teknologi LLM di Gboard pada Pixel 8 Pro

On Pixel 8 Pro devices with the December Feature Drop, developers can try out higher-quality smart replies in Gboard powered by on-device Large Language Models (LLMs) running on Google Tensor.

This feature is available as a limited preview for US English in WhatsApp, Line, and KakaoTalk. It requires using a Pixel 8 Pro device with Gboard as your keyboard.

To try it out, first enable the feature in Settings > Developer Options > AiCore Settings > Enable Aicore Persistent.

Next, open a conversation in a supported app to see LLM-powered Smart Reply in Gboard's suggestion strip in response to incoming messages.

Gboard utilizes on-device LLMs to provide higher-quality smart replies.

Grafis

Jalur dapat dikueri dan dapat di-interpola

Android's Path API is a powerful and flexible mechanism for creating and rendering vector graphics, with the ability to stroke or fill a path, construct a path from line segments or quadratic or cubic curves, perform boolean operations to get even more complex shapes, or all of these simultaneously. One limitation is the ability to find out what is actually in a Path object; the internals of the object are opaque to callers after creation.

To create a Path, you call methods such as moveTo(), lineTo(), and cubicTo() to add path segments. But there has been no way to ask that path what the segments are, so you must retain that information at creation time.

Starting in Android 14, you can query paths to find out what's inside of them. First, you need to get a PathIterator object using the Path.getPathIterator API:

Kotlin

val path = Path().apply {
    moveTo(1.0f, 1.0f)
    lineTo(2.0f, 2.0f)
    close()
}
val pathIterator = path.pathIterator

Java

Path path = new Path();
path.moveTo(1.0F, 1.0F);
path.lineTo(2.0F, 2.0F);
path.close();
PathIterator pathIterator = path.getPathIterator();

Next, you can call PathIterator to iterate through the segments one by one, retrieving all of the necessary data for each segment. This example uses PathIterator.Segment objects, which packages up the data for you:

Kotlin

for (segment in pathIterator) {
    println("segment: ${segment.verb}, ${segment.points}")
}

Java

while (pathIterator.hasNext()) {
    PathIterator.Segment segment = pathIterator.next();
    Log.i(LOG_TAG, "segment: " + segment.getVerb() + ", " + segment.getPoints());
}

PathIterator also has a non-allocating version of next() where you can pass in a buffer to hold the point data.

One of the important use cases of querying Path data is interpolation. For example, you might want to animate (or morph) between two different paths. To further simplify that use case, Android 14 also includes the interpolate() method on Path. Assuming the two paths have the same internal structure, the interpolate() method creates a new Path with that interpolated result. This example returns a path whose shape is halfway (a linear interpolation of .5) between path and otherPath:

Kotlin

val interpolatedResult = Path()
if (path.isInterpolatable(otherPath)) {
    path.interpolate(otherPath, .5f, interpolatedResult)
}

Java

Path interpolatedResult = new Path();
if (path.isInterpolatable(otherPath)) {
    path.interpolate(otherPath, 0.5F, interpolatedResult);
}

The Jetpack graphics-path library enables similar APIs for earlier versions of Android as well.

Mesh kustom dengan shader verteks dan fragmen

Android has long supported drawing triangle meshes with custom shading, but the input mesh format has been limited to a few predefined attribute combinations. Android 14 adds support for custom meshes, which can be defined as triangles or triangle strips, and can, optionally, be indexed. These meshes are specified with custom attributes, vertex strides, varying, and vertex and fragment shaders written in AGSL.

The vertex shader defines the varyings, such as position and color, while the fragment shader can optionally define the color for the pixel, typically by using the varyings created by the vertex shader. If color is provided by the fragment shader, it is then blended with the current Paint color using the blend mode selected when drawing the mesh. Uniforms can be passed into the fragment and vertex shaders for additional flexibility.

Perender buffer hardware untuk Canvas

Untuk membantu penggunaan Canvas API Android untuk menggambar dengan akselerasi hardware ke HardwareBuffer, Android 14 memperkenalkan HardwareBufferRenderer. API ini sangat berguna saat kasus penggunaan Anda melibatkan komunikasi dengan compositor sistem melalui SurfaceControl untuk penggambaran latensi rendah.