Visão geral de compatibilidade de dispositivos

O Android foi projetado para ser executado em muitos dispositivos diferentes, como smartphones, tablets e televisões. A variedade de dispositivos oferece um enorme público-alvo em potencial para o app. Para ter sucesso em todos os dispositivos, ele precisa tolerar a variabilidade de recursos e fornecer uma interface do usuário flexível que se adapte a diferentes configurações de tela.

Para ajudar na compatibilidade de dispositivos, o Android oferece um framework de app dinâmico em que é possível fornecer recursos do app específicos da configuração em arquivos estáticos, como diferentes layouts XML para diferentes tamanhos de tela. Em seguida, o Android carrega os recursos apropriados com base na configuração atual do dispositivo. Com pensamento no design do app e em outros recursos, você pode publicar um único pacote de aplicativo (APK) para otimizar a experiência do usuário em vários dispositivos.

No entanto, se necessário, você pode especificar os requisitos de recursos do app e controlar quais tipos de dispositivos podem instalar o app pela Google Play Store. Este documento explica como é possível controlar quais dispositivos têm acesso aos seus apps e como prepará-los para alcançar o público certo.

O que significa "compatibilidade"?

Em relação ao desenvolvimento para Android, existem dois tipos de compatibilidade: compatibilidade de dispositivos e compatibilidade de apps.

Como o Android é um projeto de código aberto, qualquer fabricante de hardware pode criar um dispositivo que execute o sistema operacional Android. No entanto, um dispositivo só será "compatível com Android" se puder executar corretamente apps criados para o ambiente de execução do Android. Os detalhes exatos do ambiente de execução do Android são definidos pelo Programa de compatibilidade do Android. Cada dispositivo precisa passar pelo conjunto de teste de compatibilidade (CTS) para ser considerado compatível.

Como desenvolvedor de apps, você não precisa se preocupar se um dispositivo é compatível com o Android, porque apenas dispositivos compatíveis com Android incluem a Google Play Store. Portanto, se um usuário instalar seu app pela Google Play Store, ele está usando um dispositivo compatível com Android.

No entanto, você precisa considerar se o app é compatível com cada configuração de dispositivo em potencial. Como o Android é executado em uma ampla variedade de configurações de dispositivos, alguns recursos não estão disponíveis em todos eles. Por exemplo, alguns dispositivos podem não incluir um sensor de bússola. Se a funcionalidade principal do seu app exigir um sensor de bússola, ele será compatível apenas com dispositivos que incluam esse recurso.

Controlar a disponibilidade do app para dispositivos

O Android oferece suporte a vários recursos que seu app pode usar nas APIs da plataforma. Alguns recursos são baseados em hardware, como um sensor de bússola; alguns são baseados em software, como widgets de apps, e outros dependem da versão da plataforma. Nem todos os dispositivos oferecem suporte a todos os recursos. Por isso, pode ser necessário controlar a disponibilidade do app para os dispositivos com base nos recursos obrigatórios do app.

Para alcançar a maior base de usuários possível para o app, ofereça suporte ao maior número possível de configurações de dispositivo usando um único APK ou AAB. Na maioria das situações, é possível fazer isso desativando recursos opcionais no momento da execução e fornecendo recursos do app com alternativas para diferentes configurações, como layouts diferentes para diferentes tamanhos de tela. Se necessário, você pode restringir a disponibilidade do app a determinados dispositivos na Google Play Store com base nestas características do dispositivo:

Recursos do dispositivo

Para gerenciar a disponibilidade do app com base nos recursos do dispositivo, o Android define IDs de recursos para qualquer recurso de hardware ou software que pode não estar disponível em todos os dispositivos. Por exemplo, o ID de recurso para o sensor da bússola é FEATURE_SENSOR_COMPASS, e o ID de recurso para widgets de app é FEATURE_APP_WIDGETS.

Se necessário, você pode impedir que os usuários instalem seu app quando os dispositivos não fornecerem o recurso necessário declarando-o usando um elemento <uses-feature> no arquivo de manifesto do app.

Por exemplo, se o app não fizer sentido em um dispositivo que não tenha um sensor de bússola, declare o sensor como um requisito com esta tag de manifesto:

<manifest ... >
    <uses-feature android:name="android.hardware.sensor.compass"
                  android:required="true" />
    ...
</manifest>

A Google Play Store compara os recursos que seu app exige com os recursos disponíveis no dispositivo de cada usuário para determinar se o app é compatível com o dispositivo. Se o dispositivo não tiver todos os recursos exigidos pelo app, o usuário não poderá instalá-lo.

No entanto, se a funcionalidade principal do app não exigir um recurso do dispositivo, defina o atributo required como "false" e confira o recurso do dispositivo durante a execução. Se o recurso do app não estiver disponível no dispositivo atual, faça uma degradação suave do recurso do app correspondente. Por exemplo, para consultar se um recurso está disponível, chame hasSystemFeature() desta forma:

Kotlin

if (!packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device doesn't have a compass. Turn off the compass feature.
    disableCompassFeature()
}

Java

PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device doesn't have a compass. Turn off the compass feature.
    disableCompassFeature();
}

Para informações sobre todos os filtros que podem ser usados para controlar a disponibilidade do app na Google Play Store, consulte a documentação Filtros no Google Play.

Versão da plataforma

Dispositivos diferentes podem executar versões distintas da plataforma Android, como o Android 12 ou 13. Cada nova versão da plataforma geralmente adiciona APIs que não estavam disponíveis na versão anterior. Para indicar qual conjunto de APIs está disponível, cada versão da plataforma especifica um nível de API. Por exemplo, o Android 12 é o nível 31 da API e o Android 13 é o 33 da API.

Especifique os valores minSdkVersion e targetSdkVersion no arquivo build.gradle:

Kotlin

android {
    defaultConfig {
        applicationId = "com.example.myapp"

        // Defines the minimum API level required to run the app.
        minSdkVersion(30)

        // Specifies the API level used to test the app.
        targetSdkVersion(33)
        ...
    }
}

Groovy

android {
    defaultConfig {
        applicationId 'com.example.myapp'

        // Defines the minimum API level required to run the app.
        minSdkVersion 30

        // Specifies the API level used to test the app.
        targetSdkVersion 33
        ...
    }
}

Para saber mais sobre o arquivo build.gradle, leia Configurar seu build.

Cada nova versão do Android oferece compatibilidade para apps criados usando as APIs de versões anteriores da plataforma. Assim, seu app vai ser compatível com versões futuras do Android usando as APIs documentadas do Android.

No entanto, se o app usar APIs adicionadas em uma versão mais recente da plataforma, mas não precisar delas para a funcionalidade principal, verifique o nível da API no tempo de execução e faça uma degradação suave dos recursos correspondentes quando o nível da API for muito baixo. Nesse caso, defina o minSdkVersion como o menor valor possível para a funcionalidade principal do app e compare a versão atual do sistema, SDK_INT, com a constante de codinome em Build.VERSION_CODES que corresponde ao nível da API que você quer verificar, conforme mostrado no exemplo abaixo:

Kotlin

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    // Running on something older than API level 11, so disable
    // the drag and drop features that use ClipboardManager APIs.
    disableDragAndDrop()
}

Java

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    // Running on something older than API level 11, so disable
    // the drag and drop features that use ClipboardManager APIs.
    disableDragAndDrop();
}

Configuração da tela

O Android é executado em dispositivos de vários tamanhos, como smartphones, tablets e TVs. Para categorizar dispositivos pelo tipo de tela, o Android define duas características para cada dispositivo: o tamanho da tela (o tamanho físico da tela) e a densidade da tela (a densidade física dos pixels na tela, conhecida como DPI). Para simplificar as diferentes configurações, o Android generaliza essas variantes em grupos que as tornam mais fáceis de segmentar:

  • Quatro tamanhos generalizados: pequeno, normal, grande e muito grande
  • Várias densidades generalizadas: mdpi (média), hdpi (alta), xhdpi (extra alta), xxhdpi (extra-extra-alta) e outras

Por padrão, o app é compatível com todos os tamanhos e densidades de tela, porque o sistema faz ajustes no layout da interface e nos recursos de imagem conforme necessário para cada tela. Forneça imagens de bitmap otimizadas para densidades de tela comuns.

Otimize a experiência do usuário usando layouts flexíveis o máximo possível. Em casos de layouts para grandes mudanças de configuração, como retrato e paisagem, ou tamanhos de janela grandes e pequenos, considere fornecer layouts alternativos que sejam flexíveis a mudanças menores na configuração. Isso melhora a experiência do usuário em formatos como tablets, smartphones e dispositivos dobráveis. Isso também ajuda quando o tamanho das janelas muda no modo de várias janelas.

Para saber mais sobre como criar recursos alternativos para diferentes telas e como restringir o app a determinados tamanhos de tela quando necessário, leia a visão geral de compatibilidade de tela e consulte as diretrizes de qualidade de apps para telas grandes.

Controlar a disponibilidade do seu app por motivos comerciais

Além de restringir a disponibilidade do app com base nas características do dispositivo, pode ser necessário fazer isso por motivos comerciais ou legais. Por exemplo, é improvável que um app que mostre horários de trens para o Metrô de Londres seja útil para usuários de fora do Reino Unido. Para esse tipo de situação, a Google Play Store oferece opções de filtragem no Play Console que permitem controlar a disponibilidade do app por motivos não técnicos, como a localidade ou a operadora sem fio do usuário.

A filtragem para compatibilidade técnica, como componentes de hardware necessários, é sempre baseada nas informações contidas no seu APK ou arquivo AAB. No entanto, a filtragem por motivos não técnicos, como localização geográfica, é sempre processada no Google Play Console.

Outros recursos:

Visão geral dos recursos de app
Informações sobre como apps Android são estruturados para separar recursos do app do código do app, incluindo como fornecer recursos alternativos para configurações específicas do dispositivo.
Filtros no Google Play
Informações sobre as diferentes maneiras como a Google Play Store pode impedir que seu app seja instalado em diferentes dispositivos.
Permissões no Android
Como o Android restringe o acesso de apps a determinadas APIs com um sistema de permissões que exige o consentimento do usuário para que o app use essas APIs.