Panoramica delle funzionalità e delle API

Android 14 introduce fantastiche funzionalità e API per gli sviluppatori. Di seguito puoi trovare informazioni sulle funzionalità per le tue app e iniziare a utilizzare le API correlate.

Per un elenco dettagliato delle API aggiunte, modificate e rimosse, leggi il report sulle differenze delle API. Per informazioni dettagliate sulle API aggiunte, consulta il riferimento all'API Android. Per Android 14, cerca le API aggiunte nel livello API 34. Per scoprire le aree in cui le modifiche alla piattaforma potrebbero influire sulle tue app, consulta le modifiche al comportamento di Android 14 per le app che hanno come target Android 14 e per tutte le app.

Internazionalizzazione

Lingua preferita nelle app

Android 14 扩展了 Android 13(API 级别 33)中引入的按应用设定语言功能,并包含以下额外功能:

  • 自动生成应用的 localeConfig:从 Android Studio Giraffe Canary 7 和 AGP 8.1.0-alpha07 开始,您可以将应用配置为自动支持各应用语言偏好设定。Android Gradle 插件会根据您的项目资源生成 LocaleConfig 文件,并在最终清单文件中添加对该文件的引用,这样您就不再需要手动创建或更新该文件。AGP 使用应用模块的 res 文件夹中的资源以及任何库模块依赖项来确定要在 LocaleConfig 文件中添加的语言区域。

  • 动态更新应用的 localeConfig:使用 LocaleManager 方法中的 setOverrideLocaleConfig()getOverrideLocaleConfig() 可以在设备的系统设置中动态更新应用的受支持语言列表。有了这种灵活性,您可以按区域自定义支持的语言列表、运行 A/B 实验,或者如果您的应用通过服务器端推送进行本地化,则可以提供更新后的语言区域列表。

  • 输入法 (IME) 的应用语言可见性:IME 可以利用 getApplicationLocales() 方法查看当前应用的语言,并将 IME 语言与该语言进行匹配。

API Grammatical Inflection

Tre miliardi di persone parlano lingue con genere: lingue in cui le categorie grammaticali, come nomi, verbi, aggettivi e preposizioni, si declinano in base al genere delle persone e degli oggetti di cui parli o a cui ti riferisci. Tradizionalmente, molte lingue con genere grammaticale utilizzano il genere grammaticale maschile come genere predefinito o generico.

Rivolgersi agli utenti con il genere grammaticale sbagliato, ad esempio alle donne con il genere grammaticale maschile, può influire negativamente sul loro rendimento e sul loro atteggiamento. Al contrario, un'interfaccia utente con un linguaggio che riflette correttamente il genere grammaticale dell'utente può migliorare il coinvolgimento dell'utente e offrire un'esperienza utente più personalizzata e dal suono naturale.

Per aiutarti a creare un'interfaccia utente incentrata sull'utente per le lingue con genere, Android 14 introduce l'API di flessione grammaticale, che ti consente di aggiungere il supporto per il genere grammaticale senza eseguire il refactoring dell'app.

Preferenze regionali

用户可通过地区偏好设置对温度单位、一周的第一天和编号系统进行个性化设置。居住在美国的欧洲用户可能更希望使用摄氏度,而不是华氏度,并且希望应用将星期一视为一周的开始,而不是像美国那样默认从星期日开始。

新 Android 设置菜单包含这些偏好设置,使用户能够在一个位置集中发现这些应用更改偏好设置。这些偏好设置在备份和恢复设备后也会保持不变。多个 API 和 intent(例如 getTemperatureUnitgetFirstDayOfWeek)会为您的应用授予读取权限来访问用户偏好设置,因此您的应用可以调整其显示信息的方式。您还可以在 ACTION_LOCALE_CHANGED 上注册 BroadcastReceiver,以便在地区偏好设置发生更改时处理语言区域配置更改。

如需找到这些设置,请打开“设置”应用,然后依次前往系统 > 语言和输入法 > 地区偏好设置

Android 系统设置中的地区偏好设置界面。
Android 系统中地区偏好设置的温度选项 设置。

Accessibilità

Ridimensionamento non lineare dei caratteri al 200%

A partire da Android 14, il sistema supporta la scalabilità dei caratteri fino al 200%, offrendo agli utenti ipovedenti opzioni di accessibilità aggiuntive in linea con le linee guida per l'accessibilità dei contenuti web (WCAG).

Per evitare che gli elementi di testo di grandi dimensioni sullo schermo vengano ridimensionati in modo eccessivo, il sistema applica una curva di ridimensionamento non lineare. Questa strategia di ridimensionamento prevede che il testo di grandi dimensioni non venga ridimensionato alla stessa velocità del testo di dimensioni ridotte. Il ridimensionamento non lineare dei caratteri consente preservare la gerarchia proporzionale tra elementi di dimensioni diverse, mitigare i problemi legati alla scalabilità lineare del testo a gradi elevati (ad esempio, tagliato o testo che diventa più difficile da leggere a causa di un display molto grande dimensioni).

Testa l'app con il ridimensionamento non lineare dei caratteri

Attiva la dimensione massima dei caratteri nelle impostazioni di accessibilità di un dispositivo per testare la tua app.

Se utilizzi già unità in pixel scalati (sp) per definire le dimensioni del testo, questi le ulteriori opzioni e i miglioramenti della scalabilità vengono applicati automaticamente testo nella tua app. Tuttavia, devi comunque eseguire il test dell'interfaccia utente con il numero massimo di delle dimensioni dei caratteri attivate (200%) per garantire che l'app applichi le dimensioni dei caratteri correttamente ed è in grado di supportare caratteri di dimensioni maggiori senza influire sull'usabilità.

Per attivare le dimensioni dei caratteri al 200%:

  1. Apri l'app Impostazioni e vai a Accessibilità > Dimensioni visualizzazione e testo.
  2. Per l'opzione Dimensione carattere, tocca l'icona più (+) fino a quando non viene raggiunto il limite massimo di caratteri. dell'impostazione delle dimensioni sia attivata, come mostrato nell'immagine associata .

Utilizza unità di pixel scalati (sp) per le dimensioni del testo

Ricorda sempre di specificare le dimensioni del testo in unità sp. Quando la tua app utilizza le unità sp, Android può applicare la dimensione del testo preferita dell'utente e ridimensionarlo in modo adeguato.

Non utilizzare unità sp per la spaziatura interna o definire le altezze delle visualizzazioni presupponendo una spaziatura interna implicita: con la scalabilità non lineare dei caratteri, le dimensioni in sp potrebbero non essere proporzionali, quindi 4sp + 20sp potrebbe non equivalere a 24sp.

Convertire le unità di pixel scalabili (sp)

Utilizzare TypedValue.applyDimension() per convertire le unità sp a pixel e utilizza TypedValue.deriveDimension() per convertire i pixel in sp. Questi metodi applicano la scalabilità non lineare appropriata curva automaticamente.

Evita di codificare le equazioni utilizzando Configuration.fontScale o DisplayMetrics.scaledDensity. Poiché il ridimensionamento dei caratteri è non lineare, il campo scaledDensity non è più preciso. Il campo fontScale deve essere utilizzato solo a scopo informativo, in quanto i caratteri non sono più scalati con un singolo valore scalare.

Utilizza unità sp per lineHeight

Definisci sempre android:lineHeight utilizzando unità sp anziché dp, in modo che l'altezza della riga vari in base al testo. In caso contrario, se il testo è in sp, ma lineHeight è in dp o px, non si adatta e sembra troppo stretto. TextView corregge automaticamente lineHeight in modo che le proporzioni previste vengano conservate, ma solo se sia textSize sia lineHeight sono definiti in unità sp.

Fotocamera e contenuti multimediali

Ultra HDR per le immagini

标准动态范围 (SDR) 与高动态范围 (HDR) 图片质量对比示意图。

Android 14 新增了对高动态范围 (HDR) 图片的支持,可在拍摄照片时保留更多来自传感器的信息,从而实现鲜艳的色彩和更高的对比度。Android 使用 Ultra HDR 格式,该格式与 JPEG 图片完全向后兼容,可让应用与 HDR 图片无缝互操作,并根据需要以标准动态范围 (SDR) 显示这些图片。

当您的应用选择为其 activity 窗口使用 HDR 界面(通过清单条目或通过在运行时调用 Window.setColorMode())时,框架会自动在界面中以 HDR 格式渲染这些图片。您还可以在受支持的设备上拍摄压缩的 Ultra HDR 静态图片。从传感器中恢复的颜色越多,后期编辑的灵活性就越高。与 Ultra HDR 图片关联的 Gainmap 可用于使用 OpenGL 或 Vulkan 渲染这些图片。

Zoom, messa a fuoco, Postview e altro ancora nelle estensioni della fotocamera

Android 14 升级并改进了相机扩展程序,让应用能够处理更长的处理时间,从而支持在受支持的设备上使用计算密集型算法(例如弱光摄影)来改善图片。这些功能可让用户在使用相机扩展功能时获得更出色的体验。这些改进的示例包括:

Zoom in-sensor

Quando REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE in CameraCharacteristics contiene SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW, la tua app puoi utilizzare le funzionalità avanzate del sensore per assegnare a uno stream RAW ritagliata gli stessi pixel del campo visivo completo utilizzando un CaptureRequest con un target RAW con il caso d'uso dello stream impostato su CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW. Grazie all'implementazione dei controlli di override della richiesta, la videocamera aggiornata offre agli utenti il controllo dello zoom anche prima che gli altri controlli della videocamera siano pronti.

Audio USB senza perdita di dati

Android 14 支持无损音频格式,可通过 USB 有线耳机提供发烧友级体验。您可以查询 USB 设备的首选混音器属性,注册监听器以监听首选混音器属性的更改,以及使用 AudioMixerAttributes 类配置混音器属性。此类表示音频混音器的格式,例如声道掩码、采样率和行为。该类允许直接发送音频,而无需混音、调节音量或处理效果。

Produttività e strumenti per gli sviluppatori

Gestore delle credenziali

Android 14 aggiunge Gestore delle credenziali come API di piattaforma, con un supporto aggiuntivo per i dispositivi con Android 4.4 (livello API 19) tramite una libreria Jetpack che utilizza Google Play Services. Lo scopo di Credential Manager è semplificare l'accesso degli utenti con API che recuperano e archiviano le credenziali con i fornitori di credenziali configurati dall'utente. Credential Manager supporta più metodi di accesso, tra cui nome utente e password, passkey e soluzioni di accesso federato (come Accedi con Google) in un'unica API.

Le passkey offrono molti vantaggi. Ad esempio, le passkey si basano sugli standard di settore, possono funzionare su diversi sistemi operativi ed ecosistemi dei browser e possono essere utilizzate sia su siti web sia su app.

Per ulteriori informazioni, consulta la documentazione di Gestore delle credenziali e delle passkey e il post del blog su Gestore delle credenziali e passkey.

Connessione Salute

Connessione Salute è un repository on-device per i dati relativi a salute e attività fisica degli utenti. Consente agli utenti di condividere dati tra le loro app preferite, con un unico punto di controllo per i dati che vogliono condividere con queste app.

Sui dispositivi con versioni precedenti ad Android 14, Health Connect è disponibile come app scaricabile dal Google Play Store. A partire da Android 14, Connessione Salute fa parte della piattaforma e riceve aggiornamenti tramite gli aggiornamenti di sistema Google Play senza richiedere un download separato. In questo modo, Connessione Salute può essere aggiornata di frequente e le tue app possono fare affidamento sulla disponibilità di Connessione Salute sui dispositivi con Android 14 o versioni successive. Gli utenti possono accedere a Connessione Salute dalle impostazioni del proprio dispositivo, con i controlli della privacy integrati nelle impostazioni di sistema.

Gli utenti possono iniziare a utilizzare Connessione Salute senza scaricare un'app distinta sui dispositivi con Android 14 o versioni successive.
Gli utenti possono controllare quali app hanno accesso ai loro dati relativi a salute e attività fisica tramite le impostazioni di sistema.

Connessione Salute include diverse nuove funzionalità in Android 14, come i percorsi di allenamento, che consentono agli utenti di condividere un percorso del loro allenamento che può essere visualizzato su una mappa. Un percorso è definito come un elenco di località salvate in un determinato periodo di tempo e la tua app può inserire percorsi nelle sessioni di allenamento, collegandoli tra loro. Per garantire che gli utenti abbiano il controllo completo su questi dati sensibili, devono consentire la condivisione di singoli percorsi con altre app.

Per ulteriori informazioni, consulta la documentazione di Connessione Salute e il post del blog sulle novità di Android Salute.

Aggiornamenti di 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 及/或其关联公司的商标或注册商标。

Miglioramenti per gli store di app

Android 14 引入了多个 PackageInstaller API,可帮助应用商店改善其用户体验。

下载之前请求批准安装

安装或更新应用可能需要用户批准。例如,当使用 REQUEST_INSTALL_PACKAGES 权限的安装程序尝试安装新应用时。在之前的 Android 版本中,只有在将 APK 写入安装会话并且提交会话后,应用商店才能请求用户批准。

从 Android 14 开始,requestUserPreapproval() 方法可让安装程序在提交安装会话之前请求用户批准。此项改进可让应用商店将任何 APK 的下载操作推迟到用户批准安装之后。此外,用户批准安装后,应用商店可以在后台下载并安装应用,而不会干扰用户。

承担未来更新的责任

借助 setRequestUpdateOwnership() 方法,安装程序可以向系统表明它打算负责将被安装的应用未来的更新。此 capability 可实现更新所有权强制执行,即仅允许更新所有者为应用安装自动更新。更新所有权强制执行有助于确保用户仅收到来自预期应用商店的更新。

任何其他安装程序(包括使用 INSTALL_PACKAGES 权限的安装程序)都必须获得用户的明确批准,才能安装更新。如果用户决定继续从其他来源安装更新,则会失去更新所有权。

在干扰较少的时段更新应用

应用商店通常希望避免更新正在使用的应用,因为这会导致应用正在运行的进程被终止,而这可能会中断用户正在执行的操作。

从 Android 14 开始,InstallConstraints API 让安装程序可以确保其应用更新在适当的时机进行。例如,应用商店可以调用 commitSessionAfterInstallConstraintsAreMet() 方法来确保仅在用户不再与相应应用互动时才进行更新。

无缝安装可选拆分

借助拆分 APK,应用的功能可以通过单独的 APK 文件提供,而不是以单体式 APK 的形式提供。借助拆分 APK,应用商店可以优化不同应用组件的提供。例如,应用商店可能会根据目标设备的属性进行优化。自在 API 级别 22 中引入以来,PackageInstaller API 一直支持拆分。

在 Android 14 中,setDontKillApp() 方法可让安装程序指明在安装新的拆分项时应用的运行进程不应终止。应用商店可以使用此功能,在用户使用应用时无缝安装应用的新功能。

Bundle di metadati delle app

A partire da Android 14, il programma di installazione del pacchetto Android ti consente di specificare i metadati dell'app, ad esempio le prassi di sicurezza dei dati, da includere nelle pagine dello store come Google Play.

Rilevare quando gli utenti acquisiscono screenshot del dispositivo

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

Esperienza utente

Azioni personalizzate della scheda di condivisione e ranking migliorato

Android 14 更新了系统 Sharesheet,以便为用户提供自定义应用操作和信息更丰富的预览结果。

添加自定义操作

对于 Android 14,您的应用可以向其调用的系统 Sharesheet 添加自定义操作

分享表格中自定义操作的屏幕截图。

提高直接共享目标的排名

Android 14 根据来自应用的更多信号来确定直接共享目标的排名,以便为用户提供更实用的结果。为了提供最实用的排名信号,请遵循提高直接共享目标排名的准则。通讯应用还可以报告出站和入站消息的快捷方式使用情况

共享表单中的“直接分享”行,如 1
所示

Supporto di animazioni integrate e personalizzate per il gesto Indietro predittivo

Video: Animazioni di Gesto indietro predittivo

Android 13 ha introdotto l'animazione di ritorno alla schermata Home predittiva come opzione per gli sviluppatori. Se viene utilizzato in un'app supportata con l'opzione per gli sviluppatori attivata, lo scorrimento indietro mostra un'animazione che indica che il gesto di ritorno all'indietro fa uscire dall'app e torna alla schermata Home.

Android 14 include diversi miglioramenti e nuove indicazioni per il pulsante Indietro predittivo:

Con questa release di anteprima di Android 14, tutte le funzionalità di Indietro predittivo rimangono nascoste dietro un'opzione per sviluppatori. Consulta la guida per gli sviluppatori per eseguire la migrazione della tua app al flusso di ritorno predittivo, nonché la guida per gli sviluppatori per creare transizioni in-app personalizzate.

Sostituzioni per app dei produttori di dispositivi con schermo grande

借助按应用替换项,设备制造商可以更改应用在大屏设备上的行为。例如,FORCE_RESIZE_APP 替换项会指示系统调整应用大小以适应显示屏尺寸(避免进入尺寸兼容模式),即使在应用清单中设置了 resizeableActivity="false" 也是如此。

替换项旨在改善大屏设备上的用户体验。

借助新的清单属性,您可以为应用停用某些设备制造商替换项。

Sostituzioni per app per utente con schermo grande

按应用替换项会更改应用在大屏设备上的行为。例如,无论应用的配置如何,OVERRIDE_MIN_ASPECT_RATIO_LARGE 设备制造商替换项都会将应用宽高比设置为 16:9。

借助 Android 14 QPR1,用户可以在大屏设备上通过新的设置菜单应用按应用替换项。

Condivisione schermo dell'app

La condivisione dello schermo dell'app consente agli utenti di condividere una finestra dell'app anziché l'intero schermo del dispositivo durante la registrazione dei contenuti dello schermo.

Con la condivisione schermo dell'app, la barra di stato, la barra di navigazione, le notifiche e altri elementi dell'interfaccia utente di sistema sono esclusi dalla visualizzazione condivisa. Vengono condivisi solo i contenuti dell'app selezionata.

La condivisione dello schermo dell'app migliora la produttività e la privacy consentendo agli utenti di eseguire più app, ma limitando la condivisione dei contenuti a una singola app.

Risposta rapida basata su LLM in Gboard su Pixel 8 Pro

在搭载 12 月功能分块的 Pixel 8 Pro 设备上,开发者可以在 Gboard 中试用质量更高的智能回复,这些回复由在 Google Tensor 上运行的设备端大语言模型 (LLM) 提供支持。

此功能目前仅在 WhatsApp、Line 和 KakaoTalk 中以美式英语的形式提供给用户进行小范围测试。此功能需要使用 Pixel 8 Pro 设备,并将 Gboard 用作键盘。

如需试用此功能,请先依次前往设置 > 开发者选项 > AiCore 设置 > 启用 Aicore 持久性,启用该功能。

接下来,在受支持的应用中打开对话,即可在 Gboard 的建议栏中看到依托 LLM 的智能回复,以便回复收到的消息。

Gboard 利用设备端 LLM 提供更高质量的智能回复。

Grafica

I percorsi sono interrogabili e interpolabili

L'API Path di Android è un meccanismo potente e flessibile per la creazione e il rendering di grafica vettoriale. Consente di tracciare o riempire un percorso, di creare un percorso da segmenti di linea o di curve quadratiche o cubiche, eseguire operazioni booleane per ottenere forme ancora più complesse o tutte contemporaneamente. Un limite è la capacità di scoprire cosa si trova effettivamente in un oggetto Path. I componenti interni dell'oggetto sono opachi per i chiamanti dopo la creazione.

Per creare un Path, chiami metodi come moveTo(), lineTo() e cubicTo() per aggiungere segmenti di percorso. Tuttavia, non è stato possibile chiedere a quel percorso quali sono i segmenti, quindi devi conservare queste informazioni al momento della creazione.

A partire da Android 14, puoi eseguire query sui percorsi per scoprire i contenuti al loro interno. Innanzitutto, devi ottenere un oggetto PathIterator utilizzando l'API Path.getPathIterator:

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();

Successivamente, puoi chiamare PathIterator per ripetere i segmenti uno alla volta, recuperando tutti i dati necessari per ciascun segmento. Questo esempio utilizza oggetti PathIterator.Segment, che pacchettizzano i dati per te:

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 ha anche una versione non allocabile di next() in cui puoi passare in un buffer per contenere i dati dei punti.

Uno dei casi d'uso importanti dell'esecuzione di query sui dati di Path è l'interpolazione. Ad esempio, potresti voler creare un'animazione (o morph) tra due percorsi diversi. Per semplificare ulteriormente questo caso d'uso, Android 14 include anche il metodo interpolate() su Path. Supponendo che i due percorsi abbiano la stessa struttura interna, il metodo interpolate() crea un nuovo Path con il risultato interpolato. Questo esempio restituisce un percorso la cui forma è intermedia (un'interpolazione lineare di 0,5) tra path e 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);
}

La libreria graphics-path di Jetpack abilita API simili anche per le versioni precedenti di Android.

Mesh personalizzate con shader vertex e fragment

Android 长期以来一直支持使用自定义着色绘制三角网格,但输入网格格式仅限于一些预定义的属性组合。Android 14 增加了对自定义网格的支持,可将其定义为三角形三角形条,并且可以选择是否编入索引。这些网格是使用自定义属性、顶点步长、可变以及使用 AGSL 编写的顶点着色器和片段着色器指定的。

顶点着色器定义了位置和颜色等变量,而片段着色器可以选择为像素定义颜色,通常是使用顶点着色器创建的变量。如果片段着色器提供颜色,则系统会使用绘制网格时选择的混合模式将其与当前 Paint 颜色混合。Uniform 可以传递到片段着色器和顶点着色器,以提高灵活性。

Renderer del buffer hardware per Canvas

Per facilitare l'utilizzo dell'API Canvas di Android per disegnare con accelerazione hardware in un HardwareBuffer, Android 14 introduce HardwareBufferRenderer. Questa API è particolarmente utile quando il caso d'uso prevede la comunicazione con il compositore di sistema tramite SurfaceControl per il disegno con bassa latenza.