¿Cómo puedo generar una apk que pueda ejecutarse sin servidor con react-native?
Creé mi aplicación, puedo ejecutarla en mi emulador local (y también en mi dispositivo Android dentro de la misma red cambiando el servidor de depuración).
Sin embargo, quiero crear un APK que pueda enviar a alguien sin acceso al servidor de desarrollo y quiero que pueda probar la aplicación.
Veo que hay una sección Uso del paquete sin conexión en iOS de la documentación. Pero no pude encontrar la manera de lograr lo mismo para Android. es posible? ¿Si es así, cómo?
ACTUALIZACIÓN: En la respuesta a esta pregunta ( Android no pudo cargar el paquete JS ), se dice que el paquete sin conexión se puede descargar desde el servidor de desarrollo. Pero cuando obtengo el paquete del servidor de desarrollo, los archivos de imagen no se pueden cargar.
Siguiendo la respuesta de Aditya Singh, la aplicación generada (sin firmar) no se instaló en mi teléfono. Tuve que generar una apk firmada siguiendo las instrucciones aquí .
Lo siguiente funcionó para mí:
$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
Coloque el my-release-key.keystore
archivo en el android/app
directorio de la carpeta de su proyecto. Luego edite el archivo
~/.gradle/gradle.properties
y agregue lo siguiente (reemplace **** con la contraseña del almacén de claves, el alias y la contraseña de clave correctos)
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=****
MYAPP_RELEASE_KEY_PASSWORD=****
Si está utilizando MacOS, puede almacenar su contraseña en el llavero siguiendo las instrucciones aquí en lugar de almacenarla en texto sin formato.
Luego edite app/build.gradle y asegúrese de que esté lo siguiente (es posible que sea necesario agregar las secciones con signingConfigs signConfig):
...
android {
...
defaultConfig { ... }
signingConfigs {
release {
if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
storeFile file(MYAPP_RELEASE_STORE_FILE)
storePassword MYAPP_RELEASE_STORE_PASSWORD
keyAlias MYAPP_RELEASE_KEY_ALIAS
keyPassword MYAPP_RELEASE_KEY_PASSWORD
}
}
}
buildTypes {
release {
...
signingConfig signingConfigs.release
}
}
}
...
Luego ejecute el comando cd android && ./gradlew assembleRelease
,
Para Windows 'cd android' y luego ejecute gradlew assembleRelease
el comando y busque su apk firmadoandroid/app/build/outputs/apk/app-release.apk
en , oandroid/app/build/outputs/apk/release/app-release.apk
Tendrás que crear una clave para firmar la apk. Utilice a continuación para crear su clave:
keytool -genkey -v -keystore my-app-key.keystore -alias my-app-alias -keyalg RSA -keysize 2048 -validity 10000
Utilice una contraseña cuando se le solicite
Una vez generada la clave, úsela para generar la compilación instalable:
react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/
Genera la compilación usando gradle
cd android && ./gradlew assembleRelease
Sube el APK a tu teléfono. La -r
bandera reemplazará la aplicación existente (si existe)
adb install -r ./app/build/outputs/apk/app-release-unsigned.apk
Aquí se menciona una descripción más detallada: https://facebook.github.io/react-native/docs/signed-apk-android.html
ACTUALIZACIÓN : Basado en comentarios de @shashuec y @Fallen
si obtienes un error
ENOENT: no existe tal archivo o directorio, abra 'android/app/src/main/assets/index.android.bundle'
ejecute mkdir android/app/src/main/assets
Deberías usar Android Studio para este proceso. Es simplemente más simple. Pero primero ejecute este comando en el directorio de su aplicación nativa de reacción:
Para la versión más nueva de reaccionar-nativo (por ejemplo, reaccionar nativo 0.49.0 y así sucesivamente...)
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
Para versiones anteriores de reaccionar-nativo (0.49.0 y anteriores)
react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/
Luego use Android Studio para abrir la carpeta 'Android' en el directorio de su aplicación nativa de reacción, le pedirá que actualice Gradle y algunas otras cosas. vaya a compilar-> Generar APK firmado y siga las instrucciones desde allí. Es realmente sencillo.
Si alguien quiere compilar sin claves de Play Store, este comando sería muy útil.
# react-native run-android --variant=release
Una vez completada la compilación, puede encontrar la apk en el archivo de compilación de lanzamiento.
Ejecute este comando:
react-native run-android --variant=release
Tenga en cuenta que
--variant=release
solo está disponible si ha configurado el inicio de sesión concd android && ./gradlew assembleRelease
.