Modifiche del comportamento: app che hanno come target Android 17 o versioni successive

Come le versioni precedenti, Android 17 include modifiche al comportamento che potrebbero influire sulla tua app. Le seguenti modifiche al comportamento si applicano esclusivamente alle app che hanno come target Android 17 o versioni successive. Se la tua app ha come target Android 17 o versioni successive, devi modificarla per supportare questi comportamenti, ove applicabile.

Assicurati di esaminare anche l'elenco delle modifiche al comportamento che interessano tutte le app in esecuzione su Android 17, indipendentemente dal targetSdkVersion della tua app.

Funzionalità di base

Android 17 include le seguenti modifiche che modificano o espandono varie funzionalità di base del sistema Android.

Nuova implementazione senza blocchi di MessageQueue

A partire da Android 17, le app che hanno come target Android 17 o versioni successive ricevono una nuova implementazione senza blocchi di android.os.MessageQueue. La nuova implementazione migliora il rendimento e riduce i frame mancanti, ma potrebbe interrompere i client che riflettono su campi e metodi privati di MessageQueue.

Per ulteriori informazioni, incluse le strategie di mitigazione, consulta la guida al cambiamento del comportamento di MessageQueue.

I campi finali statici ora non sono modificabili

Le app in esecuzione su Android 17 o versioni successive che hanno come target Android 17 o versioni successive non possono modificare i campi static final. Se un'app tenta di modificare un campo static final utilizzando la reflection, si verificherà un IllegalAccessException. Il tentativo di modificare uno di questi campi tramite le API JNI (ad esempio SetStaticLongField()) causerà l'arresto anomalo dell'app.

Accessibilità

Android 17 apporta le seguenti modifiche per migliorare l'accessibilità.

Supporto dell'accessibilità per la digitazione complessa della tastiera fisica IME

Questa funzionalità introduce nuove API AccessibilityEvent e TextAttribute per migliorare il feedback vocale dello screen reader per l'input di lingue CJKV. Le app CJKV IME ora possono segnalare se è stata selezionata una conversione di testo candidata durante la composizione del testo. Le app con campi di modifica possono specificare i tipi di modifica del testo quando inviano eventi di accessibilità relativi alla modifica del testo. Ad esempio, le app possono specificare che una modifica del testo si è verificata durante la composizione del testo o che è il risultato di un commit. In questo modo, i servizi di accessibilità come gli screen reader possono fornire un feedback più preciso in base alla natura della modifica del testo.

Adozione di app

  • App IME:quando imposti la composizione del testo nei campi di modifica, gli IME possono utilizzare TextAttribute.Builder.setTextSuggestionSelected() per indicare se è stato selezionato un candidato alla conversione specifico.

  • App con Modifica campi:le app che gestiscono un InputConnection personalizzato possono recuperare i dati di selezione dei candidati chiamando TextAttribute.isTextSuggestionSelected(). Queste app devono quindi chiamare AccessibilityEvent.setTextChangeTypes() durante l'invio degli eventi TYPE_VIEW_TEXT_CHANGED. Le app che hanno come target Android 17 e che utilizzano TextView standard avranno questa funzionalità attiva per impostazione predefinita. ovvero TextView gestirà il recupero dei dati dall'IME e l'impostazione dei tipi di modifica del testo durante l'invio di eventi ai servizi di accessibilità.

  • Servizi di accessibilità:i servizi di accessibilità che elaborano eventi TYPE_VIEW_TEXT_CHANGED possono chiamare AccessibilityEvent.getTextChangeTypes() per identificare la natura della modifica e adeguare di conseguenza le proprie strategie di feedback.

Privacy

Android 17 include le seguenti modifiche per migliorare la privacy degli utenti.

Autorizzazione di accesso alla rete locale richiesta per le app che hanno come target Android 17

Disponibile per i test? (Build obbligatoria) (Android 17 o versioni successive)
Richiede la modifica di targetSDKVersion? (livello API) (livello API "CINNAMON_BUN")
. Per saperne di più su questo valore, consulta la documentazione dell'attributo del manifest.

Android 17 introduce l'autorizzazione di runtime ACCESS_LOCAL_NETWORK per proteggere gli utenti da accessi non autorizzati alla rete locale. Poiché rientra nel gruppo di autorizzazioni NEARBY_DEVICES esistente, agli utenti che hanno già concesso altre autorizzazioni NEARBY_DEVICES non viene richiesto di nuovo. Questo nuovo requisito impedisce alle app dannose di sfruttare l'accesso illimitato alla rete locale per il tracciamento e l'identificazione degli utenti nascosti. Se dichiara e richiede questa autorizzazione, la tua app può rilevare e connettersi a dispositivi sulla rete locale (LAN), come dispositivi per la smart home o ricevitori di trasmissione.

Le app che hanno come target Android 17 o versioni successive ora hanno due modi per mantenere la comunicazione con i dispositivi LAN: adottare selettori di dispositivi che preservano la privacy e sono intermediati dal sistema per saltare la richiesta di autorizzazione oppure richiedere esplicitamente questa nuova autorizzazione in fase di runtime per mantenere la comunicazione di rete locale.

Per saperne di più, consulta la documentazione relativa all'autorizzazione di accesso alla rete locale.

Sicurezza

Android 17 apporta i seguenti miglioramenti alla sicurezza di dispositivi e app.

Sicurezza attività

In Android 17, la piattaforma continua il suo passaggio a un'architettura "sicura per impostazione predefinita", introducendo una serie di miglioramenti progettati per mitigare gli exploit di gravità elevata come phishing, hijacking dell'interazione e attacchi di tipo confused deputy. Questo aggiornamento richiede agli sviluppatori di attivare esplicitamente i nuovi standard di sicurezza per mantenere la compatibilità dell'app e la protezione degli utenti.

I principali impatti per gli sviluppatori includono:

  • Rafforzamento di BAL e miglioramento dell'attivazione: stiamo perfezionando le limitazioni di Avvio attività in background (BAL) estendendo le protezioni a IntentSender. Gli sviluppatori devono eseguire la migrazione dalla costante legacy MODE_BACKGROUND_ACTIVITY_START_ALLOWED. Devi invece adottare controlli granulari come MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE, che limita l'avvio dell'attività agli scenari in cui l'app chiamante è visibile, riducendo in modo significativo la superficie di attacco.
  • Strumenti di adozione:gli sviluppatori devono utilizzare la modalità Strict e i controlli lint aggiornati per identificare i pattern legacy e garantire la conformità ai futuri requisiti dell'SDK di destinazione.

Attiva CT per impostazione predefinita

Se un'app ha come target Android 17 o versioni successive, Certificate Transparency (CT) è attivato per impostazione predefinita. (Su Android 16, CT è disponibile, ma le app dovevano attivarlo.)

Safer Native DCL—C

Se la tua app ha come target Android 17 o versioni successive, la protezione Safer Dynamic Code Loading (DCL) introdotta in Android 14 per i file DEX e JAR ora si estende alle librerie native.

Tutti i file nativi caricati utilizzando System.load() devono essere contrassegnati come di sola lettura. In caso contrario, il sistema genera UnsatisfiedLinkError.

Ti consigliamo di evitare il caricamento dinamico del codice nelle app, quando possibile, in quanto aumenta notevolmente il rischio che un'app possa essere compromessa da un'iniezione di codice o da un'alterazione del codice.

Fattori di forma del dispositivo

Android 17 include le seguenti modifiche per migliorare l'esperienza utente su una gamma di dimensioni e fattori di forma dei dispositivi.

Modifiche all'API della piattaforma per ignorare i vincoli di orientamento, ridimensionamento e proporzioni su schermi di grandi dimensioni (sw>=600 dp)

Abbiamo introdotto modifiche all'API della piattaforma in Android 16 per ignorare le limitazioni di orientamento, proporzioni e ridimensionamento su schermi di grandi dimensioni (sw >= 600 dp) per le app che hanno come target il livello API 36 o versioni successive. Gli sviluppatori hanno la possibilità di disattivare queste modifiche con l'SDK 36, ma questa disattivazione non sarà più disponibile per le app che hanno come target Android 17 o versioni successive.

Per saperne di più, consulta Le limitazioni relative all'orientamento e al ridimensionamento vengono ignorate.