Como nas versões anteriores, o Android 16 inclui mudanças de comportamento que podem afetar seu app. As mudanças de comportamento abaixo se aplicam exclusivamente a apps destinados ao Android 16 ou versões mais recentes. Caso seu app seja direcionado ao Android 16 ou a versões mais recentes, faça modificações para oferecer suporte a esses comportamentos, quando aplicável.
Consulte também a lista de mudanças de comportamento que afetam todos os apps
executados no Android 16, independente da targetSdkVersion do app.
Experiência do usuário e interface do sistema
O Android 16 (nível 36 da API) inclui as mudanças a seguir, que têm como objetivo criar uma experiência do usuário mais consistente e intuitiva.
A opção de desativar a exibição de ponta a ponta vai ser removida
Android 15 enforced edge-to-edge for apps targeting Android 15 (API
level 35), but your app could opt-out by setting
R.attr#windowOptOutEdgeToEdgeEnforcement to true. For apps
targeting Android 16 (API level 36),
R.attr#windowOptOutEdgeToEdgeEnforcement is deprecated and disabled, and your
app can't opt-out of going edge-to-edge.
- If your app targets Android 16 (API level 36) and is running on an
Android 15 device,
R.attr#windowOptOutEdgeToEdgeEnforcementcontinues to work. - If your app targets Android 16 (API level 36) and is running on an
Android 16 device,
R.attr#windowOptOutEdgeToEdgeEnforcementis disabled.
For testing in Android 16, ensure your app supports edge-to-edge and
remove any use of R.attr#windowOptOutEdgeToEdgeEnforcement so that your app
also supports edge-to-edge on an Android 15 device. To support edge-to-edge,
see the Compose and Views guidance.
Migração ou desativação necessária para o gesto de voltar preditivo
Em apps direcionados ao Android 16 (nível 36 da API) ou mais recente e executados em um
dispositivo Android 16 ou mais recente, as animações preditivas do sistema de retorno
(voltar para a tela inicial, entre tarefas e entre atividades) são ativadas por padrão.
Além disso, onBackPressed não é chamado, e KeyEvent.KEYCODE_BACK não é mais enviado.
Se o app interceptar o evento de retorno e você ainda não tiver migrado para a volta preditiva,
atualize o app para usar as APIs de navegação de retorno compatíveis ou
desative temporariamente definindo o
atributo android:enableOnBackInvokedCallback como false na
tag <application> ou <activity> do arquivo AndroidManifest.xml do app.
APIs de fontes elegantes descontinuadas e desativadas
Apps targeting Android 15 (API level 35) have the
elegantTextHeight
TextView attribute set to true by
default, replacing the compact font with one that is much more readable. You
could override this by setting the elegantTextHeight attribute to false.
Android 16 deprecates the
elegantTextHeight attribute,
and the attribute will be ignored once your app targets Android 16. The "UI
fonts" controlled by these APIs are being discontinued, so you should adapt any
layouts to ensure consistent and future proof text rendering in Arabic, Lao,
Myanmar, Tamil, Gujarati, Kannada, Malayalam, Odia, Telugu or Thai.
elegantTextHeight behavior for apps targeting Android
14 (API level 34) and lower, or for apps targeting Android 15 (API level 35)
that overrode the default by setting the elegantTextHeight
attribute to false.
elegantTextHeight behavior for apps targeting Android
16 (API level 36), or for apps targeting Android 15 (API level 35) that didn't
override the default by setting the elegantTextHeight attribute
to false.Principal recurso
O Android 16 (nível 36 da API) inclui as mudanças abaixo, que modificam ou ampliam vários recursos principais do sistema Android.
Otimização da programação de trabalho com taxa fixa
Antes de segmentar o Android 16, quando o scheduleAtFixedRate
perdia uma execução de tarefa por estar fora de um
ciclo de vida do processo válido, todas as execuções perdidas eram executadas imediatamente
quando o app retornava a um ciclo de vida válido.
Ao segmentar o Android 16, no máximo uma execução perdida de
scheduleAtFixedRate é executada imediatamente quando o app
retorna a um ciclo de vida válido. Essa mudança de comportamento deve melhorar o desempenho
do app. Teste esse comportamento no seu app para verificar se ele é afetado.
Também é possível testar usando o framework de compatibilidade de apps
e ativando a flag de compatibilidade STPE_SKIP_MULTIPLE_MISSED_PERIODIC_TASKS.
Formatos de dispositivo
O Android 16 (nível 36 da API) inclui as seguintes mudanças para apps quando exibidos em dispositivos de tela grande.
Layouts adaptáveis
Com os apps Android agora sendo executados em uma variedade de dispositivos (como smartphones, tablets, dobráveis, computadores, carros e TVs) e modos de janela em telas grandes (como tela dividida e modo janela para computador), os desenvolvedores precisam criar apps Android que se adaptem a qualquer tamanho de tela e janela, independente da orientação do dispositivo. Paradigmas como restringir a orientação e o redimensionamento são muito restritivos no mundo multidispositivo de hoje.
Ignorar restrições de orientação, redimensionamento e proporção
Para apps destinados ao Android 16 (nível 36 da API), as restrições de orientação, redimensionamento e proporção não se aplicam mais a telas com largura mínima >= 600 dp. Os apps preenchem toda a janela de exibição, independentemente da proporção ou da orientação preferida do usuário, e o efeito pillarbox não é usado.
Essa mudança introduz um novo comportamento padrão da plataforma. O Android está migrando para um modelo em que os apps precisam se adaptar a várias orientações, tamanhos de tela e proporções. Restrições como orientação fixa ou redimensionamento limitado prejudicam a adaptabilidade do app. Torne seu app adaptável para oferecer a melhor experiência possível ao usuário.
Também é possível testar esse comportamento usando o
framework de compatibilidade de apps e ativando a
flag de compatibilidade UNIVERSAL_RESIZABLE_BY_DEFAULT.
Alterações interruptivas comuns
Ignorar as restrições de orientação, redimensionamento e proporção pode afetar a interface do app em alguns dispositivos, especialmente elementos projetados para layouts pequenos bloqueados na orientação retrato, como layouts esticados e animações e componentes fora da tela. Qualquer suposição sobre proporção ou orientação pode causar problemas visuais no app. Saiba mais sobre como evitar esses problemas e melhorar o comportamento adaptativo do app.
Permitir a rotação do dispositivo resulta em mais recriações de atividades, o que pode resultar na perda do estado do usuário se não for preservado corretamente. Saiba como salvar corretamente o estado da interface em Salvar estados da interface.
Detalhes de implementação
Os seguintes atributos de manifesto e APIs de execução são ignorados em dispositivos de tela grande nos modos de tela cheia e de várias janelas:
screenOrientationresizableActivityminAspectRatiomaxAspectRatiosetRequestedOrientation()getRequestedOrientation()
Os seguintes valores para screenOrientation, setRequestedOrientation() e
getRequestedOrientation() são ignorados:
portraitreversePortraitsensorPortraituserPortraitlandscapereverseLandscapesensorLandscapeuserLandscape
Em relação ao redimensionamento da tela, android:resizeableActivity="false",
android:minAspectRatio e android:maxAspectRatio não têm efeito.
Para apps direcionados ao Android 16 (nível 36 da API), as restrições de orientação, redimensionamento e proporção são ignoradas em telas grandes por padrão. Todos os apps que não estão totalmente prontos podem modificar temporariamente esse comportamento ao desativar o recurso, o que resulta no comportamento anterior de ser colocado no modo de compatibilidade.
Exceções
As restrições de orientação, redimensionamento e proporção do Android 16 não se aplicam nas seguintes situações:
- Jogos (com base na flag
android:appCategory) - Usuários que ativam explicitamente o comportamento padrão do app nas configurações de proporção do dispositivo.
- Telas menores que
sw600dp
Desativar temporariamente
Para desativar uma atividade específica, declare a
propriedade de manifesto PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY:
<activity ...>
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
...
</activity>
Se muitas partes do app não estiverem prontas para o Android 16, você poderá desativar completamente aplicando a mesma propriedade no nível do aplicativo:
<application ...>
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
</application>
Saúde e fitness
O Android 16 (nível 36 da API) inclui as seguintes mudanças relacionadas a dados de saúde e condicionamento físico.
Permissões de saúde e fitness
Para apps direcionados ao Android 16 (nível 36 da API) ou mais recentes, as permissões
BODY_SENSORS são mais granulares
em android.permissions.health, um modelo adotado também pelo Conexão Saúde. No Android 16, qualquer API que antes exigia BODY_SENSORS
ou BODY_SENSORS_BACKGROUND agora precisa da permissão
android.permissions.health correspondente. Isso afeta os seguintes tipos de dados, APIs e tipos de serviços em primeiro plano:
HEART_RATE_BPMdos Recursos de Saúde no Wear OSSensor.TYPE_HEART_RATEdo Android Sensor ManagerheartRateAccuracyeheartRateBpmdoProtoLayoutno Wear OSFOREGROUND_SERVICE_TYPE_HEALTH, em que a permissãoandroid.permission.healthcorrespondente é necessária em vez deBODY_SENSORS.
Se o app usa essas APIs, ele precisa solicitar as respectivas permissões detalhadas:
- Para monitorar a frequência cardíaca, o SpO₂ ou a temperatura da pele durante o uso:
solicite a permissão granular em
android.permissions.health, comoREAD_HEART_RATEem vez deBODY_SENSORS. - Para acesso ao sensor em segundo plano: solicite
READ_HEALTH_DATA_IN_BACKGROUNDem vez deBODY_SENSORS_BACKGROUND.
Essas permissões são as mesmas que protegem o acesso à leitura de dados da Conexão Saúde, o repositório de dados do Android para informações de saúde, condicionamento físico e bem-estar.
Apps para dispositivos móveis
Os apps para dispositivos móveis que migrarem para usar a READ_HEART_RATE e outras permissões
detalhadas também precisam declarar uma atividade para mostrar
a Política de Privacidade do app. Esse é o mesmo requisito do Conexão Saúde.
Conectividade
O Android 16 (nível 36 da API) inclui as seguintes mudanças na pilha do Bluetooth para melhorar a conectividade com dispositivos periféricos.
Novas intents para lidar com perda de vínculo e mudanças na criptografia
Como parte do Processamento de perda de vínculo aprimorado, o Android 16 também apresenta duas novas intents para dar aos apps mais consciência da perda de vínculo e mudanças de criptografia.
Os apps destinados ao Android 16 agora podem:
- Receber uma intent
ACTION_KEY_MISSINGquando a perda de vínculo remoto é detectada, permitindo que eles forneçam feedback mais informativo ao usuário e realizem ações adequadas. - Receba uma intent
ACTION_ENCRYPTION_CHANGEsempre que o status de criptografia do link mudar. Isso inclui a mudança de status de criptografia, de algoritmo de criptografia e de tamanho da chave de criptografia. Os apps precisam considerar a vinculação restaurada se o link for criptografado ao receber a intentACTION_ENCRYPTION_CHANGEmais tarde.
Como se adaptar a diferentes implementações de OEM
Embora o Android 16 apresente essas novas intents, a implementação e a transmissão delas podem variar de acordo com os diferentes fabricantes de dispositivos (OEMs). Para garantir que o app ofereça uma experiência consistente e confiável em todos os dispositivos, os desenvolvedores precisam projetar o processamento de perda de vínculo para se adaptar a essas variações.
Recomendamos os seguintes comportamentos do app:
Se a intent
ACTION_KEY_MISSINGfor transmitida:O link ACL (Asynchronous Connection-Less) será desconectado pelo sistema, mas as informações de vinculação do dispositivo serão mantidas, conforme descrito aqui.
Seu app precisa usar essa intent como o indicador principal para a detecção de perda de conexão e orientar o usuário a confirmar se o dispositivo remoto está no alcance antes de iniciar o esquecimento ou o novo pareamento do dispositivo.
Se um dispositivo se desconectar depois que o
ACTION_KEY_MISSINGfor recebido, o app precisará ter cuidado ao se reconectar, porque o dispositivo pode não estar mais vinculado ao sistema.Se a intent
ACTION_KEY_MISSINGNÃO for transmitida:O link ACL vai permanecer conectado, e as informações de vinculação do dispositivo serão removidas pelo sistema, assim como no comportamento do Android 15.
Nesse cenário, o app precisa continuar com os mecanismos de processamento de perda de vínculo existentes, como nas versões anteriores do Android, para detectar e gerenciar eventos de perda de vínculo.
Nova maneira de remover a conexão Bluetooth
Todos os apps destinados ao Android 16 agora podem desvincular dispositivos Bluetooth usando uma
API pública em CompanionDeviceManager. Se um dispositivo complementar estiver
sendo gerenciado como uma associação de CDM, o app poderá acionar
a remoção de pareamento Bluetooth usando a nova API removeBond(int)
no dispositivo associado. O app pode monitorar as mudanças de estado de vinculação
ouvindo o evento de transmissão do dispositivo Bluetooth
ACTION_BOND_STATE_CHANGED.
Segurança
O Android 16 (nível 36 da API) inclui as seguintes mudanças de segurança.
Bloqueio de versão do MediaStore
Para apps destinados ao Android 16 ou mais recente, o MediaStore#getVersion() agora
será exclusivo para cada app. Isso elimina as propriedades de identificação da string
de versão para evitar abuso e uso para técnicas de impressão digital. Os apps não podem
fazer suposições sobre o formato dessa versão. Os apps já precisam
processar mudanças de versão ao usar essa API e, na maioria dos casos, não precisam
mudar o comportamento atual, a menos que o desenvolvedor tenha tentado inferir
informações adicionais que estão além do escopo pretendido dessa API.
Intents mais seguras
The Safer Intents feature is a multi-phase security initiative designed to improve the security of Android's intent resolution mechanism. The goal is to protect apps from malicious actions by adding checks during intent processing and filtering intents that don't meet specific criteria.
In Android 15 the feature focused on the sending app. Now with Android 16, control shifts to the receiving app, allowing developers to opt-in to strict intent resolution using their app manifest.
Two key changes are being implemented:
Explicit Intents Must Match the Target Component's Intent Filter: If an intent explicitly targets a component, it should match that component's intent filter.
Intents Without an Action Cannot Match any Intent Filter: Intents that don't have an action specified shouldn't be resolved to any intent filter.
These changes only apply when multiple apps are involved and don't affect intent handling within a single app.
Impact
The opt-in nature means that developers must explicitly enable it in their app manifest for it to take effect. As a result, the feature's impact will be limited to apps whose developers:
- Are aware of the Safer Intents feature and its benefits.
- Actively choose to incorporate stricter intent handling practices into their apps.
This opt-in approach minimizes the risk of breaking existing apps that may rely on the current less-secure intent resolution behavior.
While the initial impact in Android 16 may be limited, the Safer Intents initiative has a roadmap for broader impact in future Android releases. The plan is to eventually make strict intent resolution the default behavior.
The Safer Intents feature has the potential to significantly enhance the security of the Android ecosystem by making it more difficult for malicious apps to exploit vulnerabilities in the intent resolution mechanism.
However, the transition to opt-out and mandatory enforcement must be carefully managed to address potential compatibility issues with existing apps.
Implementation
Developers need to explicitly enable stricter intent matching using the
intentMatchingFlags attribute in their app manifest.
Here is an example where the feature is opt-in for the entire app,
but disabled/opt-out on a receiver:
<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>
More on the supported flags:
| Flag Name | Description |
|---|---|
| enforceIntentFilter | Enforces stricter matching for incoming intents |
| none | Disables all special matching rules for incoming intents. When specifying multiple flags, conflicting values are resolved by giving precedence to the "none" flag |
| allowNullAction | Relaxes the matching rules to allow intents without an action to match. This flag to be used in conjunction with "enforceIntentFilter" to achieve a specific behavior |
Testing and Debugging
When the enforcement is active, apps should function correctly if the intent
caller has properly populated the intent.
However, blocked intents will trigger warning log messages like
"Intent does not match component's intent filter:" and "Access blocked:"
with the tag "PackageManager."
This indicates a potential issue that could impact the app and requires
attention.
Logcat filter:
tag=:PackageManager & (message:"Intent does not match component's intent filter:" | message: "Access blocked:")
Filtragem de syscall da GPU
Para reforçar a superfície da GPU Mali, as IOCTLs da GPU Mali que foram descontinuadas ou que são destinadas exclusivamente ao desenvolvimento de GPU foram bloqueadas em builds de produção. Além disso, os IOCTLs usados para a criação de perfil de GPU foram restritos ao processo do shell ou a aplicativos depuráveis. Consulte a atualização do SAC para mais detalhes sobre a política no nível da plataforma.
Essa mudança ocorre em dispositivos Pixel que usam a GPU Mali (Pixel 6 a 9). A Arm
forneceu uma categorização oficial das IOCTLs em
Documentation/ioctl-categories.rst da versão r54p2. Essa
lista continuará sendo mantida em versões futuras do driver.
Essa mudança não afeta as APIs de gráficos compatíveis (incluindo Vulkan e OpenGL) e não deve afetar os desenvolvedores ou os aplicativos atuais. As ferramentas de criação de perfil de GPU, como o Streamline Performance Analyzer e o Android GPU Inspector, não serão afetadas.
Teste
Se você receber uma negação do SELinux semelhante à seguinte, é provável que seu aplicativo tenha sido afetado por essa mudança:
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
Se o aplicativo precisar usar IOCTLs bloqueados, registre um bug e atribua-o a android-partner-security@google.com.
Perguntas frequentes
Essa mudança na política se aplica a todos os OEMs? Essa mudança será opcional, mas estará disponível para todos os OEMs que quiserem usar esse método de proteção. As instruções para implementar a mudança podem ser encontradas na documentação de implementação.
É obrigatório fazer mudanças na base de código do OEM para implementar isso ou ela vem com uma nova versão do AOSP por padrão? A mudança no nível da plataforma vai vir com uma nova versão do AOSP por padrão. Os fornecedores podem ativar essa mudança na base de código se quiserem aplicá-la.
Os SoCs são responsáveis por manter a lista de IOCTLs atualizada? Por exemplo, se meu dispositivo usa uma GPU ARM Mali, preciso entrar em contato com a ARM para fazer alguma mudança? Os SoCs individuais precisam atualizar as listas de IOCTL por dispositivo após o lançamento do driver. Por exemplo, a ARM vai atualizar a lista de IOCTLs publicada quando houver atualizações de driver. No entanto, os OEMs precisam incorporar as atualizações na SEPolicy e adicionar as IOCTLs personalizadas selecionadas às listas, conforme necessário.
Essa mudança se aplica automaticamente a todos os dispositivos Pixel no mercado ou é necessária uma ação do usuário para ativar algo? Essa mudança se aplica a todos os dispositivos Pixel no mercado que usam a GPU Mali (Pixel 6 a 9). Nenhuma ação do usuário é necessária para aplicar essa mudança.
O uso dessa política vai afetar o desempenho do driver do kernel? Essa política foi testada na GPU Mali usando o GFXBench, e nenhuma mudança mensurável no desempenho da GPU foi observada.
É necessário que a lista de IOCTLs esteja alinhada com as versões atuais do espaço do usuário e do driver do kernel? Sim, a lista de IOCTLs permitidos precisa ser sincronizada com os IOCTLs compatíveis com os drivers de espaço do usuário e do kernel. Se os IOCTLs no espaço do usuário ou no driver do kernel forem atualizados, a lista de IOCTLs da SEPolicy precisará ser atualizada para corresponder.
A ARM categorizou as IOCTLs como "restritas" / "instrumentação", mas queremos usar algumas delas em casos de uso de produção e/ou negar outras. Os OEMs/SoCs individuais são responsáveis por decidir como categorizar as IOCTLs que usam, com base na configuração das bibliotecas Mali do espaço do usuário. A lista da ARM pode ser usada para ajudar a decidir sobre isso, mas o caso de uso de cada OEM/SoC pode ser diferente.
Privacidade
O Android 16 (nível 36 da API) inclui as mudanças de privacidade a seguir.
Permissão de rede local
Os dispositivos na LAN podem ser acessados por qualquer app que tenha a permissão INTERNET.
Isso facilita a conexão de apps a dispositivos locais, mas também tem implicações de privacidade, como a formação de uma impressão digital do usuário e a atuação como proxy de localização.
O projeto de proteções de rede local tem como objetivo proteger a privacidade do usuário, restringindo o acesso à rede local com uma nova permissão de execução.
Plano de lançamento
Essa mudança será implantada entre duas versões, 25Q2 e 26Q2, respectivamente. É fundamental que os desenvolvedores sigam essas orientações para o 25Q2 e compartilhem feedback, porque essas proteções serão aplicadas em uma versão posterior do Android. Além disso, eles precisarão atualizar os cenários que dependem do acesso implícito à rede local usando as orientações a seguir e se preparar para a rejeição e revogação da nova permissão pelo usuário.
Impacto
No estágio atual, a LNP é um recurso opcional, o que significa que apenas os apps que ativarem essa opção serão afetados. O objetivo da fase de ativação é que os desenvolvedores de apps entendam quais partes do app dependem do acesso implícito à rede local para que possam se preparar para protegê-las com permissões na próxima versão.
Os apps serão afetados se acessarem a rede local do usuário usando:
- Uso direto ou de biblioteca de soquetes brutos em endereços de rede local (por exemplo, protocolo de descoberta de serviços mDNS ou SSDP)
- Uso de classes no nível do framework que acessam a rede local (por exemplo, NsdManager)
O tráfego para e de um endereço de rede local requer permissão de acesso à rede local. A tabela a seguir lista alguns casos comuns:
| Operação de rede de baixo nível do app | Permissão de rede local necessária |
|---|---|
| Como fazer uma conexão TCP de saída | sim |
| Como aceitar conexões TCP de entrada | sim |
| Como enviar um unicast, multicast ou broadcast UDP | sim |
| Receber um unicast, multicast ou broadcast UDP de entrada | sim |
Essas restrições são implementadas na pilha de rede e, portanto, se aplicam a todas as APIs de rede. Isso inclui soquetes criados em código nativo ou gerenciado, bibliotecas de rede como Cronet e OkHttp e todas as APIs implementadas com base nelas. A tentativa de resolver serviços na rede local (ou seja, aqueles com um sufixo .local) vai exigir permissão de rede local.
Exceções às regras acima:
- Se o servidor DNS de um dispositivo estiver em uma rede local, o tráfego de entrada ou saída (na porta 53) não vai exigir permissão de acesso à rede local.
- Os aplicativos que usam o seletor de saída como seletor no app não vão precisar de permissões de rede local (mais orientações serão fornecidas no quarto trimestre de 2025).
Orientação para desenvolvedores (ativação)
Para ativar as restrições de rede local, faça o seguinte:
- Atualize o dispositivo para uma versão com o Beta 3 do 25Q2 ou mais recente.
- Instale o app que será testado.
Ative a flag do Appcompat no adb:
adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>Reinicie o dispositivo
Agora, o acesso do app à rede local está restrito, e qualquer tentativa de acessar a rede local vai resultar em erros de soquete. Se você estiver usando APIs que realizam operações de rede local fora do processo do app (por exemplo, NsdManager), elas não serão afetadas durante a fase de ativação.
Para restaurar o acesso, conceda ao app permissão para NEARBY_WIFI_DEVICES.
- Verifique se o app declara a permissão
NEARBY_WIFI_DEVICESno manifesto. - Acesse Configurações > Apps > [Nome do aplicativo] > Permissões > Dispositivos por perto > Permitir.
Agora, o acesso do app à rede local será restaurado, e todos os cenários vão funcionar como antes da ativação.
Quando a aplicação da proteção de rede local começar, o tráfego de rede do app será afetado da seguinte forma.
| Permissão | Solicitação de LAN de saída | Solicitação de saída/entrada da Internet | Solicitação de LAN de entrada |
|---|---|---|---|
| Concedido | funciona | funciona | funciona |
| Não concedido | Falhas | funciona | Falhas |
Use o comando a seguir para desativar a flag de compatibilidade de apps:
adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>
Erros
Os erros decorrentes dessas restrições serão retornados ao soquete de chamada sempre que ele invocar o envio ou uma variante de envio para um endereço de rede local.
Exemplo de erros:
sendto failed: EPERM (Operation not permitted)
sendto failed: ECONNABORTED (Operation not permitted)
Definição de rede local
Uma rede local neste projeto se refere a uma rede IP que usa uma interface de rede com capacidade de transmissão, como Wi-Fi ou Ethernet, mas exclui conexões de celular (WWAN) ou conexão VPN.
As seguintes redes são consideradas locais:
IPv4:
- 169.254.0.0/16 // Link Local
- 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:
- Link-local
- Rotas conectadas diretamente
- Redes stub, como Thread
- Várias sub-redes (a definir)
Além disso, os endereços multicast (224.0.0.0/4, ff00::/8) e o endereço de transmissão IPv4 (255.255.255.255) são classificados como endereços de rede local.
Fotos do app
Quando um app destinado ao SDK 36 ou mais recente solicitar permissões de fotos e vídeos em dispositivos com o Android 16 ou versões mais recentes, os usuários que optarem por limitar o acesso à mídia selecionada vão encontrar as fotos pertencentes ao app pré-selecionadas no seletor de fotos. Os usuários podem desmarcar qualquer um desses itens pré-selecionados, o que revoga o acesso do app a essas fotos e vídeos.