¿Construir e instalar apk sin firmar en el dispositivo sin el servidor de desarrollo?

166

Como soy nuevo en react-native, si hay algo mal en los pasos, hágamelo saber.

He creado una aplicación de Android nativa reaccionar usando el comando según la documentación

reaccionar nativo de android

mientras se ejecutaba en el dispositivo, se utilizó el siguiente comando

react-native run-android

que me da la salida de 2 archivos apk en mi carpeta de proyecto / android / app / build / salidas / apk

ingrese la descripción de la imagen aquí

ahora, cuando uso para instalar este apk después de la instalación, solicita un servidor de desarrollo para conectar para agrupar el JS. Pero mi requisito es que el usuario no tenga que luchar con el servidor de desarrollo, solo necesita instalar el apk y todo está hecho.

He pasado por algunas preguntas de stackoverflow pero no es útil para construir apk sin firmar que no requiere servidor de desarrollo.

¿Pueden ayudarme a encontrar la forma en que la forma de construir y apk sin firmar en reaccionar nativo?

kAy_4337270
fuente
1
Ejecute 'react-native start', servirá su paquete js en modo de desarrollo. El propósito es que pueda editar archivos js sobre la marcha. El modo de lanzamiento de uso no necesita ningún servidor, ya que incluirá el paquete necesario con él. Vea la respuesta a continuación
kar

Respuestas:

250

Debe crear manualmente el paquete para una compilación de depuración.

Compilación de depuración de paquete:

#React-Native 0.59
react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/src/main/assets/index.android.bundle --assets-dest ./android/app/src/main/res

#React-Native 0.49.0+
react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

#React-Native 0-0.49.0
react-native bundle --dev false --platform android --entry-file index.android.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

Luego, para crear los APK después de la agrupación:

$ cd android
#Create debug build:
$ ./gradlew assembleDebug
#Create release build:
$ ./gradlew assembleRelease #Generated `apk` will be located at `android/app/build/outputs/apk`

PD: Otro enfoque podría ser modificar los scripts gradle.

Dmitry Mugtasimov
fuente
3
En caso de que a alguien le falten activos: esto funcionó para mí--assets-dest ./android/app/src/main/res/
Juan Solano
11
¿Y si hacer esto me da una gran pantalla roja cuando inicio la aplicación? (Nota: estoy ejecutando esto directamente después de la expulsión)
Simon Forsberg
3
¿Cómo tomar build para la última versión porque no tenemos index.android.js?
Vivek
9
Gente con la última versión, cambie el punto de entrada a --entry-file index.js, gracias.
Rishabh Bhatia
44
paquete react-native --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest. / android / app / build / intermediates / res / merged / debug para la nueva versión reactiva donde el index.js está unificado para ios y android
ir2pid
101

Por favor sigue esos pasos.

Haz tu js:

si tiene index.android.js en la raíz del proyecto, ejecute

react-native bundle --dev false --platform android --entry-file index.android.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

si tiene index.js en la raíz del proyecto, ejecute

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

Crear apk de depuración:

cd android/
./gradlew assembleDebug

Entonces puedes encontrar tu apk aquí:

cd app/build/outputs/apk/
m4r00p
fuente
11
¿Y si hacer esto me da una gran pantalla roja cuando inicio la aplicación? (Nota: estoy ejecutando esto directamente después de la expulsión)
Simon Forsberg
2
@SimonForsberg si está utilizando react ^ 0.5, cambie el punto de entrada a index.js en lugar de App.js o index.android.js, react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug
d.bayo
3
No funciona, esto ordena construir una apk, pero esa apk no se ejecuta sin el servidor del empaquetador.
Vishal Chhodwani
1
Esto no va a funcionar, porque requiere un servidor de desarrollo
sheriff_paul
1
Tengo el mismo problema, al generar el APK de depuración, podría instalarlo, pero necesito el servidor de desarrollo, y cuando uso el APK de lanzamiento, no puedo instalarlo en mi teléfono, no sé qué está mal con él
aName
62

Última actualización

En su directorio de proyecto raíz

Asegúrese de que ya tiene el directorio android / app / src / main / assets / , si no crea un directorio, luego cree un nuevo archivo y guárdelo index.android.bundley coloque su archivo como este android / app / src / main / assets / index.android .haz

Después de eso corre esto

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/

cd android && ./gradlew assembleDebug

Luego puede acceder apka app / build / salidas / apk / debug / app-debug.apk

Jeeva
fuente
Esta respuesta está realmente trabajando, muchas gracias,
unNombre
Esta respuesta está realmente trabajando, muchas gracias,
unNombre
@ jeeva: ¿cómo conectar la aplicación de nuevo al servidor de desarrollo de react native?
Mayur Baldha
El punto que crea index.android.bundlees realmente importante para no usar el servidor de desarrollo en el host.
Lee Elton
@ Mayur Balha: puede volver a conectarse a través de usb o wifi (conectado en la misma red). Para WiFi, conéctese de nuevo al servidor en su aplicación de reacción, agite su móvil en el emulador, presione Win + R y luego haga clic en configuración de desarrollo Desplácese hacia abajo "Debug Server Host & Port" ingrese su dirección IP y puerto (en Windows abra cmd ingrese "ipconfig" o Mac abra terminal ingrese "ifconfig") como 192.168.1.1:8080 luego presione ok nuevamente agite o presione Win + R para emulador presione recargar ahora puede ver la aplicación conectarse de nuevo al desarrollo (solo funcionará para Debug no para Release Apk).
Jeeva
29

Conmigo, en el directorio del proyecto ejecute los siguientes comandos.

Para la versión antigua nativa de reacción (verá index.android.js en la raíz):

mkdir -p android/app/src/main/assets && rm -rf android/app/build && 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 && cd android && ./gradlew clean assembleRelease && cd ../

Para reaccionar nueva versión nativa (solo ve index.js en la raíz):

mkdir -p android/app/src/main/assets && rm -rf android/app/build && 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 && cd android && ./gradlew clean assembleRelease && cd ../

El archivo apk se generará en:

  • Gradle <3.0: android / app / build / salidas / apk /
  • Gradle 3.0+: android / app / build / salidas / apk / release /
Nhan Cao
fuente
¿Puedes por favor elaborar un poco y cómo resuelve el problema?
Priyal
Recibí un error al abrir en index.android.bundle, y lo resolví por su sugerencia. Gracias ... :)
zephyr
66
Para mí es$ mkdir -p android/app/src/main/assets && rm -rf android/app/build && 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 && cd android && ./gradlew assembleDebug
Arif
Archivo no encontrado: index.android.js en cualquiera de las raíces del proyecto
Anuj
1
Tenga en cuenta que --entry-file index.android.jsdebe reemplazarse --entry-file index.jspor proyectos más nuevos que tengan en index.jslugar de index.android.jsen la raíz de su directorio de proyectos.
Daka
8

Después de seguir la primera respuesta , puede ejecutar su aplicación usando

react-native run-android --variant=debug

Y su aplicación se ejecutará sin necesidad del empaquetador

Abdellah Alaoui
fuente
1
la respuesta más simple fue la más eficiente todo el tiempo, funcionó sin problemas, pasó días probando diferentes líneas de comando y toneladas de configuraciones js, y todo se reanudó en esto
Nicolas Silva el
4

A partir de react-native 0.57, ninguna de las respuestas proporcionadas anteriormente funcionará más, ya que los directorios en los que Gradle espera encontrar el paquete y los activos han cambiado.

Forma simple sin paquete react-native

La forma más sencilla de crear una compilación de depuración es sin usar el react-native bundlecomando, sino simplemente modificando su app/build.gradlearchivo.

Dentro del project.ext.reactmapa en el app/build.gradlearchivo, agregue la bundleInDebug: trueentrada. Si desea que no sea una --devcompilación (sin advertencias y paquete minimizado), también debe agregar la devDisabledInDebug: trueentrada al mismo mapa.

Con el paquete react-native

Si por alguna razón necesita o desea usar el react-native bundlecomando para crear el paquete y luego ./gradlew assembleDebugcrear el APK con el paquete y los activos, debe asegurarse de colocar el paquete y los activos en las rutas correctas, donde gradle puede Encuéntralos.

A partir de react-native 0.57, esas rutas son android/app/build/generated/assets/react/debug/index.android.jspara el paquete

y android/app/build/generated/res/react/debugpara los activos. Entonces, los comandos completos para agrupar y compilar manualmente el APK con el paquete y los activos son:

react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/generated/assets/react/debug/index.android.bundle --assets-dest ./android/app/build/res/react/debug

y entonces

./gradlew assembleDebug

Paquete y ruta de activos

Tenga en cuenta que las rutas donde Gradle busca el paquete y los activos pueden estar sujetas a cambios. Para saber dónde están esas rutas, mire el react.gradlearchivo en su node_modules/react-nativedirectorio. Las líneas que comienzan con def jsBundleDir =y def resourcesDir =especifican los directorios donde Gradle busca el paquete y los activos respectivamente.

TheBaj
fuente
3

Para usuarios de Windows si todos los pasos se siguieron correctamente a partir de esto: https://facebook.github.io/react-native/docs/signed-apk-android.html

Solo necesitas ejecutar: gradlew assembleRelease

Y tu archivo será:

  • app-release.apk
  • app-release-unaligned.apk

Ubicación: E:\YourProjectName\android\app\build\outputs\apk

Dharam Mali
fuente
Puede instalar / compartir app-release.apk en cualquier dispositivo
Dharam Mali
2
Por lo general, la compilación de depuración tiene una configuración diferente a la compilación de lanzamiento (por ejemplo, utiliza una API de preparación). Esto no ayuda si desea un APK independiente que use una configuración de compilación diferente del lanzamiento
Josh
Este APK es solo para fines de desarrollo / prueba.
Dharam Mali
3

Estoy en reaccionar nativo 0.55.4, básicamente tuve que agrupar manualmente:

react-native bundle --dev false --platform android --entry-file index.js --bundle- 
output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets- 
dest ./android/app/build/intermediates/res/merged/debug

Luego conecte su dispositivo a través de usb, habilite la depuración de usb. Verifique el dispositivo conectado con adb devices.

Por último, ejecute react-native run-androidlo que instalará el apk de depuración en su teléfono y puede ejecutarlo bien con el servidor de desarrollo

Nota:

  • Desde 0.49.0, el punto de entrada es un solo index.js
  • gradlew assembleRelease solo genera los apks de lanzamiento sin firmar que no se pueden instalar
Shem Leong
fuente
3

Puede ser posible generar una versión apk sin firmar con fines de prueba para que pueda ejecutar en su móvil.

Inicialmente obtuve los errores de pantalla roja como los más mencionados aquí. pero seguí lo mismo que se mencionó aquí y funcionó para mí.

En su consola desde el directorio de trabajo, ejecute estos cuatro comandos

react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

cd android

gradlew assembleDebug

gradlew assembleRelease

Y luego el archivo APK se producirá en: android \ app \ build \ salidas \ apk \ debug \ app-debug.apk

usuario3195905
fuente
3

En caso de que alguien más esté teniendo este mismo problema recientemente, estoy usando React Native 0.59.8 (también probado con RN 0.60) y puedo confirmar algunas de las otras respuestas, estos son los pasos:

  1. Desinstale la última versión compilada de su aplicación instalada que tiene en su dispositivo

  2. correr 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

  3. correr cd android/ && ./gradlew assembleDebug

  4. Obtenga su app-debug.apk en la carpeta android / app / build / salidas / apk / debug

¡buena suerte!

HugoRMR
fuente
1
¡¡¡No funciona !!!, genera el APK de depuración, pero la aplicación todavía necesita el servidor de desarrollo
aName
Esto no puede funcionar en react-native 0.59.8, ya que gradle espera que el paquete esté en android/app/build/generated/assets/react/debug/index.android.jsy los activos estén en android/app/build/generated/res/react/debugreact-native 0.57.
TheBaj
Funciona bien para reaccionar nativo 0.60>
Moso Akinyemi
0

Encontré una solución cambiando buildTypes como este:

buildTypes {
  release {
    signingConfig signingConfigs.release
  }
}
sumit kumar pradhan
fuente