Publicación en Google Play Store

Android requiere que todas las aplicaciones estén firmadas digitalmente con un certificado antes de poder ser instaladas. Para poder distribuir tu aplicación Android a través de la tienda Google Play es necesario que esté firmada con una clave de lanzamiento que luego debe ser utilizada para todas las futuras actualizaciones. Desde 2017 es posible que Google Play gestione la firma de lanzamientos de forma automática gracias a la funcionalidad App Signing by Google Play. Sin embargo, antes de subir el binario de tu aplicación a Google Play es necesario firmarlo con una clave de subida. La página sobre la firma de tus aplicaciones en la documentación de Android Developers describe el tema en detalle. Esta guía cubre el proceso en breve, así como una lista de los pasos necesarios para empaquetar el paquete de JavaScript.

Generar una clave de subida#

Puedes generar una clave de firma privada utilizando keytool. En Windows keytool debe ejecutarse desde 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

Copy

Este comando le pide las contraseñas para el keystore y la clave y para los campos de Nombre Distinguido para su clave. A continuación, genera el almacén de claves como un archivo llamado my-upload-key.keystore.

El almacén de claves contiene una única clave, válida durante 10000 días. El alias es un nombre que usarás más tarde cuando firmes tu aplicación, así que recuerda tomar nota del alias.

En Mac, si no estás seguro de dónde está tu carpeta bin del JDK, realiza el siguiente comando para encontrarla:

/usr/libexec/java_home

Copiar

Dará como resultado el directorio del JDK, que será algo así:

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

Copie

Navegue hasta ese directorio utilizando el comando cd /your/jdk/path y utilice el comando keytool con permiso sudo como se muestra a continuación.

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

Copie

Nota: Recuerde mantener el archivo keystore privado. En caso de que hayas perdido la clave de subida o haya sido comprometida debes seguir estas instrucciones.

Configurar las variables de Gradle#

  1. Coloca el archivo my-upload-key.keystore bajo el directorio android/app de tu carpeta de proyecto.
  2. Edita el archivo ~/.gradle/gradle.properties o android/gradle.properties, y añade lo siguiente (sustituye ***** por la contraseña correcta del keystore, el alias y la contraseña de la clave),

MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=*****
MYAPP_UPLOAD_KEY_PASSWORD=*****

Copiar

Estas van a ser variables globales de Gradle, que luego podremos utilizar en nuestra configuración de Gradle para firmar nuestra app.

Nota sobre la seguridad: Si no eres partidario de almacenar tus contraseñas en texto plano, y estás ejecutando macOS, también puedes almacenar tus credenciales en la app Keychain Access. Entonces puedes omitir las dos últimas filas en ~/.gradle/gradle.properties.

Añadir la configuración de firma a la configuración de Gradle de tu aplicación#

El último paso de configuración que hay que hacer es configurar las compilaciones de lanzamiento para que se firmen usando la clave de subida. Edita el archivo android/app/build.gradle en la carpeta de tu proyecto, y añade la configuración de firma,

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
}
}
}

Copiar

Generar la liberación AAB#

Ejecutar lo siguiente en un terminal:

cd android
./gradlew bundleRelease

Copiar

Gradle’s bundleRelease empaquetará todo el JavaScript necesario para ejecutar su aplicación en el AAB (Android App Bundle). Si necesita cambiar la forma en que el paquete de JavaScript y / o recursos dibujables se agrupan (por ejemplo, si ha cambiado los nombres de archivo / carpeta por defecto o la estructura general del proyecto), echa un vistazo a android/app/build.gradle para ver cómo se puede actualizar para reflejar estos cambios.

Nota: Asegúrese de que gradle.properties no incluye org.gradle.configureondemand=true ya que hará que la construcción de la versión omita la agrupación de JS y los activos en el binario de la aplicación.

La AAB generada se encuentra en android/app/build/outputs/bundle/release/app.aab, y está lista para ser subida a Google Play.

Para que Google Play acepte el formato AAB es necesario configurar la App Signing by Google Play para tu aplicación en la Google Play Console. Si estás actualizando una aplicación existente que no utiliza App Signing by Google Play, consulta nuestra sección de migración para saber cómo realizar ese cambio de configuración.

Probar la build de lanzamiento de tu aplicación#

Antes de subir la build de lanzamiento a la Play Store, asegúrate de probarla a fondo. Primero desinstala cualquier versión anterior de la aplicación que ya tengas instalada. Instálala en el dispositivo utilizando el siguiente comando en la raíz del proyecto:

npx react-native run-android –variant=release

Copiar

Nota que --variant release sólo está disponible si has configurado la firma como se ha descrito anteriormente.

Puede terminar cualquier instancia de bundler que se esté ejecutando, ya que todo su código de framework y JavaScript está incluido en los activos del APK.

Publicación en otras tiendas#

Por defecto, el APK generado tiene el código nativo para las arquitecturas de CPU x86 y ARMv7a. Esto hace que sea más fácil compartir APKs que se ejecutan en casi todos los dispositivos Android. Sin embargo, esto tiene el inconveniente de que habrá algo de código nativo no utilizado en cualquier dispositivo, lo que lleva a APKs innecesariamente más grandes.

Puedes crear un APK para cada CPU cambiando la siguiente línea en android/app/build.gradle:

– ndk {
– abiFilters «armeabi-v7a», «x86»
}
– def enableSeparateBuildPerCPUArchitecture = false
+ def enableSeparateBuildPerCPUArchitecture = true

Copy

Carga estos dos archivos a los mercados que soportan la orientación de dispositivos, como Google Play y Amazon AppStore, y los usuarios obtendrán automáticamente el APK apropiado. Si quieres subir a otros mercados, como APKFiles, que no soportan múltiples APKs para una misma app, cambia también la siguiente línea para crear el APK universal por defecto con binarios para ambas CPUs.

– universalApk false // Si es verdadero, generar también un APK universal
+ universalApk true // Si es verdadero, generar también un APK universal

Copiar

Activar Proguard para reducir el tamaño del APK (opcional)#

Proguard es una herramienta que puede reducir ligeramente el tamaño del APK. Lo hace despojando partes del bytecode Java de React Native (y sus dependencias) que tu app no está utilizando.

IMPORTANTE: Asegúrate de probar a fondo tu app si has habilitado Proguard. Proguard a menudo requiere una configuración específica para cada biblioteca nativa que está utilizando. Consulte app/proguard-rules.pro.

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

/**
* Ejecute Proguard para reducir el bytecode de Java en las compilaciones de lanzamiento.
*/
def enableProguardInReleaseBuilds = true

Copy

Migración de aplicaciones antiguas de Android React Native para utilizar App Signing by Google Play#

Si estás migrando desde una versión anterior de React Native lo más probable es que tu aplicación no utilice la función App Signing by Google Play. Te recomendamos que la habilites para poder aprovechar cosas como la división automática de la aplicación. Para migrar desde la antigua forma de firmar necesitas empezar por generar una nueva clave de subida y luego reemplazar la configuración de firma de lanzamiento en android/app/build.gradle para usar la clave de subida en lugar de la de lanzamiento (ver la sección sobre cómo añadir la configuración de firma a gradle). Una vez hecho esto, debes seguir las instrucciones del sitio web de ayuda de Google Play para enviar tu clave de lanzamiento original a Google Play.

Permisos por defecto#

Por defecto, el permiso INTERNET se añade a tu aplicación Android ya que casi todas las aplicaciones lo utilizan. El permiso SYSTEM_ALERT_WINDOW se añade a su APK de Android en modo de depuración, pero se eliminará en producción.