Compilare e installare apk senza segno sul dispositivo senza il server di sviluppo?


166

Dato che sono nuovo in reattivo, quindi se c'è qualcosa di sbagliato nei passaggi fammelo sapere.

Ho creato un'app Android nativa reattiva usando il comando come da documentazione

android nativo di reazione

durante l'esecuzione sul dispositivo è stato utilizzato il seguente comando

reatt-native run-android

che mi dà l'output di 2 file apk nella mia cartella progetto / android / app / build / output / apk

inserisci qui la descrizione dell'immagine

ora quando uso per installare questo apk dopo l'installazione, mi viene richiesto di connettere un server di sviluppo per raggruppare JS. Ma il mio requisito è che l'utente non debba lottare con il server di sviluppo, deve solo installare l'apk e tutto è fatto.

Sono state esaminate alcune domande di StackOverflow sullo ma non sono utili per creare un apk senza segno che non richiede un server di sviluppo.

Ragazzi, potete aiutarmi a trovare il modo in cui costruire e sbloccare l'apk in Reazione nativa?


1
Esegui 'Reazione nativa di reazione', server il tuo pacchetto js in modalità di sviluppo. Lo scopo è quindi di poter modificare i file js al volo. Utilizzare la modalità di rilascio non richiede alcun server in quanto includerà il pacchetto necessario con esso. Vedi risposta sotto
kar

Risposte:


250

È necessario creare manualmente il bundle per una build di debug.

Build di debug del bundle:

#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

Quindi per creare l'APK dopo il raggruppamento:

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

PS Un altro approccio potrebbe essere quello di modificare gli script gradle.


3
Nel caso in cui manchi qualcosa: questo ha funzionato per me--assets-dest ./android/app/src/main/res/
Juan Solano,

11
E se questo mi dà una grande schermata rossa quando avvio l'app? (Nota: lo sto eseguendo direttamente dopo l'espulsione)
Simon Forsberg,

3
Come costruire build per l'ultima versione perché non abbiamo index.android.js?
Vivek,

9
Persone con l'ultima versione, si prega di cambiare il punto di ingresso in --entry-file index.js, grazie.
Rishabh Bhatia,

4
bundle reazioni-native --dev false --piattaforma 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 per la nuova versione reattiva in cui index.js è unificato per ios e android
ir2pid

101

Si prega di seguire questi passaggi.

Bundle your js:

se hai root.android.js nella radice del progetto, esegui

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

se si dispone di index.js nella radice del progetto, quindi eseguire

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

Crea apk di debug:

cd android/
./gradlew assembleDebug

Quindi puoi trovare il tuo apk qui:

cd app/build/outputs/apk/

11
E se questo mi dà una grande schermata rossa quando avvio l'app? (Nota: lo sto eseguendo direttamente dopo l'espulsione)
Simon Forsberg,

2
@SimonForsberg se si utilizza la reazione ^ 0.5, modificare il punto di ingresso in index.js anziché 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
Non funziona, questo comando crea un apk ma quell'apk non è in esecuzione senza il server packager.
Vishal Chhodwani,

1
Questo non funzionerà, perché richiede un server di sviluppo
sheriff_paul,

1
Sto riscontrando lo stesso problema, quando si genera l'APK di debug, è possibile installarlo, ma ho bisogno del server dev e quando utilizzo l'APK di rilascio non riesco a installarlo sul mio telefono, non so cosa è sbagliato con esso
aName

62

Ultimo aggiornamento

Nella directory del progetto principale

Assicurati di avere già la directory android / app / src / main / assets / , se non crea la directory, dopodiché crea un nuovo file e salva come index.android.bundlee inserisci il tuo file come questo android / app / src / main / assets / index.android .bundle

Dopo quello esegui questo

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

Quindi puoi accedere apka app / build / output / apk / debug / app-debug.apk


Questa risposta è davvero lavorando, vi ringrazio molto,
aName

Questa risposta è davvero lavorando, vi ringrazio molto,
aName

@jeeva: come ricollegare l'applicazione al server di sviluppo di reagire nativo?
Mayur Baldha,

Il punto che crea index.android.bundleè davvero importante per non usare il server di sviluppo nell'host.
Lee Elton

@ Mayur Balha: è possibile riconnettersi tramite USB o Wi-Fi (connesso sulla stessa rete). Per il WiFi, riconnettiti al server nella tua app di reazione, agita il tuo cellulare sull'emulatore, premi Win + R, quindi fai clic su Impostazioni dev Scorri verso il basso "Porta e porta server di debug" inserisci il tuo indirizzo IP e la tua porta (su windows apri cmd inserisci "ipconfig" o Mac ap inserisci "ifconfig") come 192.168.1.1:8080 quindi premi di nuovo ok scuoti o Premi Win + R per l'emulatore premi ricarica ora puoi vedere l'app ricollegarsi allo sviluppo (Funzionerà solo per Debug non per Release Apk).
Jeeva

29

Con me, nella directory del progetto esegui i seguenti comandi.

Per reagire alla vecchia versione nativa (vedrai index.android.js nella radice):

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

Per reagire alla nuova versione nativa (vedi root.js nella radice):

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

Il file apk verrà generato in:

  • Grado <3.0: android / app / build / output / apk /
  • Grado 3.0+: android / app / build / output / apk / release /

puoi per favore elaborare un po 'e come risolve il problema?
Priyal

Ho riscontrato un errore durante l'apertura in index.android.bundle e risolto dal tuo suggerimento. Grazie ... :)
Zephyr

6
Per me lo è$ 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,

File non trovato: index.android.js in una delle radici del progetto
Anuj

1
Si noti che --entry-file index.android.jsdeve essere sostituito con --entry-file index.jsper i progetti più recenti che hanno index.jsinvece index.android.jsnella radice della loro directory di progetto.
daka,

8

Dopo aver seguito la prima risposta , puoi eseguire l'app usando

react-native run-android --variant=debug

E la tua app verrà eseguita senza bisogno del packager


1
la risposta più semplice è stata la più efficiente da sempre, ha funzionato perfettamente, ha passato giorni a testare diverse linee di comando e tonnellate di configurazioni js, e tutto è ripreso in questo
Nicolas Silva,

4

A partire da 0,57 nativo di reazione, nessuna delle risposte fornite in precedenza funzionerà più, poiché le directory in cui Gradle prevede di trovare il pacchetto e le risorse sono cambiate.

Modo semplice senza bundle reattivo

Il modo più semplice per compilare una build di debug è senza usare il react-native bundlecomando, ma semplicemente modificando il app/build.gradlefile.

All'interno della project.ext.reactmappa nel app/build.gradlefile, aggiungi la bundleInDebug: truevoce. Se vuoi che non sia una --devbuild (nessun avviso e bundle minimizzato), dovresti anche aggiungere la devDisabledInDebug: truevoce alla stessa mappa.

Con bundle reattivo nativo

Se per qualche motivo è necessario o si desidera utilizzare il react-native bundlecomando per creare il pacchetto e quindi ./gradlew assembleDebugper creare l'APK con il pacchetto e le risorse, assicurarsi di inserire il pacchetto e le risorse nei percorsi corretti, dove gradle può trovali.

A partire android/app/build/generated/assets/react/debug/index.android.jsdallo 0,57 di reazione nativo quei percorsi sono per il bundle

e android/app/build/generated/res/react/debugper i beni. Quindi i comandi completi per raggruppare manualmente e creare l'APK con il pacchetto e le risorse sono:

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

e poi

./gradlew assembleDebug

Pacchetto e percorso delle risorse

Si noti che i percorsi in cui Gradle cerca il pacchetto e le risorse potrebbero essere soggetti a modifiche. Per scoprire dove si trovano quei percorsi, guarda il react.gradlefile nella tua node_modules/react-nativedirectory. Le righe che iniziano con def jsBundleDir =e def resourcesDir =specificano le directory in cui Gradle cerca rispettivamente il pacchetto e le risorse.


3

Per l'utente Windows se tutti i passaggi sono seguiti correttamente da questo: https://facebook.github.io/react-native/docs/signed-apk-android.html

Devi solo eseguire: gradlew assembleRelease

E il tuo file sarà:

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

Posizione: E:\YourProjectName\android\app\build\outputs\apk


Puoi installare / condividere app-release.apk su qualsiasi dispositivo
Dharam Mali

2
Di solito, la build di debug ha una configurazione diversa rispetto alla build di rilascio (ad esempio, utilizza un'API di gestione temporanea). Questo non aiuta se si desidera un APK autonomo che utilizza una configurazione di build diversa dalla versione
Josh,

Questo APK è solo a scopo di sviluppo / test.
Dharam Mali,

3

Sono reattivo su 0.55.4 nativo, in pratica ho dovuto raggruppare 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

Quindi collegare il dispositivo tramite USB, abilitare il debug USB. Verificare il dispositivo collegato con adb devices.

Infine esegui react-native run-androidche installerà l'apk di debug sul tuo telefono e puoi eseguirlo bene con il server dev

Nota:

  • Da 0.49.0, il punto di accesso è un singolo index.js
  • gradlew assembleRelease genera solo gli apk senza firma che non possono essere installati

3

Può essere possibile generare una versione apk non firmata a scopo di test in modo da poter eseguire sul tuo telefonino.

Inizialmente ho ricevuto gli errori dello schermo rosso come più menzionato qui. ma ho seguito lo stesso che è stato menzionato qui e ha funzionato per me.

Sulla tua console dalla directory di lavoro, esegui questi quattro comandi

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

E quindi il file APK produrrà su: android \ app \ build \ output \ apk \ debug \ app-debug.apk


3

Nel caso in cui qualcun altro abbia recentemente riscontrato questo stesso problema, sto usando React Native 0.59.8 (testato anche con RN 0.60) e posso confermare alcune delle altre risposte, ecco i passaggi:

  1. Disinstallare l'ultima versione compilata dell'app installata sul dispositivo

  2. Correre 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. correre cd android/ && ./gradlew assembleDebug

  4. Ottieni la tua app-debug.apk nella cartella android / app / build / output / apk / debug

in bocca al lupo!


1
Non funziona !!!, genera l'APK di debug, ma l'app necessita ancora del server dev
aName

Questo non può funzionare con 0,59,8 reattivo, poiché Gradle si aspetta che il bundle sia presente android/app/build/generated/assets/react/debug/index.android.jse che le risorse siano presenti android/app/build/generated/res/react/debugcome reattivo 0,57.
TheBaj

Funziona bene per reagire nativo 0.60>
Moso Akinyemi,

0

Ho trovato una soluzione cambiando buildTypes in questo modo:

buildTypes {
  release {
    signingConfig signingConfigs.release
  }
}
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.