Funkcje i interfejsy API – przegląd

Android 14 wprowadza świetne funkcje i interfejsy API dla deweloperów. Poniższe informacje pomogą Ci poznać funkcje aplikacji i zacząć korzystać z powiązanych interfejsów API.

Szczegółową listę dodanych, zmodyfikowanych i usuniętych interfejsów API znajdziesz w raporcie różnic między interfejsami API. Szczegółowe informacje o dodanych interfejsach API znajdziesz w dokumentacji interfejsu Android API – w przypadku Androida 14 poszukaj interfejsów API dodanych na poziomie API 34. Aby dowiedzieć się, w jakich obszarach zmiany w platformie mogą mieć wpływ na Twoje aplikacje, zapoznaj się ze zmianami w zachowaniu Androida 14 w przypadku aplikacji kierowanych na tę wersję systemuwszystkich aplikacji.

Internacjonalizacja

Wybór języka według aplikacji

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

3 miliardy ludzi mówią w językach płciowych, czyli w językach, w których kategorie gramatyczne, takie jak rzeczowniki, czasowniki, przymiotniki i przyimki, wpływają na płeć osób i obiektów, o których rozmawiasz lub o których mówisz. Tradycyjnie wiele języków, w których płeć różni się od płci męskiej, jako domyślnej lub ogólnej używa formy gramatycznej.

Zwrócenie się do użytkowników w niewłaściwy sposób gramatyczny, np. zwrócenie się do kobiet w rodzaju męskim, może negatywnie wpłynąć na ich wyniki i nastawienie. Z kolei interfejs z językiem, który poprawnie odzwierciedla płeć użytkownika, może zwiększyć jego zaangażowanie oraz zapewnić bardziej spersonalizowane i naturalne brzmienie.

为帮助您针对区分性别的语言构建以用户为中心的界面,Android 14 引入了 Grammatical Inflection API,让您无需重构应用便能添加对语法性别的支持。

Regionalne preferencje

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.

Regional preferences screen in Android system settings.
Temperature options for regional preferences in Android system settings.

Ułatwienia dostępu

Nieliniowe skalowanie czcionki do 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.

Aparat i multimedia

Ultra HDR w przypadku zdjęć

Ilustracja przedstawiająca porównanie jakości obrazu standardowego zakresu dynamicznego (SDR) z jakością HDR (High Dynamic Range).

Android 14 dodaje obsługę obrazów High Dynamic Range (HDR), które podczas robienia zdjęć zachowują więcej informacji z czujnika, co daje żywe kolory i większy kontrast. Android używa formatu Ultra HDR, który jest w pełni zgodny wstecznie z obrazami JPEG, dzięki czemu aplikacje mogą płynnie współpracować z obrazami HDR i w razie potrzeby wyświetlać je w standardowym zakresie dynamicznym (SDR).

Renderowanie tych obrazów w interfejsie w trybie HDR odbywa się automatycznie przez platformę, gdy aplikacja wyraża zgodę na używanie interfejsu HDR w oknie aktywności. Można to zrobić za pomocą wpisu w pliku manifestu lub w czasie działania, wywołując wywołanie Window.setColorMode(). Na obsługiwanych urządzeniach możesz też robić skompresowane zdjęcia sferyczne Ultra HDR. Dzięki temu, że czujnik odzyskuje więcej kolorów, edycja postów może być bardziej elastyczna. Obiekt Gainmap powiązany z obrazami ultra HDR można wykorzystać do renderowania ich za pomocą OpenGL lub Vulkan.

Powiększenie, Ostrość, Postview i inne funkcje w rozszerzeniach aparatu

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 na czujniku

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.

Bezstratny dźwięk przez USB

Android 14 zyskuje obsługę bezstratnych formatów audio, dzięki czemu osoby audiofilskie mogą korzystać z przewodowych zestawów słuchawkowych USB. Możesz przesłać zapytanie do urządzenia USB w celu uzyskania preferowanych atrybutów miksera, zarejestrować detektor w przypadku zmian w atrybutach miksera i skonfigurować atrybuty miksera za pomocą klasy AudioMixerAttributes. Ta klasa reprezentuje format, np. maskę kanału, częstotliwość próbkowania i działanie miksera dźwięku. Ta klasa umożliwia bezpośrednie wysyłanie dźwięku bez mieszania, regulacji głośności i efektów przetwarzania.

Narzędzia i produktywność programistów

Menedżer danych logowania

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 是设备端用户健康与健身数据的存储区。它 让用户可以在喜爱的应用之间共享数据 控制他们要与这些应用分享哪些数据

在搭载 Android 14 之前版本的 Android 设备上,Health Connect 会 可在 Google Play 商店中以应用的形式下载。从 Android 14 开始,Health Connect 将成为 Android 平台的一部分,并通过 Google Play 系统更新接收更新,而无需单独下载。这样,健康 Connect 可能会经常更新,并且您的应用可以依赖于 Health Connect 在搭载 Android 14 或更高版本的设备上可用。用户可以访问“健康”应用 通过设备中的“设置”连接,以及集成到 与系统设置有关

用户无需单独的 在搭载 Android 14 或更高版本的设备上下载应用。
用户可以通过系统设置控制哪些应用可以访问其健康与健身数据。

Health Connect 包含 Android 14 中的多项新功能,例如锻炼 路线,让用户能够分享锻炼路线,并且路线直观 。路线定义为在一定时间范围内保存的位置列表,您的应用可以将路线插入锻炼时段,将它们关联起来。为确保用户可以完全控制这些敏感数据, 用户必须允许与其他应用分享具体路线。

有关详情,请参阅 Health Connection 文档以及关于 Android Health 的新变化

Aktualizacje OpenJDK 17

Android 14 将继续更新 Android 的核心库,以与最新 OpenJDK LTS 版本中的功能保持一致,包括适合应用和平台开发者的库更新和 Java 17 语言支持。

其中包含以下功能和改进:

  • 将大约 300 个 java.base 类更新为支持 Java 17。
  • 文本块 - 为 Java 编程语言引入了多行字符串字面量。
  • instanceof 模式匹配:可让对象在 instanceof 中被视为具有特定类型,而无需任何额外的变量。
  • 密封类:允许您限制哪些类和接口可以扩展或实现它们。

得益于 Google Play 系统更新 (Project Mainline),6 亿多台设备能够接收包含这些更改的最新 Android 运行时 (ART) 更新。我们致力于为应用提供更加一致、安全的跨设备环境,并为用户提供独立于平台版本的新功能。

Java 和 OpenJDK 是 Oracle 及/或其关联公司的商标或注册商标。

Ulepszenia w sklepach z aplikacjami

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.

Pakiety metadanych aplikacji

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.

Wykrywanie, kiedy użytkownicy robią zrzuty ekranu z urządzenia

为了打造更加标准化的屏幕截图检测体验,Android 14 引入了可保护隐私的屏幕截图检测 API。借助此 API,应用可以按 activity 注册回调。如果用户在该 activity 可见时截取屏幕截图,系统会调用这些回调并通知用户。

Interfejs użytkownika

Działania niestandardowe w panelu udostępniania i ulepszona kolejność

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

Obsługa wbudowanych i niestandardowych animacji dla funkcji przewidywania tekstu z placówek

Video: Predictive back animations

Android 13 introduced the predictive back-to-home animation behind a developer option. When used in a supported app with the developer option enabled, swiping back shows an animation indicating that the back gesture exits the app back to the home screen.

Android 14 includes multiple improvements and new guidance for Predictive Back:

With this Android 14 preview release, all features of Predictive Back remain behind a developer option. See the developer guide to migrate your app to predictive back, as well as the developer guide to creating custom in-app transitions.

Zastąpienia na urządzeniach z dużym ekranem

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.

Zastąpienia dla użytkowników na dużym ekranie na poziomie aplikacji

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.

Udostępnianie ekranu aplikacji

应用屏幕共享功能让用户能够在录制屏幕内容期间共享应用窗口,而非整个设备屏幕。

使用应用屏幕共享时,状态栏、导航栏、通知和其他系统界面元素会从共享显示屏中排除。系统只会分享所选应用的内容。

应用屏幕共享可让用户运行多个应用,但仅限单个应用共享内容,从而提高效率和隐私性。

Inteligentna odpowiedź na klawiaturze Gboard na Pixelu 8 Pro z wykorzystaniem LLM

Na urządzeniach Pixel 8 Pro z pakietem nowych funkcji w grudniu deweloperzy mogą wypróbować w Gboard wyższej jakości inteligentne odpowiedzi z dużymi modelami językowymi (LLM) działającymi na urządzeniu Google Tensor.

Ta funkcja jest dostępna w ograniczonej wersji testowej w języku angielskim (USA) w WhatsAppie, Line i KakaoTalk. Wymaga urządzenia Pixel 8 Pro z klawiaturą Gboard.

Aby ją wypróbować, najpierw włącz tę funkcję w sekcji Ustawienia > Opcje programisty > Ustawienia AICore > Włącz Aicore Persistent.

Następnie otwórz wątek w obsługiwanej aplikacji, aby zobaczyć inteligentną odpowiedź obsługiwaną przez LLM na pasku sugestii Gboard w odpowiedzi na wiadomości przychodzące.

Gboard wykorzystuje LLM na urządzeniu, aby zapewniać wyższą jakość inteligentnych odpowiedzi.

Grafika

Ścieżki można wyszukiwać i interpolować

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.

niestandardowe siatki z shaderami wierzchołkowymi i fragmentowymi,

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.

sprzętowy renderowanie bufora dla Canvasa,

Aby ułatwić korzystanie z interfejsu API Canvas w Androidzie do rysowania z przyspieszeniem sprzętowym w HardwareBuffer, Android 14 wprowadza HardwareBufferRenderer. Ten interfejs API jest szczególnie przydatne, gdy Twój przypadek użycia obejmuje komunikację z systemem kompozytor do SurfaceControl, by zapewnić małe opóźnienie rysunek.