Android 14 memperkenalkan fitur dan API baru yang hebat untuk para developer. Bagian berikut membantu Anda 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 level API 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 memperluas fitur bahasa per aplikasi yang diperkenalkan di Android 13 (API level 33) dengan kemampuan tambahan berikut:
Otomatis membuat
localeConfigaplikasi: 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 fileLocaleConfigdan menambahkan referensi ke file tersebut dalam file manifes akhir, sehingga Anda tidak perlu lagi membuat atau memperbarui file secara manual. AGP menggunakan resource dalam folderresmodul aplikasi Anda dan dependensi modul library apa pun untuk menentukan lokalitas yang akan disertakan dalam fileLocaleConfig.Update dinamis untuk
localeConfigaplikasi: Gunakan metodesetOverrideLocaleConfig()dangetOverrideLocaleConfig()diLocaleManageruntuk 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
3 billion people speak gendered languages: languages where grammatical categories—such as nouns, verbs, adjectives, and prepositions—inflect according to the gender of people and objects you talk to or about. Traditionally, many gendered languages use masculine grammatical gender as the default or generic gender.
Addressing users in the wrong grammatical gender, such as addressing women in masculine grammatical gender, can negatively impact their performance and attitude. In contrast, a UI with language that correctly reflects the user's grammatical gender can improve user engagement and provide a more personalized and natural-sounding user experience.
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
Regional preferences enable users to personalize temperature units, the first day of the week, and numbering systems. A European living in the United States might prefer temperature units to be in Celsius rather than Fahrenheit and for apps to treat Monday as the beginning of the week instead of the US default of Sunday.
New Android Settings menus for these preferences provide users with a
discoverable and centralized location to change app preferences. These
preferences also persist through backup and restore. Several APIs and
intents—such as
getTemperatureUnit
and
getFirstDayOfWeek—
grant your app read access to user preferences, so your app can adjust how it
displays information. You can also register a
BroadcastReceiver on
ACTION_LOCALE_CHANGED
to handle locale configuration changes when regional preferences change.
To find these settings, open the Settings app and navigate to System > Languages & input > Regional preferences.
Aksesibilitas
Penskalaan font non-linear ke 200%
Starting in Android 14, the system supports font scaling up to 200%, providing users with additional accessibility options.
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
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:
- Open the Settings app and navigate to Accessibility > Display size and text.
- 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
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.
Zoom, Fokus, Postview, dan lainnya di ekstensi kamera
Android 14 升级并改进了相机扩展程序,让应用能够处理更长的处理时间,从而支持在受支持的设备上使用计算密集型算法(例如弱光摄影)来改善图片。这些功能可让用户在使用相机扩展功能时获得更出色的体验。这些改进的示例包括:
- 动态静态拍摄处理延迟时间估算功能可根据当前场景和环境条件提供更准确的静态拍摄延迟时间估算值。调用
CameraExtensionSession.getRealtimeStillCaptureLatency()可获取具有两种延迟时间估算方法的StillCaptureLatency对象。getCaptureLatency()方法会返回onCaptureStarted和onCaptureProcessStarted()之间的估算延迟时间,而getProcessingLatency()方法会返回onCaptureProcessStarted()和可用的最终处理帧之间的估算延迟时间。 - 支持拍摄进度回调,以便应用可以显示长时间运行的静态拍摄处理操作的当前进度。您可以检查
CameraExtensionCharacteristics.isCaptureProcessProgressAvailable是否支持此功能,如果支持,则实现onCaptureProcessProgressed()回调,并将进度(从 0 到 100)作为参数传入。 扩展程序专用元数据,例如用于调节扩展程序效果(例如背景虚化程度)的
CaptureRequest.EXTENSION_STRENGTH和EXTENSION_BOKEH。相机扩展程序中的静态图片拍摄预览功能,该功能比最终图片更快地提供经过较少处理的图片。如果扩展程序的处理延迟时间增加,可以提供 postview 图片作为占位符以提升用户体验,并在稍后改用最终图片。您可以使用
CameraExtensionCharacteristics.isPostviewAvailable检查此功能是否可用。然后,您可以将OutputConfiguration传递给ExtensionSessionConfiguration.setPostviewOutputConfiguration。支持
SurfaceView,可实现更优化且能效更高的预览渲染路径。支持在使用扩展程序时点按对焦和缩放。
Zoom dalam sensor
当 CameraCharacteristics 中的 REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE 包含 SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW 时,您的应用可以使用高级传感器功能,将剪裁后的 RAW 数据流的像素与全视野范围相同,方法是将 CaptureRequest 与将数据流用例设置为 CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW 的 RAW 目标搭配使用。通过实现请求替换控件,更新后的相机可让用户在其他相机控件准备就绪之前使用缩放控件。
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
Credential Manager
Android 14 menambahkan Pengelola Kredensial sebagai API platform, dengan dukungan tambahan kembali ke perangkat Android 4.4 (API level 19) melalui Library Jetpack menggunakan layanan Google Play. Pengelola Kredensial bertujuan untuk mempermudah login bagi pengguna dengan API yang mengambil dan menyimpan kredensial dengan penyedia kredensial yang dikonfigurasi pengguna. Pengelola Kredensial mendukung beberapa metode login, termasuk nama pengguna dan sandi, kunci sandi, dan solusi login gabungan (seperti Login dengan Google) dalam satu API.
Kunci sandi memberikan banyak manfaat. Misalnya, kunci sandi dibuat berdasarkan standar industri, dapat berfungsi di berbagai sistem operasi dan ekosistem browser, serta dapat digunakan dengan situs dan aplikasi.
Untuk informasi selengkapnya, lihat dokumentasi Credential Manager dan kunci sandi serta postingan blog tentang Credential Manager dan kunci sandi.
Health Connect
Health Connect 是用户健康与健身数据的设备端仓库。借助该功能,用户可以在一个位置控制要与这些应用共享哪些数据,并在自己喜爱的应用之间共享数据。
在搭载 Android 14 之前的 Android 版本的设备上,Health Connect 可作为应用从 Google Play 商店下载。从 Android 14 开始,Health Connect 将成为 Android 平台的一部分,并通过 Google Play 系统更新接收更新,而无需单独下载。这样一来,Health Connect 就可以频繁更新,您的应用可以依赖于搭载 Android 14 或更高版本的设备上提供的 Health Connect。用户可以通过设备的“设置”访问 Health Connect,隐私控制功能集成到系统设置中。
Health Connect 在 Android 14 中包含多项新功能,例如锻炼路线,可让用户分享可在地图上直观呈现的锻炼路线。路线定义为在一定时间范围内保存的位置列表,您的应用可以将路线插入锻炼时段,将它们关联起来。为确保用户能够完全控制此类敏感数据,用户必须允许与其他应用共享单个路线。
如需了解详情,请参阅 Health Connect 文档以及有关 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.baseke 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
instanceoftanpa 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
从 Android 14 开始,Android 软件包安装程序可让您指定应用元数据(例如数据安全做法),以在 Google Play 等应用商店页面上架。
Mendeteksi kapan pengguna mengambil screenshot perangkat
To create a more standardized experience for detecting screenshots, Android 14 introduces a privacy-preserving screenshot detection API. This API lets apps register callbacks on a per-activity basis. These callbacks are invoked, and the user is notified, when the user takes a screenshot while that activity is visible.
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.
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.
Dukungan untuk animasi bawaan dan kustom untuk Kembali Prediktif
Android 13 在开发者选项背后引入了预测性“返回主屏幕”动画。在已启用开发者选项的受支持应用中使用时,滑回手势会显示动画,表明返回手势会使应用退回到主屏幕。
Android 14 包含针对“预测性返回”的多项改进和新指南:
- 您可设置
android:enableOnBackInvokedCallback=true,以便为每个 activity 选择启用预测性返回系统动画,而不是为整个应用选择启用。 - 我们添加了新的系统动画,以配合 Android 13 中的“返回主屏幕”动画。新的系统动画是跨 activity 和跨任务的,您可在迁移到预测性返回后自动获得该动画。
- 我们为底部动作条、侧边动作条和搜索添加了新的 Material 组件动画。
- 我们制作了有关如何创建自定义应用内动画和转换的设计指南。
- 我们添加了许多新 API 来支持自定义的应用内转换动画:
在此 Android 14 预览版中,所有预测性返回功能都是位于开发者选项背后。请参阅与将您的应用迁移到预测性返回有关的开发者指南,以及与创建自定义应用内转换有关的开发者指南。
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
App screen sharing enables users to share an app window instead of the entire device screen during screen content recording.
With app screen sharing, the status bar, navigation bar, notifications, and other system UI elements are excluded from the shared display. Only the content of the selected app is shared.
App screen sharing improves productivity and privacy by enabling users to run multiple apps but limit content sharing to a single app.
Smart Reply yang didukung LLM di Gboard pada Pixel 8 Pro
Di perangkat Pixel 8 Pro dengan Feature Drop Desember, developer dapat mencoba smart reply berkualitas lebih tinggi di Gboard yang didukung oleh Model Bahasa Besar (LLM) di perangkat yang berjalan di Google Tensor.
Fitur ini tersedia sebagai pratinjau terbatas untuk bahasa Inggris Amerika Serikat di WhatsApp, Line, dan KakaoTalk. Fitur ini memerlukan penggunaan perangkat Pixel 8 Pro dengan Gboard sebagai keyboard Anda.
Untuk mencobanya, aktifkan fitur ini terlebih dahulu di Setelan > Opsi Developer > Setelan AICore > Aktifkan AIcore Persistent.
Selanjutnya, buka percakapan di aplikasi yang didukung untuk melihat Smart Reply yang didukung LLM di bilah saran Gboard sebagai respons terhadap pesan masuk.
Grafik
Jalur dapat dikueri dan diinterpolasi
Android 的 Path API 是一种强大且灵活的机制,可用于创建和渲染矢量图形,能够描边或填充路径、根据线段或二次曲线或立方曲线构建路径、执行布尔运算以获取更复杂的形状,或同时执行所有这些操作。但有一个限制是,您无法了解 Path 对象中实际包含的内容;该对象的内部信息在创建后对调用方是不透明的。
如需创建 Path,您可以调用 moveTo()、lineTo() 和 cubicTo() 等方法来添加路径段。但是,无法询问该路径有哪些片段,因此您必须在创建时保留该信息。
从 Android 14 开始,您可以查询路径以了解其内部内容。首先,您需要使用 Path.getPathIterator API 获取 PathIterator 对象:
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();
接下来,您可以调用 PathIterator 逐个遍历片段,并检索每个片段的所有必要数据。以下示例使用了 PathIterator.Segment 对象,它会为您打包数据:
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 还有一个非分配版 next(),您可以在其中传入缓冲区来保存点数据。
查询 Path 数据的一个重要用例是插值。例如,您可能想在两个不同的路径之间添加动画(或变形)。为了进一步简化该用例,Android 14 针对 Path 还包含 interpolate() 方法。假设两个路径具有相同的内部结构,interpolate() 方法会使用该插值结果创建一个新的 Path。以下示例返回了一个形状介于 path 和 otherPath 之间的一半(线性插值为 0.5)的路径:
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); }
Jetpack graphics-path 库也为早期版本的 Android 启用了类似的 API。
Mesh kustom dengan shader vertex dan fragmen
Android telah lama mendukung mesh segitiga gambar dengan bayangan kustom, tetapi format mesh input telah dibatasi untuk beberapa kombinasi atribut yang telah ditentukan. Android 14 menambahkan dukungan untuk mesh kustom, yang dapat didefinisikan sebagai segitiga atau strip segitiga, dan dapat, secara opsional, diindeks. Mesh ini ditentukan dengan atribut kustom, langkah vertex, beragam, serta shader vertex dan fragmen yang ditulis dalam AGSL.
Vertex shader menentukan variasi, seperti posisi dan warna, sedangkan
fragment shader secara opsional dapat menentukan warna untuk piksel, biasanya dengan
menggunakan variasi yang dibuat oleh vertex shader. Jika warna disediakan oleh shader fragmen, warna tersebut akan digabungkan dengan warna Paint saat ini menggunakan mode gabungan yang dipilih saat menggambar mesh. Seragam dapat diteruskan
ke shader fragmen dan vertex untuk fleksibilitas tambahan.
Renderer buffer hardware untuk Canvas
To assist in using Android's Canvas API to draw with
hardware acceleration into a HardwareBuffer, Android 14
introduces HardwareBufferRenderer. This API is
particularly useful when your use case involves communication with the system
compositor through SurfaceControl for low-latency
drawing.