Come le release precedenti, Android 16 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 16 o versioni successive. Se la tua app ha come target Android 16 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 16, indipendentemente dal targetSdkVersion della tua app.
Esperienza utente e UI di sistema
Android 16 (livello API 36) include le seguenti modifiche volte a creare un'esperienza utente più coerente e intuitiva.
Rimozione della disattivazione della visualizzazione edge-to-edge
Android 15 ha imposto la visualizzazione edge-to-edge per le app che hanno come target Android 15 (livello API 35), ma la tua app può disattivare questa funzionalità impostando R.attr#windowOptOutEdgeToEdgeEnforcement su true. Per le app
che hanno come target Android 16 (livello API 36),
R.attr#windowOptOutEdgeToEdgeEnforcement è deprecato e disabilitato e la tua
app non può disattivare la visualizzazione edge-to-edge.
- Se la tua app ha come target Android 16 (livello API 36) ed è in esecuzione su un
dispositivo Android 15,
R.attr#windowOptOutEdgeToEdgeEnforcementcontinua a funzionare. - Se la tua app ha come target Android 16 (livello API 36) ed è in esecuzione su un
dispositivo Android 16,
R.attr#windowOptOutEdgeToEdgeEnforcementè disattivato.
Per i test in Android 16, assicurati che la tua app supporti la visualizzazione edge-to-edge e
rimuovi qualsiasi utilizzo di R.attr#windowOptOutEdgeToEdgeEnforcement in modo che la tua app
supporti la visualizzazione edge-to-edge anche su un dispositivo Android 15. Per supportare la visualizzazione da bordo a bordo,
consulta le indicazioni relative a Composizione e Visualizzazioni.
Migrazione o disattivazione richieste per la funzionalità Indietro predittivo
Per le app che hanno come target Android 16 (livello API 36) o versioni successive e in esecuzione su un
dispositivo Android 16 o versioni successive, le animazioni del sistema Indietro predittivo
(torna alla schermata Home, passaggio da un'attività all'altra e passaggio da un'attività all'altra) sono attive per impostazione predefinita.
Inoltre, onBackPressed non viene chiamato e
KeyEvent.KEYCODE_BACK non viene più inviato.
Se la tua app intercetta l'evento Indietro e non hai ancora eseguito la migrazione alla navigazione a ritroso predittiva, aggiorna l'app per utilizzare le API di navigazione a ritroso supportate oppure disattiva temporaneamente la funzionalità impostando l'attributo android:enableOnBackInvokedCallback su false nel tag <application> o <activity> del file AndroidManifest.xml dell'app.
API per caratteri eleganti ritirate e disabilitate
Le app che hanno come target Android 15 (livello API 35) hanno l'attributo
elegantTextHeight
TextView impostato su true per
impostazione predefinita, sostituendo il carattere compatto con uno molto più leggibile. Puoi
ignorare questa impostazione impostando l'attributo elegantTextHeight su false.
Android 16 ritira l'attributo
elegantTextHeight
e l'attributo verrà ignorato una volta che la tua app avrà come target Android 16. I "caratteri
dell'interfaccia utente" controllati da queste API verranno ritirati, pertanto devi adattare tutti
i layout per garantire il rendering del testo coerente e a prova di futuro in arabo, laotiano,
birmano, tamil, gujarati, kannada, malayalam, odia, telugu o tailandese.
elegantTextHeight per le app che hanno come target Android
14 (livello API 34) e versioni precedenti o per le app che hanno come target Android 15 (livello API 35)
che hanno sostituito il valore predefinito impostando l'attributo elegantTextHeight su false.
elegantTextHeight per le app che hanno come target Android
16 (livello API 36) o per le app che hanno come target Android 15 (livello API 35) che non
hanno eseguito l'override del valore predefinito impostando l'attributo elegantTextHeight
su false.Funzionalità di base
Android 16 (livello API 36) include le seguenti modifiche che modificano o espandono varie funzionalità di base del sistema Android.
Ottimizzazione della pianificazione del lavoro a tariffa fissa
Prima di scegliere come target Android 16, quando scheduleAtFixedRate
mancava un'esecuzione di attività perché non rientrava in un
ciclo di vita del processo valido, tutte le esecuzioni mancate venivano eseguite immediatamente
quando l'app tornava a un ciclo di vita valido.
Quando scegli come target Android 16, al massimo una esecuzione mancata di
scheduleAtFixedRate viene eseguita immediatamente quando l'app
torna a un ciclo di vita valido. Questa modifica del comportamento dovrebbe migliorare il rendimento dell'app. Testa questo comportamento nella tua app per verificare se è interessata.
Puoi anche eseguire il test utilizzando il framework di compatibilità delle app e attivando il flag di compatibilità STPE_SKIP_MULTIPLE_MISSED_PERIODIC_TASKS.
Fattori di forma dei dispositivi
Android 16 (livello API 36) include le seguenti modifiche per le app quando vengono visualizzate su dispositivi con schermi di grandi dimensioni.
Layout adattivi
Ora le app per Android vengono eseguite su una vasta gamma di dispositivi (come smartphone, tablet, pieghevoli, computer, auto e TV) e modalità di visualizzazione a finestre su schermi di grandi dimensioni (come schermo diviso e finestre del computer). Gli sviluppatori devono creare app per Android che si adattino a qualsiasi dimensione dello schermo e della finestra, indipendentemente dall'orientamento del dispositivo. Paradigmi come la limitazione dell'orientamento e del ridimensionamento sono troppo restrittivi nel mondo multidevice di oggi.
Ignora le limitazioni relative a orientamento, ridimensionamento e proporzioni
Per le app che hanno come target Android 16 (livello API 36), le limitazioni relative a orientamento, ridimensionamento e proporzioni non si applicano più ai display con larghezza minima >= 600 dp. Le app riempiono l'intera finestra di visualizzazione, indipendentemente dalle proporzioni o dall'orientamento preferito dall'utente, e non viene utilizzato il pillarbox.
Questa modifica introduce un nuovo comportamento standard della piattaforma. Android sta passando a un modello in cui le app devono adattarsi a vari orientamenti, dimensioni di visualizzazione e proporzioni. Limitazioni come l'orientamento fisso o il ridimensionamento limitato ostacolano l'adattabilità dell'app. Rendi la tua app adattabile per offrire la migliore esperienza utente possibile.
Puoi anche testare questo comportamento utilizzando il
framework di compatibilità delle app e attivando il
flag di compatibilità UNIVERSAL_RESIZABLE_BY_DEFAULT.
Modifiche che provocano errori comuni
Ignorare le limitazioni di orientamento, ridimensionamento e proporzioni potrebbe influire sull'interfaccia utente della tua app su alcuni dispositivi, in particolare sugli elementi progettati per layout di piccole dimensioni bloccati in orientamento verticale: ad esempio, problemi come layout allungati e animazioni e componenti fuori schermo. Qualsiasi ipotesi sul rapporto o sull'orientamento può causare problemi visivi con la tua app. Scopri di più su come evitarli e migliorare il comportamento adattivo della tua app.
Consentire la rotazione del dispositivo comporta una maggiore ricreazione dell'attività, il che può comportare la perdita dello stato dell'utente se non viene conservato correttamente. Scopri come salvare correttamente lo stato dell'interfaccia utente in Salva stati dell'interfaccia utente.
Dettagli di implementazione
I seguenti attributi del manifest e API di runtime vengono ignorati sui dispositivi con schermi di grandi dimensioni in modalità a schermo intero e multi-finestra:
screenOrientationresizableActivityminAspectRatiomaxAspectRatiosetRequestedOrientation()getRequestedOrientation()
I seguenti valori per screenOrientation, setRequestedOrientation() e
getRequestedOrientation() vengono ignorati:
portraitreversePortraitsensorPortraituserPortraitlandscapereverseLandscapesensorLandscapeuserLandscape
Per quanto riguarda il ridimensionamento del display, android:resizeableActivity="false",
android:minAspectRatio e android:maxAspectRatio non hanno alcun effetto.
Per le app che hanno come target Android 16 (livello API 36), l'orientamento, il ridimensionamento e i vincoli di proporzioni dell'app vengono ignorati sugli schermi grandi per impostazione predefinita. Ogni app non completamente pronta può ignorare temporaneamente questo comportamento disattivandolo, il che comporta il comportamento precedente di essere inserita in modalità di compatibilità.
Eccezioni
Le limitazioni di orientamento, ridimensionamento e proporzioni di Android 16 non si applicano nelle seguenti situazioni:
- Giochi (in base alla bandiera
android:appCategory) - Utenti che attivano esplicitamente il comportamento predefinito dell'app nelle impostazioni delle proporzioni del dispositivo
- Schermi più piccoli di
sw600dp
Disattivare temporaneamente
Per disattivare un'attività specifica, dichiara la proprietà
PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY del manifest:
<activity ...>
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
...
</activity>
Se troppe parti della tua app non sono pronte per Android 16, puoi disattivare completamente la funzionalità applicando la stessa proprietà a livello di applicazione:
<application ...>
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
</application>
Salute e fitness
Android 16 (livello API 36) include le seguenti modifiche relative ai dati di salute e fitness.
Autorizzazioni per salute e fitness
For apps targeting Android 16 (API level 36) or higher,
BODY_SENSORS permissions use more granular permissions
under android.permissions.health, which Health Connect
also uses. As of Android 16, any API previously requiring BODY_SENSORS
or BODY_SENSORS_BACKGROUND requires the corresponding
android.permissions.health permission instead. This affects the following data
types, APIs, and foreground service types:
HEART_RATE_BPMfrom Health Services on Wear OSSensor.TYPE_HEART_RATEfrom Android Sensor ManagerheartRateAccuracyandheartRateBpmfromProtoLayouton Wear OSFOREGROUND_SERVICE_TYPE_HEALTHwhere the respectiveandroid.permission.healthpermission is needed in place ofBODY_SENSORS
If your app uses these APIs, it should request the respective granular permissions:
- For while-in-use monitoring of Heart Rate, SpO2, or Skin Temperature:
request the granular permission under
android.permissions.health, such asREAD_HEART_RATEinstead ofBODY_SENSORS. - For background sensor access: request
READ_HEALTH_DATA_IN_BACKGROUNDinstead ofBODY_SENSORS_BACKGROUND.
These permissions are the same as those that guard access to reading data from Health Connect, the Android datastore for health, fitness, and wellness data.
Mobile apps
Mobile apps migrating to use the READ_HEART_RATE and other granular
permissions must also declare an activity to display
the app's privacy policy. This is the same requirement as Health Connect.
Connettività
Android 16 (livello API 36) include le seguenti modifiche nello stack Bluetooth per migliorare la connettività con i dispositivi periferici.
Nuovi intent per gestire la perdita dell'associazione e le modifiche alla crittografia
As part of the Improved bond loss handling, Android 16 also introduces 2 new intents to provide apps with greater awareness of bond loss and encryption changes.
Apps targeting Android 16 can now:
- Receive an
ACTION_KEY_MISSINGintent when remote bond loss is detected, allowing them to provide more informative user feedback and take appropriate actions. - Receive an
ACTION_ENCRYPTION_CHANGEintent whenever encryption status of the link changes. This includes encryption status change, encryption algorithm change, and encryption key size change. Apps must consider the bond restored if the link is successfully encrypted upon receivingACTION_ENCRYPTION_CHANGEintent later.
Adapting to varying OEM implementations
While Android 16 introduces these new intents, their implementation and broadcasting can vary across different device manufacturers (OEMs). To ensure your app provides a consistent and reliable experience across all devices, developers should design their bond loss handling to gracefully adapt to these potential variations.
We recommend the following app behaviors:
If the
ACTION_KEY_MISSINGintent is broadcast:The ACL (Asynchronous Connection-Less) link will be disconnected by the system, but the bond information for the device will be retained (as described here).
Your app should use this intent as the primary signal for bond loss detection and guiding the user to confirm the remote device is in range before initiating device forgetting or re-pairing.
If a device disconnects after
ACTION_KEY_MISSINGis received, your app should be cautious about reconnecting, as the device may no longer be bonded with the system.If the
ACTION_KEY_MISSINGintent is NOT broadcast:The ACL link will remain connected, and the bond information for the device will be removed by the system, same to behavior in Android 15.
In this scenario, your app should continue its existing bond loss handling mechanisms as in previous Android releases, to detect and manage bond loss events.
Nuovo modo per rimuovere l'associazione Bluetooth
Tutte le app che hanno come target Android 16 ora possono disaccoppiare i dispositivi Bluetooth utilizzando un'API pubblica in CompanionDeviceManager. Se un dispositivo complementare viene gestito come associazione CDM, l'app può attivare la rimozione del legame Bluetooth utilizzando la nuova API removeBond(int) sul dispositivo associato. L'app può monitorare le modifiche dello stato del legame ascoltando l'evento di trasmissione del dispositivo Bluetooth
ACTION_BOND_STATE_CHANGED.
Sicurezza
Android 16 (livello API 36) include le seguenti modifiche alla sicurezza.
Blocco della versione di MediaStore
For apps targeting Android 16 or higher, MediaStore#getVersion() will now
be unique to each app. This eliminates identifying properties from the version
string to prevent abuse and usage for fingerprinting techniques. Apps shouldn't
make any assumptions around the format of this version. Apps should already
handle version changes when using this API and in most cases shouldn't need to
change their current behavior, unless the developer has attempted to infer
additional information that is beyond the intended scope of this API.
Intenti più sicuri
La funzionalità Intent più sicuri è un'iniziativa di sicurezza in più fasi progettata per migliorare la sicurezza del meccanismo di risoluzione degli intent di Android. L'obiettivo è proteggere le app da azioni dannose aggiungendo controlli durante l'elaborazione degli intent e filtrando gli intent che non soddisfano criteri specifici.
In Android 15, la funzionalità si concentrava sull'app di invio. Ora, con Android 16, il controllo passa all'app di ricezione, consentendo agli sviluppatori di attivare la risoluzione degli intent rigorosa utilizzando il file manifest dell'app.
Verranno implementate due modifiche principali:
Gli intent espliciti devono corrispondere al filtro per intent del componente di destinazione: se un intent seleziona esplicitamente come target un componente, deve corrispondere al filtro per intent di quel componente.
Gli intent senza un'azione non possono corrispondere a nessun filtro per intent: gli intent per cui non è specificata un'azione non devono essere risolti in nessun filtro per intent.
Queste modifiche si applicano solo quando sono coinvolte più app e non influiscono sulla gestione degli intent all'interno di una singola app.
Impatto
La natura di attivazione significa che gli sviluppatori devono attivarla esplicitamente nel file manifest dell'app affinché abbia effetto. Di conseguenza, l'impatto della funzionalità sarà limitato alle app i cui sviluppatori:
- Sono a conoscenza della funzionalità Intent più sicuri e dei suoi vantaggi.
- Scelgono attivamente di incorporare pratiche di gestione degli intent più rigorose nelle loro app.
Questo approccio di attivazione riduce al minimo il rischio di interrompere le app esistenti che potrebbero basarsi sul comportamento di risoluzione degli intent corrente meno sicuro.
Sebbene l'impatto iniziale in Android 16 possa essere limitato, l'iniziativa Intent più sicuri prevede una roadmap per un impatto più ampio nelle future release di Android. L'obiettivo è rendere la risoluzione degli intent rigorosa il comportamento predefinito.
La funzionalità Intent più sicuri ha il potenziale per migliorare significativamente la sicurezza dell'ecosistema Android, rendendo più difficile per le app dannose sfruttare le vulnerabilità nel meccanismo di risoluzione degli intent.
Tuttavia, la transizione all'esclusione e all'applicazione obbligatoria deve essere gestita con attenzione per risolvere potenziali problemi di compatibilità con le app esistenti.
Implementazione
Gli sviluppatori devono attivare esplicitamente la corrispondenza degli intent più rigorosa utilizzando l'
intentMatchingFlags attributo nel file manifest dell'app.
Ecco un esempio in cui la funzionalità è attivata per l'intera app, ma disattivata/esclusa in un ricevitore:
<application android:intentMatchingFlags="enforceIntentFilter">
<receiver android:name=".MyBroadcastReceiver" android:exported="true" android:intentMatchingFlags="none">
<intent-filter>
<action android:name="com.example.MY_CUSTOM_ACTION" />
</intent-filter>
<intent-filter>
<action android:name="com.example.MY_ANOTHER_CUSTOM_ACTION" />
</intent-filter>
</receiver>
</application>
Ulteriori informazioni sui flag supportati:
| Nome del flag | Descrizione |
|---|---|
| enforceIntentFilter | Applica una corrispondenza più rigorosa per gli intent in entrata |
| none | Disattiva tutte le regole di corrispondenza speciali per gli intent in entrata. Quando specifichi più flag, i valori in conflitto vengono risolti dando la precedenza al flag "none" |
| allowNullAction | Rilassa le regole di corrispondenza per consentire la corrispondenza degli intent senza un'azione. Questo flag deve essere utilizzato insieme a "enforceIntentFilter" per ottenere un comportamento specifico |
Test e debug
Quando l'applicazione è attiva, le app dovrebbero funzionare correttamente se il chiamante dell'intent ha compilato correttamente l'intent.
Tuttavia, gli intent bloccati attiveranno messaggi di log di avviso come
"Intent does not match component's intent filter:" e "Access blocked:"
con il tag "PackageManager."
Ciò indica un potenziale problema che potrebbe influire sull'app e richiede
attenzione.
Filtro logcat:
tag=:PackageManager & (message:"Intent does not match component's intent filter:" | message: "Access blocked:")
Filtro delle chiamate di sistema della GPU
To harden the Mali GPU surface, Mali GPU IOCTLs that have been deprecated or are intended solely for GPU development have been blocked in production builds. Additionally, IOCTLs used for GPU profiling have been restricted to the shell process or debuggable applications. Refer to the SAC update for more details on the platform-level policy.
This change takes place on Pixel devices using the Mali GPU (Pixel 6-9). Arm
has provided official categorization of their IOCTLs in
Documentation/ioctl-categories.rst of their r54p2 release. This
list will continue to be maintained in future driver releases.
This change does not impact supported graphics APIs (including Vulkan and OpenGL), and is not expected to impact developers or existing applications. GPU profiling tools such as the Streamline Performance Analyzer and the Android GPU Inspector won't be affected.
Testing
If you see a SELinux denial similar to the following, it is likely your application has been impacted by this change:
06-30 10:47:18.617 20360 20360 W roidJUnitRunner: type=1400 audit(0.0:85): avc: denied { ioctl }
for path="/dev/mali0" dev="tmpfs" ino=1188 ioctlcmd=0x8023
scontext=u:r:untrusted_app_25:s0:c512,c768 tcontext=u:object_r:gpu_device:s0 tclass=chr_file
permissive=0 app=com.google.android.selinux.pts
If your application needs to use blocked IOCTLs, please file a bug and assign it to android-partner-security@google.com.
FAQ
Does this policy change apply to all OEMs? This change will be opt-in, but available to any OEMs who would like to use this hardening method. Instructions for implementing the change can be found in the implementation documentation.
Is it mandatory to make changes in the OEM codebase to implement this, or does it come with a new AOSP release by default? The platform-level change will come with a new AOSP release by default. Vendors may opt-in to this change in their codebase if they would like to apply it.
Are SoCs responsible for keeping the IOCTL list up to date? For example, if my device uses an ARM Mali GPU, would I need to reach out to ARM for any of the changes? Individual SoCs must update their IOCTL lists per device upon driver release. For example, ARM will update their published IOCTL list upon driver updates. However, OEMs should make sure that they incorporate the updates in their SEPolicy, and add any selected custom IOCTLs to the lists as needed.
Does this change apply to all Pixel in-market devices automatically, or is a user action required to toggle something to apply this change? This change applies to all Pixel in-market devices using the Mali GPU (Pixel 6-9). No user action is required to apply this change.
Will use of this policy impact the performance of the kernel driver? This policy was tested on the Mali GPU using GFXBench, and no measurable change to GPU performance was observed.
Is it necessary for the IOCTL list to align with the current userspace and kernel driver versions? Yes, the list of allowed IOCTLs must be synchronized with the IOCTLs supported by both the userspace and kernel drivers. If the IOCTLs in the user space or kernel driver are updated, the SEPolicy IOCTL list must be updated to match.
ARM has categorized IOCTLs as 'restricted' / 'instrumentation', but we want to use some of them in production use-cases, and/or deny others. Individual OEMs/SoCs are responsible for deciding on how to categorize the IOCTLs they use, based on the configuration of their userspace Mali libraries. ARM's list can be used to help decide on these, but each OEM/SoC's use-case may be different.
Privacy
Android 16 (livello API 36) include le seguenti modifiche alla privacy.
Autorizzazione di accesso alla rete locale
Le app con l'autorizzazione INTERNET possono accedere ai dispositivi sulla LAN.
In questo modo, le app possono connettersi facilmente ai dispositivi locali, ma ci sono anche implicazioni per la privacy, ad esempio la creazione di un'impronta digitale dell'utente e l'utilizzo come proxy per la posizione.
Il progetto Protezioni della rete locale mira a proteggere la privacy dell'utente limitando l'accesso alla rete locale tramite una nuova autorizzazione di runtime.
Piano di rilascio
Questa modifica verrà implementata tra due release, rispettivamente 25Q2 e 26Q2. È fondamentale che gli sviluppatori seguano queste indicazioni per 25Q2 e condividano feedback, perché queste protezioni verranno applicate in una release di Android successiva. Inoltre, dovranno aggiornare gli scenari che dipendono dall'accesso implicito alla rete locale seguendo le indicazioni riportate di seguito e prepararsi al rifiuto e alla revoca dell'autorizzazione da parte degli utenti.
Impatto
Nella fase attuale, LNP è una funzionalità di attivazione, il che significa che solo le app che la attivano saranno interessate. L'obiettivo della fase di attivazione è consentire agli sviluppatori di app di comprendere quali parti della loro app dipendono dall'accesso implicito alla rete locale, in modo che possano prepararsi a proteggerle con le autorizzazioni per la prossima release.
Le app saranno interessate se accedono alla rete locale dell'utente utilizzando:
- L'utilizzo diretto o tramite libreria di socket non elaborati sugli indirizzi della rete locale (ad es. protocollo Service Discovery mDNS o SSDP)
- L'utilizzo di classi a livello di framework che accedono alla rete locale (ad es. NsdManager)
Il traffico da e verso un indirizzo della rete locale richiede l'autorizzazione di accesso alla rete locale. La tabella seguente elenca alcuni casi comuni:
| Operazione di rete di basso livello dell'app | Autorizzazione di rete locale richiesta |
|---|---|
| Creazione di una connessione TCP in uscita | sì |
| Accettazione di connessioni TCP in entrata | sì |
| Invio di un pacchetto UDP unicast, multicast, broadcast | sì |
| Ricezione di un pacchetto UDP unicast, multicast, broadcast in entrata | sì |
Queste limitazioni sono implementate in profondità nello stack di rete e pertanto si applicano a tutte le API di rete. Sono inclusi i socket creati in codice nativo o gestito, le librerie di rete come Cronet e OkHttp e tutte le API implementate su di esse. Per provare a risolvere i servizi sulla rete locale (ovvero quelli con suffisso .local) è necessaria l'autorizzazione di rete locale.
Eccezioni alle regole riportate sopra:
- Se il server DNS di un dispositivo si trova su una rete locale, il traffico da o verso il server (alla porta 53) non richiede l'autorizzazione di accesso alla rete locale.
- Le applicazioni che utilizzano Output Switcher come selettore in-app non avranno bisogno delle autorizzazioni di rete locale (ulteriori indicazioni saranno disponibili nel quarto trimestre del 2025).
Indicazioni per gli sviluppatori (attivazione)
Per attivare le limitazioni della rete locale:
- Esegui il flashing del dispositivo a una build con 25Q2 Beta 3 o versioni successive.
- Installa l'app da testare.
Attiva/disattiva il flag Appcompat in adb:
adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>Riavvia il dispositivo
Ora l'accesso dell'app alla rete locale è limitato e qualsiasi tentativo di accesso alla rete locale genererà errori di socket. Se utilizzi API che eseguono operazioni di rete locale al di fuori del processo dell'app (ad es. NsdManager), non saranno interessate durante la fase di attivazione.
Per ripristinare l'accesso, devi concedere all'app l'autorizzazione NEARBY_WIFI_DEVICES.
- Assicurati che l'app dichiari l'autorizzazione
NEARBY_WIFI_DEVICESnel file manifest. - Vai a Impostazioni > App > [Nome dell'applicazione] > Autorizzazioni > Dispositivi nelle vicinanze > Consenti.
Ora l'accesso dell'app alla rete locale dovrebbe essere ripristinato e tutti gli scenari dovrebbero funzionare come prima dell'attivazione dell'app.
Una volta avviata l'applicazione della protezione della rete locale, ecco come verrà interessato il traffico di rete dell'app.
| Autorizzazione | Richiesta LAN in uscita | Richiesta internet in uscita/in entrata | Richiesta LAN in entrata |
|---|---|---|---|
| Concessa | Funziona | Funziona | Funziona |
| Non concessa | Fallimenti | Funziona | Fallimenti |
Utilizza il comando seguente per disattivare il flag App-Compat
adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>
Errori
Gli errori derivanti da queste limitazioni verranno restituiti al socket chiamante ogni volta che richiama send o una variante di send a un indirizzo della rete locale.
Esempi di errori:
sendto failed: EPERM (Operation not permitted)
sendto failed: ECONNABORTED (Operation not permitted)
Definizione di rete locale
In questo progetto, una rete locale si riferisce a una rete IP che utilizza un'interfaccia di rete con funzionalità di trasmissione, come Wi-Fi o Ethernet, ma esclude le connessioni cellulari (WWAN) o VPN.
Le seguenti sono considerate reti locali:
IPv4:
- 169.254.0.0/16 // Locale rispetto al collegamento
- 100.64.0.0/10 // CGNAT
- 10.0.0.0/8 // RFC1918
- 172.16.0.0/12 // RFC1918
- 192.168.0.0/16 // RFC1918
IPv6:
- Locale rispetto al collegamento
- Route connesse direttamente
- Reti stub come Thread
- Più subnet (TBD)
Inoltre, sia gli indirizzi multicast (224.0.0.0/4, ff00::/8) sia l'indirizzo di trasmissione IPv4 (255.255.255.255) sono classificati come indirizzi di rete locale.
Foto di proprietà dell'app
Quando un'app che ha come target l'SDK 36 o versioni successive richiede le autorizzazioni per foto e video su dispositivi con Android 16 o versioni successive, gli utenti che scelgono di limitare l'accesso ai contenuti multimediali selezionati vedranno le foto di proprietà dell'app preselezionate nel selettore di foto. Gli utenti possono deselezionare uno di questi elementi preselezionati, revocando così l'accesso dell'app a foto e video.