Publicar no Google Play Store

Android requer que todos os aplicativos sejam assinados digitalmente com um certificado antes de poderem ser instalados. Para distribuir seu aplicativo Android via Google Play Store ele precisa ser assinado com uma chave de lançamento que depois precisa ser usada para todas as atualizações futuras. Desde 2017 é possível para o Google Play gerir a assinatura de lançamentos automaticamente graças à funcionalidade App Signing by Google Play. No entanto, antes do seu aplicativo ser enviado para o Google Play, ele precisa ser assinado com uma chave de envio. A página Assinando seus aplicativos na documentação do Android Developers descreve o tópico em detalhes. Este guia cobre o processo em resumo, bem como lista as etapas necessárias para empacotar o pacote JavaScript.

Gerar uma chave de upload#

Você pode gerar uma chave de assinatura privada usando keytool. No Windows keytool deve ser executado a partir de C:\Program Files\Java\jdkx.x.x_x\bin.

keytool -genkeypair -v -storetype PKCS12 -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

>

>

Este comando pede-lhe as palavras-passe para a keystore e chave e para os campos Distinguished Name para a sua chave. Em seguida, gera o keystore como um ficheiro chamado my-upload-key.keystore.

O keystore contém uma única chave, válida por 10000 dias. O alias é um nome que usará mais tarde quando assinar a sua aplicação, por isso lembre-se de tomar nota do alias.

No Mac, se você não tem certeza onde está sua pasta JDK bin, então execute o seguinte comando para encontrá-la:

/usr/libexec/java_home

>

Copiar

>

Saiu o directório do JDK, que se parecerá com isto:

>

/Library/Java/JavaVirtualMachines/jdkX.X.X_XXX.jdk/Contents/Home

Navigate para esse diretório usando o comando cd /your/jdk/path e use o comando keytool com permissão sudo como mostrado abaixo.

sudo keytool -genkey -v -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

> Copy

Note: Lembre-se de manter o arquivo keystore privado. Caso você tenha perdido a chave de upload ou ela tenha sido comprometida você deve seguir estas instruções.

Configurar variáveis Gradle#

  1. Colocar o arquivo my-upload-key.keystore sob o diretório android/app na pasta do seu projeto.
  2. Editar o ficheiro ~/.gradle/gradle.properties ou android/gradle.properties, e adicione o seguinte (substitua ***** com a palavra-chave de loja correcta, alias e palavra-chave),
MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=*****
MYAPP_UPLOAD_KEY_PASSWORD=*****

>

>

>

Estas vão ser variáveis de Gradle globais, que mais tarde poderemos usar na nossa configuração Gradle para assinar a nossa aplicação.

Nota sobre segurança: Se você não está interessado em armazenar as suas senhas em texto simples, e você está executando macOS, você também pode armazenar as suas credenciais no aplicativo Keychain Access. Então você pode pular as duas últimas linhas em ~/.gradle/gradle.properties.

Adicionando a configuração de assinatura à configuração Gradle do seu aplicativo#

O último passo de configuração que precisa ser feito é configurar os builds da release para serem assinados usando a chave de upload. Edite o arquivo android/app/build.gradle na pasta do seu projeto, e adicione a configuração de assinatura,

android {
defaultConfig { … }
signingConfigs {
release {
if (project.hasProperty(‘MYAPP_UPLOAD_STORE_FILE’)) {
storeFile file(MYAPP_UPLOAD_STORE_FILE)
storePassword MYAPP_UPLOAD_STORE_PASSWORD
keyAlias MYAPP_UPLOAD_KEY_ALIAS
keyPassword MYAPP_UPLOAD_KEY_PASSWORD
}
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}

Gerar a versão AAB#

Executar o seguinte num terminal:

>

cd android
./gradlew bundleRelease

Gradle’s bundleRelease irá empacotar todo o JavaScript necessário para executar a sua aplicação no AAB (Android App Bundle). Se você precisar alterar a forma como o pacote JavaScript e/ou recursos sorteáveis são empacotados (por exemplo, se você alterou o nome padrão do arquivo/pasta ou a estrutura geral do projeto), dê uma olhada em android/app/build.gradle para ver como você pode atualizá-lo para refletir essas alterações.

Note: Certifique-se de que gradle.properties não inclua org.gradle.configureondemand=true, pois isso fará com que o release build pule o empacotamento JS e os recursos para o binário do aplicativo.

O AAB gerado pode ser encontrado em android/app/build/outputs/bundle/release/app.aab, e está pronto para ser carregado no Google Play.

Para que o Google Play aceite o formato AAB, é necessário configurar a Assinatura do aplicativo pelo Google Play para o seu aplicativo na Console do Google Play. Se você está atualizando um aplicativo existente que não usa o App Signing by Google Play, verifique nossa seção de migração para saber como realizar essa mudança de configuração.

Testando a construção do release build do seu aplicativo#

Antes de fazer o upload do release build para a Play Store, certifique-se de testá-lo completamente. Primeiro desinstale qualquer versão anterior do aplicativo que você já tenha instalado. Instale-o no dispositivo usando o seguinte comando na raiz do projeto:

npx react-native run-android –variant=release

Copy

Nota que --variant release só está disponível se você tiver configurado a assinatura como descrito acima.

Você pode terminar qualquer instância de bundler em execução, uma vez que todo o seu framework e código JavaScript está agrupado nos ativos do APK.

Publicando em outras lojas#

Por padrão, o APK gerado tem o código nativo para ambas arquiteturas de CPU x86 e ARMv7a. Isto facilita o compartilhamento de APKs que rodam em quase todos os dispositivos Android. No entanto, isto tem a desvantagem de que haverá algum código nativo não utilizado em qualquer dispositivo, levando a APKs desnecessariamente maiores.

Você pode criar um APK para cada CPU alterando a seguinte linha em android/app/build.gradle:

– ndk {
– abiFilters “armeabi-v7a”, “x86”
– }
– def enableSeparateBuildPerCPUArchitecture = falso
+ def enableSeparateBuildPerCPUArchitecture = verdadeiro

Copy

Upload desses dois arquivos para mercados que suportam direcionamento de dispositivos, como o Google Play e Amazon AppStore, e os usuários obterão automaticamente o APK apropriado. Se você quiser fazer upload para outros mercados, como APKFiles, que não suportam múltiplos APKs para uma única aplicação, altere a seguinte linha também para criar o APK universal padrão com binários para ambas CPUs.

– universalApk false // Se true, também gerar um APK universal
+ universalApk true // Se true, também gerar um APK universal

> Cópia

Habilitando o Proguard para reduzir o tamanho do APK (opcional)#

Proguard é uma ferramenta que pode reduzir ligeiramente o tamanho do APK. Ele faz isso removendo partes do bytecode React Native Java (e suas dependências) que sua aplicação não está usando.

IMPORTANTE: Certifique-se de testar completamente sua aplicação se você ativou o Proguard. O Proguard frequentemente requer configuração específica para cada biblioteca nativa que você está usando. Veja app/proguard-rules.pro.

Para habilitar o Proguard, edite android/app/build.gradle:

>

/***
* Execute o Proguard para encolher o bytecode Java nas compilações do release.

>

*/
def enableProguardInReleaseBuilds = true

Copy

>

Migrando aplicativos antigos do Android React Native para usar o recurso App Signing by Google Play#

Se você estiver migrando da versão anterior do React Native, as chances de seu aplicativo não usar o recurso App Signing by Google Play. Recomendamos que você ative isso para tirar proveito de coisas como a divisão automática de aplicativos. Para migrar da forma antiga de assinatura, você precisa começar gerando uma nova chave de upload e depois substituindo a configuração de assinatura de lançamento em android/app/build.gradle para usar a chave de upload em vez da chave de lançamento (veja a seção sobre como adicionar a configuração de assinatura ao gradle). Uma vez feito isso, você deve seguir as instruções do site de Ajuda do Google Play para enviar sua chave de lançamento original para o Google Play.

Permissões padrão#

Por padrão, INTERNET a permissão é adicionada ao seu aplicativo Android, já que praticamente todos os aplicativos o utilizam. SYSTEM_ALERT_WINDOW permissão é adicionada ao seu APK Android em modo de depuração mas será removida em produção.