Ringkasan Fitur dan API

Android 14 memperkenalkan fitur dan API hebat untuk para developer. Berikut ini bantuan untuk mempelajari fitur-fitur yang tersedia untuk aplikasi Anda, serta mulai menggunakan API yang 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 API level 34. Untuk mempelajari area tempat perubahan platform dapat 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 expands on the per-app language features that were introduced in Android 13 (API level 33) with these additional capabilities:

  • Automatically generate an app's localeConfig: Starting with Android Studio Giraffe Canary 7 and AGP 8.1.0-alpha07, you can configure your app to support per-app language preferences automatically. Based on your project resources, the Android Gradle plugin generates the LocaleConfig file and adds a reference to it in the final manifest file, so you no longer have to create or update the file manually. AGP uses the resources in the res folders of your app modules and any library module dependencies to determine the locales to include in the LocaleConfig file.

  • Dynamic updates for an app's localeConfig: Use the setOverrideLocaleConfig() and getOverrideLocaleConfig() methods in LocaleManager to dynamically update your app's list of supported languages in the device's system settings. Use this flexibility to customize the list of supported languages per region, run A/B experiments, or provide an updated list of locales if your app utilizes server-side pushes for localization.

  • App language visibility for input method editors (IMEs): IMEs can utilize the getApplicationLocales() method to check the language of the current app and match the IME language to that language.

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.

To help you build a user-centric UI for gendered languages, Android 14 introduces the Grammatical Inflection API, which lets you add support for grammatical gender without refactoring your app.

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%

Starting in Android 14, the system supports font scaling up to 200%, providing low-vision users with additional accessibility options that align with Web Content Accessibility Guidelines (WCAG).

To prevent large text elements on screen from scaling too large, the system applies a nonlinear scaling curve. This scaling strategy means that large text doesn't scale at the same rate as smaller text. Nonlinear font scaling helps preserve the proportional hierarchy between elements of different sizes while mitigating issues with linear text scaling at high degrees (such as text being cut off or text that becomes harder to read due to an extremely large display sizes).

Test your app with nonlinear font scaling

Enable the maximum font size in a device's accessibility settings to test your app.

If you already use scaled pixels (sp) units to define text sizing, then these additional options and scaling improvements are applied automatically to the text in your app. However, you should still perform UI testing with the maximum font size enabled (200%) to ensure that your app applies the font sizes correctly and can accommodate larger font sizes without impacting usability.

To enable 200% font size, follow these steps:

  1. Open the Settings app and navigate to Accessibility > Display size and text.
  2. For the Font size option, tap the plus (+) icon until the maximum font size setting is enabled, as shown in the image that accompanies this section.

Use scaled pixel (sp) units for text-sizes

Remember to always specify text sizes in sp units. When your app uses sp units, Android can apply the user's preferred text size and scale it appropriately.

Don't use sp units for padding or define view heights assuming implicit padding: with nonlinear font scaling sp dimensions might not be proportional, so 4sp + 20sp might not equal 24sp.

Convert scaled pixel (sp) units

Use TypedValue.applyDimension() to convert from sp units to pixels, and use TypedValue.deriveDimension() to convert pixels to sp. These methods apply the appropriate nonlinear scaling curve automatically.

Avoid hardcoding equations using Configuration.fontScale or DisplayMetrics.scaledDensity. Because font scaling is nonlinear, the scaledDensity field is no longer accurate. The fontScale field should be used for informational purposes only because fonts are no longer scaled with a single scalar value.

Use sp units for lineHeight

Always define android:lineHeight using sp units instead of dp, so the line height scales along with your text. Otherwise, if your text is sp but your lineHeight is in dp or px, it doesn't scale and looks cramped. TextView automatically corrects the lineHeight so that your intended proportions are preserved, but only if both textSize and lineHeight are defined in sp units.

Kamera dan media

Ultra HDR untuk gambar

An illustration of Standard Dynamic Range (SDR) versus High Dynamic Range (HDR) image quality.

Android 14 adds support for High Dynamic Range (HDR) images that retain more of the information from the sensor when taking a photo, which enables vibrant colors and greater contrast. Android uses the Ultra HDR format, which is fully backward compatible with JPEG images, allowing apps to seamlessly interoperate with HDR images, displaying them in Standard Dynamic Range (SDR) as needed.

Rendering these images in the UI in HDR is done automatically by the framework when your app opts in to using HDR UI for its Activity Window, either through a manifest entry or at runtime by calling Window.setColorMode(). You can also capture compressed Ultra HDR still images on supported devices. With more colors recovered from the sensor, editing in post can be more flexible. The Gainmap associated with Ultra HDR images can be used to render them using OpenGL or Vulkan.

Ekstensi Zoom, Fokus, Postview, dan lainnya di ekstensi kamera

Android 14 upgrades and improves camera extensions, allowing apps to handle longer processing times, which enables improved images using compute-intensive algorithms like low-light photography on supported devices. These features give users an even more robust experience when using camera extension capabilities. Examples of these improvements include:

Zoom dalam sensor

Jika REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE di CameraCharacteristics berisi SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW, aplikasi Anda dapat menggunakan kemampuan sensor lanjutan untuk memberikan streaming RAW yang dipangkas dengan piksel yang sama dengan bidang pandang penuh menggunakan CaptureRequest dengan target RAW yang memiliki kasus penggunaan streaming yang disetel ke CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW. Dengan menerapkan kontrol penggantian permintaan, kamera yang diperbarui memberi pengguna kontrol zoom bahkan sebelum kontrol kamera lainnya siap.

Audio USB lossless

Android 14 mendapatkan dukungan untuk format audio lossless untuk pengalaman level audiophile melalui headset berkabel USB. Anda dapat membuat kueri perangkat USB untuk atribut mixer pilihannya, mendaftarkan pemroses untuk perubahan pada atribut mixer pilihan, 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 langsung, tanpa pencampuran, penyesuaian volume, atau efek pemrosesan.

Alat dan produktivitas developer

Pengelola Kredensial

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 memperkenalkan beberapa PackageInstaller API yang memungkinkan app store meningkatkan pengalaman pengguna mereka.

Meminta persetujuan penginstalan sebelum mendownload

Menginstal atau mengupdate aplikasi mungkin memerlukan persetujuan pengguna. Misalnya, saat penginstal yang menggunakan izin REQUEST_INSTALL_PACKAGES mencoba menginstal aplikasi baru. Pada versi Android sebelumnya, app store hanya dapat meminta persetujuan pengguna setelah APK ditulis ke sesi penginstalan dan sesi berkomitmen.

Mulai Android 14, metode requestUserPreapproval() memungkinkan penginstal meminta persetujuan pengguna sebelum melakukan sesi penginstalan. Peningkatan ini memungkinkan app store menunda download APK apa pun hingga setelah penginstalan disetujui oleh pengguna. Selain itu, setelah pengguna menyetujui penginstalan, app store dapat mendownload dan menginstal aplikasi di latar belakang tanpa mengganggu pengguna.

Mengklaim tanggung jawab untuk update mendatang

Metode setRequestUpdateOwnership() memungkinkan penginstal memberi tahu sistem bahwa penginstal bermaksud bertanggung jawab atas update mendatang untuk aplikasi yang diinstalnya. Kemampuan ini memungkinkan penerapan kepemilikan update, yang berarti bahwa hanya pemilik update yang diizinkan untuk menginstal update otomatis ke aplikasi. Penerapan kepemilikan update membantu memastikan bahwa pengguna hanya menerima update dari app store yang diharapkan.

Penginstal lainnya, termasuk yang menggunakan izin INSTALL_PACKAGES, harus menerima persetujuan eksplisit pengguna untuk menginstal update. Jika pengguna memutuskan untuk melanjutkan update dari sumber lain, kepemilikan update akan hilang.

Mengupdate aplikasi pada waktu yang tidak terlalu mengganggu

App store biasanya ingin menghindari update aplikasi yang aktif digunakan karena hal ini menyebabkan proses aplikasi yang sedang berjalan dihentikan, yang berpotensi mengganggu aktivitas pengguna.

Mulai Android 14, InstallConstraints API memberi penginstal cara untuk memastikan update aplikasi mereka terjadi pada momen yang tepat. Misalnya, app store dapat memanggil metode commitSessionAfterInstallConstraintsAreMet() untuk memastikan update hanya dilakukan saat pengguna tidak lagi berinteraksi dengan aplikasi yang dimaksud.

Menginstal pemisahan opsional dengan lancar

Dengan APK terpisah, fitur aplikasi dapat dikirimkan dalam file APK terpisah, bukan sebagai APK monolitik. APK terpisah memungkinkan app store mengoptimalkan pengiriman berbagai komponen aplikasi. Misalnya, app store dapat mengoptimalkan berdasarkan properti perangkat target. PackageInstaller API telah mendukung pemisahan sejak diperkenalkan di API level 22.

Di Android 14, metode setDontKillApp() memungkinkan penginstal menunjukkan bahwa proses aplikasi yang sedang berjalan tidak boleh dihentikan saat pemisahan baru diinstal. App store dapat menggunakan fitur ini untuk menginstal fitur baru aplikasi dengan lancar ketika pengguna sedang menggunakan aplikasi.

Paket metadata aplikasi

Starting in Android 14, the Android package installer lets you specify app metadata, such as data safety practices, to include on app store pages such as 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 updates the system sharesheet to support custom app actions and more informative preview results for users.

Add custom actions

With Android 14, your app can add custom actions to the system sharesheet it invokes.

Screenshot of custom actions on the sharesheet.

Improve ranking of Direct Share targets

Android 14 uses more signals from apps to determine the ranking of the direct share targets to provide more helpful results for the user. To provide the most useful signal for ranking, follow the guidance for improving rankings of your Direct Share targets. Communication apps can also report shortcut usage for outgoing and incoming messages.

Direct Share row in the sharesheet, as shown by 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 pengguna perangkat layar besar per aplikasi

Per-app overrides change the behavior of apps on large screen devices. For example, the OVERRIDE_MIN_ASPECT_RATIO_LARGE device manufacturer override sets the app aspect ratio to 16:9 regardless of the app's configuration.

Android 14 QPR1 enables users to apply per‑app overrides by means of a new settings menu on large screen devices.

Berbagi layar aplikasi

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

Dengan berbagi layar aplikasi, status bar, menu 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 ke satu aplikasi.

Smart Reply yang didukung 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.

Grafik

Jalur dapat dikueri dan dapat di-interpola

Path API Android adalah mekanisme yang andal dan fleksibel untuk membuat dan merender grafik vektor, dengan kemampuan untuk membuat goresan atau mengisi jalur, membuat jalur dari segmen garis atau kurva kuadrat atau kubik, melakukan operasi boolean untuk mendapatkan bentuk yang lebih kompleks, atau semuanya secara bersamaan. Salah satu keterbatasannya adalah kemampuan untuk mengetahui apa yang sebenarnya ada di objek Path; bagian dalam objek bersifat buram bagi pemanggil setelah dibuat.

Untuk membuat Path, panggil metode seperti moveTo(), lineTo(), dan cubicTo() untuk menambahkan segmen jalur. Namun, belum ada cara untuk menanyakan kepada jalur tersebut tentang segmennya, jadi Anda harus menyimpan informasi tersebut pada waktu pembuatan.

Mulai Android 14, Anda dapat mengkueri jalur untuk mencari tahu apa yang ada di dalamnya. Pertama, Anda perlu mendapatkan objek PathIterator menggunakan 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();

Selanjutnya, Anda dapat memanggil PathIterator untuk melakukan iterasi melalui segmen satu per satu, mengambil semua data yang diperlukan untuk setiap segmen. Contoh ini menggunakan objek PathIterator.Segment, yang mengemas data untuk Anda:

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 juga memiliki versi next() yang tidak mengalokasikan, tempat Anda dapat meneruskan buffer untuk menyimpan data titik.

Salah satu kasus penggunaan yang penting untuk mengkueri data Path adalah interpolasi. Misalnya, Anda mungkin ingin menganimasikan (atau mengubah) antara dua jalur berbeda. Untuk lebih menyederhanakan kasus penggunaan tersebut, Android 14 juga menyertakan metode interpolate() di Path. Dengan asumsi bahwa kedua jalur memiliki struktur internal yang sama, metode interpolate() akan membuat Path baru dengan hasil interpolasi tersebut. Contoh ini menampilkan jalur yang bentuknya setengah (interpolasi linier 0,5) antara path dan 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);
}

Library graphics-path Jetpack juga memungkinkan API serupa untuk versi Android yang lebih lama.

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 Kanvas

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