Come posso generare un apk che può essere eseguito senza server con reagente nativo?


211

Ho creato la mia app, posso eseguirla sul mio emulatore locale (e anche sul mio dispositivo Android all'interno della stessa rete cambiando il server di debug).

Tuttavia, desidero creare un APK che posso inviare a qualcuno senza accesso al server di sviluppo e voglio che siano in grado di testare l'applicazione.

Vedo che c'è una sezione Utilizzo del bundle offline nella sezione iOS della documentazione. Ma non sono riuscito a capire come realizzare lo stesso per Android. È possibile? Se é cosi, come?

AGGIORNAMENTO: Sulla risposta a questa domanda ( Android non è riuscito a caricare il pacchetto JS ) si dice che il pacchetto offline può essere scaricato dal server di sviluppo. Ma quando ottengo il pacchetto dal server di sviluppo non è possibile caricare i file di immagine.


Risposte:


204

Dopo la risposta di Aditya Singh l'apk generato (non firmato) non si installava sul mio telefono. Ho dovuto generare un apk firmato usando le istruzioni qui .

Per me ha funzionato:

$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

Posizionare il my-release-key.keystorefile nella android/app directory nella cartella del progetto. Quindi modificare il file ~/.gradle/gradle.propertiese aggiungere quanto segue (sostituire **** con la password del keystore, l'alias e la password della chiave corretti)

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=****
MYAPP_RELEASE_KEY_PASSWORD=****

Se stai usando MacOS, puoi memorizzare la tua password nel portachiavi usando le istruzioni qui invece di memorizzarla in testo normale.

Quindi modifica app / build.gradle e assicurati che ci siano le seguenti (potrebbe essere necessario aggiungere le sezioni con signingConfigs signingConfig):

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

Quindi esegui il comando cd android && ./gradlew assembleRelease,

Per Windows "cd android", quindi esegui il gradlew assembleReleasecomando e trova l' apk firmato sottoandroid/app/build/outputs/apk/app-release.apk


10
Questa è la risposta più aggiornata e accurata. Grazie.
Gokhan Sari,

2
app-release.apk non si sta installando. quale sarebbe il problema?
Balasubramanian,

1
Creo l'apk, carico su Google Play, ma non funziona ... qualche suggerimento?
Italo Rodrigo,

2
Non riesco a trovare la cartella android / app, dove si trova?
DHLopez,

6
Grazie, non lo era, ma l'ho scoperto perché sto usando expo per i test e la creazione di un'app nativa npm ha una struttura diversa, quindi per riferimento futuro, se qualcuno dovesse riscontrare questo problema, basta espellere il progetto e poi si ottiene quelle cartelle, divertente come il tutorial ti dice di usare npm per creare l'app, e poi parla di una struttura che non esiste quando la usi
DHLopez,

194

Dovrai creare una chiave per firmare l'apk. Usa sotto per creare la tua chiave:

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

Utilizzare una password quando richiesto

Una volta generata la chiave, usala per generare la build installabile:

 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 build usando gradle

 cd android && ./gradlew assembleRelease

Carica l'APK sul tuo telefono. Il -rflag sostituirà l'app esistente (se esiste)

adb install -r ./app/build/outputs/apk/app-release-unsigned.apk

Una descrizione più dettagliata è menzionata qui: https://facebook.github.io/react-native/docs/signed-apk-android.html

AGGIORNAMENTO : Basato sui commenti di @shashuec e @Fallen

se ricevi un errore

ENOENT: nessun file o directory di questo tipo, apri "android / app / src / main / assets / index.android.bundle"

eseguire mkdir android / app / src / main / assets


4
Grazie mille per questo, ha funzionato per me. L'unico problema che ho riscontrato è stato questo messaggio: "Argomenti mancanti mancanti: output bundle" nella parte reagire-nativo-bundle, ma è stato risolto eliminando i 2 simboli "\"
guinunez,

59
Sono sorpreso dalla scarsa documentazione di Facebook in cui hanno omesso totalmente la react-native bundleparte. Grazie per la tua risposta!
tecnophyle

2
Sto lavorando con Windows, funziona anche con questo gradlew.bat assembleRelease.
Tabares,

12
Ottengo questo errore Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] . quando provo a installare l'apk.
Developernaren

18
se si ottiene l'errore ENOENT: no such file or directory, open 'android/app/src/main/assets/index.android.bundle' runmkdir android/app/src/main/assets
shashuec

31

Dovresti semplicemente usare Android Studio per questo processo. È solo più semplice. Ma prima esegui questo comando nella tua directory delle app native di reazione:

Per la versione più recente di reattivo nativo (ad es. Reagire nativo 0.49.0 e così via ...)

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

Per la versione precedente di reagente nativo (0.49.0 e precedenti)

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/

Quindi usa android studio per aprire la cartella 'android' nella tua cartella dell'app nativa, ti chiederà di aggiornare Gradle e altre cose. vai a build-> Genera APK firmato e segui le istruzioni da lì. È davvero semplice.


Uso anche Android Studio e Xcode per creare versioni di rilascio per le mie app React Native ... ma la generazione di Android potrebbe essere eseguita con uno script come descritto da @Aditya Singh
WiRa,

Questo non è più necessario proandroiddev.com/…
onmyway133

30

Esegui questo comando:

react-native run-android --variant=release

Nota che --variant=releaseè disponibile solo se hai impostato la firma con cd android && ./gradlew assembleRelease.


@jasan Ho trovato un altro problema come il tuo qui: github.com/facebook/react-native/issues/11586 Questo potrebbe risolvere il problema: cd android && ./gradlew installRelease
Ahmed Ashraf

Ho provato a cd android && ./gradlew installReleaseottenere questo erroreTask 'assembleRelease.' not found in root project 'project'. Some candidates are: 'assembleRelease'.
Thomas Reggi

Sì, devi generare il file Keystore. e modifica il file gradle. Segui queste istruzioni per risolvere questo problema. facebook.github.io/react-native/docs/signed-apk-android.html
Ahmed Ashraf

21

per React Native 0.49 e oltre

dovresti andare nella directory di progetto sul terminale ed eseguire quel comando

1 - mkdir android/app/src/main/assets
2 - 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

se inferiore a 0,49

  1 - mkdir android/app/src/main/assets
  2 - 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

Quindi usa android studio per aprire la cartella 'android' nella tua cartella dell'app nativa, ti chiederà di aggiornare Gradle e altre cose. vai a build-> Genera APK firmato e segui le istruzioni da lì. Quel okey.


Questo è un modo semplice per farlo se hai Android Studio installato (che si occuperà dell'utilizzo o della creazione del Keystore). Grazie.
leosok,

Ehi .. hai una domanda veloce .. sono necessari i passaggi sopra indicati? Il documento nativo reattivo non lo menziona da nessuna parte ..
pravin

1
@pravin non è richiesto, è uno dei metodi di generazione dell'apk.
Yasin Ugurlu,

12

Se ottieni Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES].

Ho provato a utilizzare il metodo di @ Aditya per generare un file APK senza segno e installarlo, ma quando sono andato a installarlo sul mio tablet Android, mi ha dato un errore di Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES].

Immagino che ciò sia dovuto al fatto che il file APK non è stato firmato e il tablet non è stato soddisfatto. Quindi, dopo aver generato il file bundle React Native sono stato in grado di generare un file APK firmato, come di consueto, tramite Android Studio.

A proposito, la nostra app è un'app Android perfettamente funzionante che esiste già nel Play Store e stiamo solo aggiungendo React Native ad esso in pezzi di dimensioni ridotte, perché è fantastico.

Quindi per riassumere, ecco i miei passi:

1) Genera pacchetto nativo React:

react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/<your-package-name>/src/main/assets/index.android.bu‌​ndle --assets-dest android/<your-package-name>/src/main/res/ 

2) Genera un file APK firmato da Android Studio.

3) Installa il file APK firmato sul dispositivo USB:

adb -d install -r <path_to_signed_apk> 

La -dbandiera dice solo adbdi installare sul dispositivo USB collegato, nel caso in cui anche un emulatore sia in esecuzione. Se si desidera installare su qualsiasi emulatore, rilasciare il -dflag.

4) Profitto!


11

Prova di seguito, genererà un app-debug.apk nella cartella root / android / app / build / output / apk / debug

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

quindi vai alla cartella Android ed esegui

./gradlew assembleDebug


L'APK generato qui ha bisogno di Metro per funzionare ... quindi penso che
stia

11

Se qualcuno vuole costruire senza le chiavi del playstore, questo comando sarebbe molto utile.

# react-native run-android --variant=release

Dopo aver completato la compilazione puoi trovare l'apk nel file di build della versione.


7

Vai alla directory del progetto ed esegui il comando:

cd android && ./gradlew assembleRelease

Questo genererà un apk senza segno se non hai fatto la configurazione richiesta (come ha detto Pedram).
Gokhan Sari,

Creerà debug, rilascio e apk senza segno nella cartella generata. La mia intenzione era quella di condividere l'apk di rilascio.
Sidharth Taneja,

6

Se viene visualizzato un errore relativo a index.android.js. Questo perché stai usando la nuova versione nativa di React (sto usando 0.55.4) Sostituisci semplicemente "index.android.js" con "index.js"

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/

5

Ho un'altra soluzione: - Generazione di una chiave di firma È possibile generare una chiave di firma privata utilizzando keytool. Su Windows il keytool deve essere eseguito da C: \ Programmi \ Java \ jdkx.x.x_x \ bin.

$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

Posiziona il file my-release-key.keystore nella directory android / app nella cartella del progetto.

Modifica il file android / app / build.gradle nella cartella del tuo progetto e aggiungi la configurazione della firma,

android {
....
signingConfigs { 
  release { 

      storeFile file('my-release-key.keystore') 
      storePassword 'yourpassword' 
      keyAlias 'my-key-alias' 
      keyPassword 'yourpassword' 

  } 
}}}


buildTypes {release {signingConfig signingConfigs.release}}

e corri

gradlew assembleRelease

Questo ti darà due file su Android \ app \ build \ output \ apk app-release.apk e app-release-unsigned.apk ora installa l'app-release.apk sul tuo dispositivo Android.


Dov'è la cartella android \ app? Non lo vedo sotto il mio progetto (vedo solo node_modules e al suo interno non c'è Android / app)
DHLopez,

1
@DHLopez devi usare il puro progetto React Native per avere accesso alla cartella Android. Se stai usando Expo, devi staccare il progetto Expo usando espulsione expo.
fxbayuanggara,

5

Spero che possa aiutare i nuovi principianti

Doc ufficiale qui

Se non si dispone di un keystore che utilizzare prima del comando, altrimenti saltare

Generazione di una chiave di firma / file Keystore È possibile generare una chiave di firma privata utilizzando keytool. Su Windows il keytool deve essere eseguito da C: \ Programmi \ Java \ jdkx.x.x_x \ bin.

$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

otterrai un file come my-release-key.keystore

Impostazione delle variabili gradle Posizionare il file my-release-key.keystore nella directory android / app nella cartella del progetto. Modificare il file Android / gradle.properties e aggiungere il seguente (sostituire ***** con la password corretta chiavi, alias e password della chiave), enableAapt2 set falsa è soluzione alternativa, come la versione Android 3.0 Gradle problema

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=*****
MYAPP_RELEASE_KEY_PASSWORD=*****

android.enableAapt2=false

quindi aggiungi queste app / buid.gradle (app)

sotto la configurazione predefinita

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

e versione di rilascio Inside Build {}

 signingConfig signingConfigs.release

quindi esegui semplicemente questo comando nel terminale Android Studio I comandi di seguito automatizzeranno soprattutto tutte le risposte

se windows

cd android
gradlew assembleRelease

se linux / mac

$ cd android
$ ./gradlew assembleRelease

se hai qualche errore cancella tutta la cartella build ed esegui il comando

gradlew clean

di nuovo

gradlew assembleRelease

1
omg gradle clean... ho lottato con questo per un po 'ottenendo quegli errori di costruzione, grazie mille per questa risposta !!
secchione

5

Per le ultime versioni native di reazione per raggruppare il progetto

androide

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/

iOS

react-native bundle --entry-file index.js --platform ios --dev false --bundle-output ios/main.jsbundle --assets-dest ios


3

La modalità GUI in Android Studio

  • Fai aprire l'app Android dell'app React Native in Android Studio (questo significa semplicemente aprire la cartella Android del tuo progetto Rea-native con Android Studio)
  • Vai alla scheda "Crea" in alto
  • Vai su "Build Bundle (s) / APK (s)"
  • Quindi selezionare "Crea APK (s)"
  • Questo ti guiderà attraverso il processo di individuazione delle chiavi per firmare l'APK o la creazione delle chiavi se non le hai già, il che è molto semplice. Se ti stai semplicemente esercitando, puoi generare queste chiavi e salvarle sul desktop.
  • Una volta completato il processo e se la compilazione ha avuto esito positivo, ci sarà un popup in basso in Android Studio. Fare clic sul collegamento al suo interno che dice "individuare" (l'APK)
  • Questo ti porterà al file apk, spostalo sul tuo dispositivo Android. Quindi passare a quel file sul dispositivo Android e installarlo.

0

L'utilizzo di Android Studio per generare l'apk firmato per il progetto Android di Reade è anche un'opzione buona e facile, aprire il progetto Android di React in Android Studio e generare la sequenza di tasti e l'apk firmato.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.