Modifiche al comportamento: app che hanno come target Android 16 o versioni successive

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#windowOptOutEdgeToEdgeEnforcement continua 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.

L'animazione di ritorno alla home page predittiva.
L'animazione predittiva cross-activity.
L'animazione predittiva tra le attività.

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.

Comportamento di 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:

I seguenti valori per screenOrientation, setRequestedOrientation() e getRequestedOrientation() vengono ignorati:

  • portrait
  • reversePortrait
  • sensorPortrait
  • userPortrait
  • landscape
  • reverseLandscape
  • sensorLandscape
  • userLandscape

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:

If your app uses these APIs, it should request the respective granular permissions:

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_MISSING intent when remote bond loss is detected, allowing them to provide more informative user feedback and take appropriate actions.
  • Receive an ACTION_ENCRYPTION_CHANGE intent 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 receiving ACTION_ENCRYPTION_CHANGE intent 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_MISSING intent 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_MISSING is received, your app should be cautious about reconnecting, as the device may no longer be bonded with the system.

  • If the ACTION_KEY_MISSING intent 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:

  1. 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.

  2. 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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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
Accettazione di connessioni TCP in entrata
Invio di un pacchetto UDP unicast, multicast, broadcast
Ricezione di un pacchetto UDP unicast, multicast, broadcast in entrata

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:

  1. Esegui il flashing del dispositivo a una build con 25Q2 Beta 3 o versioni successive.
  2. Installa l'app da testare.
  3. Attiva/disattiva il flag Appcompat in adb:

    adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
    
  4. 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.

  1. Assicurati che l'app dichiari l'autorizzazione NEARBY_WIFI_DEVICES nel file manifest.
  2. 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.