Skip to content

Most visited

Recently visited

navigation

Definir o ID do aplicativo

Todo aplicativo Android tem um ID do aplicativo exclusivo que parece com um nome de pacote Java, como com.example.myapp. Esse ID identifica exclusivamente o aplicativo no dispositivo e na Google Play Store. Se quiser atualizar o aplicativo para uma nova versão, o ID do aplicativo (e o certificado que você assina com ele) deverá ser o mesmo que o do APK original — se você alterar o ID do aplicativo, a Google Play Store tratará o APK como um aplicativo totalmente diferente. Então, depois que publicar o seu aplicativo, nunca troque o ID do aplicativo.

Seu ID do aplicativo é definido pela propriedade applicationId no arquivo build.gradle do módulo, como mostrado abaixo:

android {
    defaultConfig {
        applicationId "com.example.myapp"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    ...
}

Ao criar um novo projeto no Android Studio, o applicationId é exatamente igual ao nome de pacote estilo Java que você escolheu na etapa de configuração. No entanto, o ID do aplicativo e o nome do pacote são independentes além desse ponto. Você pode alterar o nome de pacote do seu código (o namespace do código) sem afetar o ID do aplicativo e vice-versa (embora, repetindo, não possa alterar o ID do aplicativo depois de publicá-lo). Porém, alterar o nome do pacote traz outras consequências de que você deve estar ciente, por isso, leia a seção sobre como modificar o nome do pacote.

E, embora o ID do aplicativo pareça um nome de pacote Java tradicional, as regras de atribuição de nome dele são um pouco mais restritivas:

Observação: O ID do aplicativo normalmente está diretamente vinculado ao nome de pacote do seu código, por isso, algumas Android APIs usam o termo “nome de pacote” no nome dos métodos e dos parâmetros, mas, na realidade, esse é o ID do seu aplicativo. Por exemplo, o método Context.getPackageName() retorna o ID do seu aplicativo. Não é preciso mostrar o nome de pacote verdadeiro do código fora do código do aplicativo.

Cuidado: se estiver usando WebView, considere usar o nome de pacote como prefixo do ID do aplicativo para evitar problemas, como descrito no problema 211768.

Alterar o ID do aplicativo para variantes de compilação

Ao compilar um APK para o aplicativo, as ferramentas de compilação marcam o APK com o ID do aplicativo definido no bloco defaultConfig do arquivo build.gradle (como mostrado abaixo). Porém, se você quer criar versões diferentes do aplicativo para exibi-las em listas separadas da Google Play Store, como versões “gratuitas” e “pagas”, será necessário criar variantes de compilação separadas, cada uma com um ID do aplicativo diferente.

Nesse caso, cada variante de compilação deve ser definida como um tipo de produto diferente. Para cada tipo dentro do bloco productFlavors {}, é possível redefinir a propriedade applicationId ou anexar um segmento ao ID do aplicativo padrão usando applicationIdSuffix, como demonstrado abaixo:

android {
    defaultConfig {
        applicationId "com.example.myapp"
    }
    productFlavors {
        free {
            applicationIdSuffix ".free"
        }
        pro {
            applicationIdSuffix ".pro"
        }
    }
}

Dessa forma, o ID do aplicativo do produto “gratuito” é "com.example.myapp.free".

Você também pode usar applicationIdSuffix para anexar um segmento de acordo com o tipo de compilação da seguinte forma:

android {
    ...
    buildTypes {
        debug {
            applicationIdSuffix ".debug"
        }
    }
}

Como o Gradle aplica a configuração do tipo de compilação depois do tipo de produto, o ID do aplicativo da variante de compilação “sem depuração” agora é "com.example.myapp.free.debug". Isso é útil quando se quer ter a compilação para depuração e para a versão final no mesmo dispositivo porque dois APKs nunca podem ter o mesmo ID do aplicativo.

Lembre-se de que APKs com IDs de aplicativo diferentes são considerados aplicativos diferentes pela Google Play Store. Por isso, se você quiser usar a mesma lista de aplicativo para distribuir diversos APKs voltados a diferentes configurações de dispositivo (como o nível da API), use o mesmo ID do aplicativo para as variantes de compilação, mas dê a cada APK um versionCode diferente. Para saber mais, leia sobre Suporte para vários APKs.

Cuidado: para obter compatibilidade com ferramentas do SDK anteriores, se você não definir a propriedade applicationId no arquivo build.gradle, as ferramentas de compilação usarão o nome de pacote do arquivo AndroidManifest.xml como o ID do aplicativo. Nesse caso, refatorar o nome de pacote também altera o ID do aplicativo.

Dica: Se precisar referenciar o ID do aplicativo no arquivo de manifesto, use o marcador ${applicationId} em todos os atributos do manifesto. Durante uma compilação, o Gradle substitui essa tag pelo ID do aplicativo. Para saber mais, acesse Injetar variáveis de compilação no manifesto.

Alterar o ID do aplicativo para realizar testes

Por padrão, as ferramentas de compilação aplicam um ID do aplicativo ao seu APK de testes de instrumentação usando o ID do aplicativo para a variante de compilação em questão, que contém .test no nome. Por exemplo, um APK de teste da variante de compilação com.example.myapp.free tem com.example.myapp.free.test como ID do aplicativo.

Embora não seja necessário, você pode alterar o ID do aplicativo definindo a propriedade testApplicationId em defaultConfig ou no bloco productFlavor.

Observação: para evitar reincidências de nome durante o teste do aplicativo, as ferramentas de compilação geram a classe R para o APK de teste com o namespace baseado no ID do aplicativo de teste, em vez de no nome de pacote definido no arquivo de manifesto.

Alterar o nome do pacote

Embora o nome de pacote do seu projeto seja igual ao ID do aplicativo por padrão, é possível alterá-lo. Porém, se você quiser alterar o nome do pacote, certifique-se de que o nome de pacote (como definido pela estrutura de diretórios do projeto) sempre corresponda ao atributo package no arquivo AndroidManifest.xml, conforme mostrado a seguir:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp"
    android:versionCode="1"
    android:versionName="1.0" >

As ferramentas de compilação do Android usam o atributo package para duas coisas:

Sendo assim, o nome no atributo package sempre deve ser igual ao nome do pacote básico do seu projeto, onde você mantém as atividades e o resto do código do aplicativo. É claro, você pode ter subpacotes no projeto, mas, se esse for o caso, esses arquivos devem importar a classe R.java usando o namespace do atributo package e todos os componentes do aplicativo declarados no manifesto devem adicionar os nomes de subpacote que faltam (ou usar nomes de pacote não ambíguos).

Se você quiser refatorar o nome do pacote completamente, não deixe de atualizar o atributo package também. Desde que você use as ferramentas do Android Studio para renomear e refatorar os pacotes, eles permanecerão sincronizados automaticamente (se não ficarem sincronizados, o código do aplicativo não poderá resolver a classe R porque ela não estará mais no mesmo pacote e o manifesto não identificará as atividades nem outros componentes).

Você sempre deve especificar o atributo package no arquivo AndroidManifest.xml principal do projeto. Se você tiver arquivos de manifesto adicionais (como para um tipo de produto ou de compilação), verifique se o nome do pacote fornecido pelo arquivo de manifesto de maior prioridade é sempre usado no manifesto combinado final. Para saber mais, leia Combinar diversos arquivos de manifesto.

Mais uma coisa: Embora você possa ter um nome diferente para o package do manifesto e para o applicationId do Gradle, as ferramentas de compilação copiam o ID do aplicativo para o arquivo de manifesto final do APK no fim da compilação. Então, se você inspecionar o arquivo AndroidManifest.xml após uma compilação, não se surpreenda se o atributo package tiver mudado. O atributo package é o que a Google Play Store e a plataforma Android realmente buscam para identificar o seu aplicativo, por isso, depois que a compilação usou o valor original (para atribuir um namespace à classe R e resolver nomes de classe do manifesto), ela descarta esse valor e passar a usar o ID do aplicativo.

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Follow Google Developers on WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)