Reduzindo o tamanho do APK para Android no React Native

Com as últimas atualizações do React Native tivemos um aumento relevante no tamanho da APK gerada pelo comando gradlew assembleRelease. Isso se deve principalmente ao suporte às diferentes arquiteturas (32 bits, 64 bits, etc) estarem sendo agrupados em uma única APK.

Basicamente para resolver esse problema precisamos separar cada arquitetura em seu próprio APK e deixar que o próprio Google Play lide com o download correto baseado na versão do smartphone do usuário.

Além disso, podemos aplicar algumas outras regras para diminuir ainda mais o tamanho da APK gerada pelo React Native.

Separando APK por arquitetura

Para começar vamos abrir o arquivo android/app/build.gradle e procurar pelo seguinte trecho de código:

def enableSeparateBuildPerCPUArchitecture = false

Altere false por true e agora na pasta android você já pode executar o comando:

./gradlew assembleRelease

Acessando a pasta android/app/build/outputs/apk/release você verá agora um arquivo para cada tipo de arquitetura com a extensão .apk. Você deve fazer upload de todos para a Google Play para que ela lide corretamente com a versão correta pra cada tipo de usuário.

APK's gerados

Há algum tempo o Google parou de dar suporte para arquiteturas 32 bits, então para novas aplicações você pode remover a entrada x86 de dentro da instrução include presente na seção abi, ficando algo assim:

include "armeabi-v7a", "arm64-v8a", "x86_64"

Habilitando Proguard

No arquivo android/app/build.gradle podemos procurar pela instrução:

def enableProguardInReleaseBuilds = false

E alterar seu valor para true. O Proguard basicamente criptografa seu código nativo em Java e elimina todo código não utilizado, o que faz a APK diminuir levemente em tamanho.

Obs.: Algumas dependências podem não funcionar muito bem com o Proguard então é sempre bom testar sua aplicação antes de envia-la para a loja.

Habilitando shrinkResources

Outra dica para diminuir o tamanho final da APK gerada é no arquivo android/app/build.gradle antes do trecho minifyEnabled enableProguardInReleaseBuilds, adicionarmos:

shrinkResources true

Isso fará com que na hora de gerar o APK, o Android elimine arquivos que não estão sendo utilizados como fontes, imagens, etc...

Concluindo

Se você seguiu o post até aqui deve ter provavelmente reduzido o tamanho de sua APK de 30MB para perto de 8MB com as instruções que passamos acima.

Algumas dessas instruções não farão efeito grande em aplicações menores, por isso, conforme sua aplicação cresce é quando você vai ver o maior efeito dessas alterações.

Ah, não esquece de deixar um comentário sobre o que você achou desse post :)