Android 14 introduces great new features and APIs for developers. The sections below help you learn about features for your apps and get started with the related APIs.
For a detailed list of new, modified, and removed APIs, read the API diff report. For details on new APIs visit the Android API reference — new APIs are highlighted for visibility. Also, to learn about areas where platform changes may affect your apps, be sure to check out Android 14 behavior changes for apps that target Android 14 and for all apps.
Per-app language preferences
Android 14 expands on the per-app language features that were introduced in Android 13 (API level 33) with these additional capabilities:
Dynamic updates for an app's
localeConfig: Use the
LocaleManagerto 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
The Grammatical Inflection API allows you to more easily add support for users who speak languages where grammatical gender changes the sentence based on the person being addressed, providing a more personalized and natural-sounding user experience for those languages.
Example of inflection for grammatical gender
Grammatical gender is integral to some languages and can't be easily worked around like in English. For example, in English to write a message telling the user that they are subscribed to your app's service, you could use a single phrase: "You are subscribed to...".
To provide a similar phrase in French, there are a few options:
- Masculine-inflected form: "Vous êtes abonné à..." (English: "You are subscribed to...")
- Feminine-inflected form: "Vous êtes abonnée à…" (English: "You are subscribed to...")
- Neutral phrasing that avoids inflection: "Abonnement à…activé" (English: "Subscription to ... enabled")
Similar to English, the first two options address the user directly. However, without any mechanism to accommodate this grammatical feature of French, you would only have the third option, which changes the tone of the message and might not be what you want to display in your user interface.
In these cases, the Grammatical Inflection API lowers the effort to display
strings relative to the viewer's grammatical gender—that is, the person who's
viewing the UI, not who's being talked about. To show users personalized
translations in your app, add translations that are inflected for each
grammatical gender for affected languages and then use the
API to adjust which translations are shown to each user.
Previously, to add similiar support, you would need to use the
API from the International Components for Unicode
(ICU), which must
be applied on a per-string basis.
Add translations for languages with grammatical gender
To provide localized text for languages with grammatical gender, create an alternative resources file and append the grammatical gender qualifer immediately after the locale name for those languages. The following table outlines the possible values:
|Qualifier||String value||Example (French
You should only include strings that support grammatical gender inflections in
these resources files. Include other strings in the default resource file that
contains other localized strings
and the default translation will be shown whenever a grammatical-gendered
version is not available. In the
example provided for French earlier, the neutral phrasing would
be the value of the string in the default resources
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
grant your app read access to user preferences, so your app can adjust how it
displays information. You can also register a
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.
Non-linear font scaling to 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 non-linear scaling curve. This scaling strategy means that large text doesn't scale at the same rate as smaller text. Non-linear font scaling helps preserve the proportional hierachy 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 non-linear font scaling
If you already use scaled pixels (sp) units to define text sizing, then these additional options and scaling improvements will be applied automaticaly 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 the user's preferred text size and scale it appropriately.
Do not use sp units for padding or view heights: with non-linear font scaling sp dimensions might not be proportional, so 4sp + 20sp might not equal 24sp.
Convert scaled pixel (sp) units
to convert from sp units to pixels, and use
to convert pixels to sp. These methods apply the appropriate non-linear scaling
Avoid hardcoding equations
Because font scaling is now non-linear, these fields are no longer accurate.
Improvements for app stores
Android 14 introduces several new
PackageInstaller APIs that
allow app stores to improve their user experience.
Request install approval before downloading
Installing or updating an app may require user
For example, when an installer making use of the
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
Starting with Android 14, the
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
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
is permitted to install automatic updates to the app. Update ownership
enforcement helps to ensure that users receive updates only from the expected
Any other installer, including those making use of the
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
API gives installers a way to ensure that their app updates happen at an
opportune moment. For example, an app store can call the
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
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
Detect when users take device screenshots
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.