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
InputConnectionpersonalizzato possono recuperare i dati di selezione dei candidati chiamandoTextAttribute.isTextSuggestionSelected(). Queste app devono quindi chiamareAccessibilityEvent.setTextChangeTypes()durante l'invio degli eventiTYPE_VIEW_TEXT_CHANGED. Le app che hanno come target Android 17 e che utilizzanoTextViewstandard avranno questa funzionalità attiva per impostazione predefinita. ovveroTextViewgestirà 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_CHANGEDpossono chiamareAccessibilityEvent.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) | Sì (Android 17 o versioni successive) |
|---|---|
Richiede la modifica di targetSDKVersion? (livello API) |
Sì (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 legacyMODE_BACKGROUND_ACTIVITY_START_ALLOWED. Devi invece adottare controlli granulari comeMODE_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.