Skompilować i zainstalować niepodpisany apk na urządzeniu bez serwera programistycznego?


166

Ponieważ jestem nowy w React-Native, więc jeśli coś jest nie tak w krokach, daj mi znać.

Zbudowałem natywną aplikację na Androida, używając polecenia zgodnie z dokumentacją

Natywny Android

podczas pracy na urządzeniu użyto następującego polecenia

reaguj natywnym run-android

co daje mi wyjście 2 plików apk w moim folderze projektów / android / app / build / output / apk

wprowadź opis obrazu tutaj

teraz, kiedy używam do zainstalowania tego apk po instalacji, prosi on o połączenie serwera programistycznego w celu dołączenia JS. Ale moim wymaganiem jest to, aby użytkownik nie musiał walczyć z serwerem programistycznym, tylko musi zainstalować apk i wszystko jest gotowe.

Przeszedłem przez kilka pytań dotyczących przepływu stosów, ale nie były pomocne przy tworzeniu niepodpisanego apk, który nie wymaga serwera programistycznego.

Czy możecie mi pomóc znaleźć sposób, w jaki można zbudować i niepodpisany apk w reagowaniu natywnym?


1
Uruchom `` start reaktywny '', będzie serwerować pakiet js w trybie programistycznym. Celem jest, abyś mógł edytować pliki js w locie. Tryb wydania nie wymaga żadnego serwera, ponieważ będzie zawierał niezbędny pakiet. Zobacz odpowiedź poniżej
kar

Odpowiedzi:


250

Musisz ręcznie utworzyć pakiet dla kompilacji debugowania.

Kompilacja debugowania pakietu:

#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

Następnie, aby zbudować pakiet APK po pakowaniu:

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

PS Innym podejściem może być modyfikacja skryptów gradle.


3
Na wypadek, gdyby komuś brakowało aktywów: to zadziałało dla mnie--assets-dest ./android/app/src/main/res/
Juan Solano

11
A jeśli to spowoduje wyświetlenie dużego czerwonego ekranu po uruchomieniu aplikacji? (Uwaga: uruchamiam to bezpośrednio po wyrzuceniu)
Simon Forsberg

3
Jak pobrać wersję dla najnowszej wersji, ponieważ nie mamy pliku index.android.js?
Vivek,

9
Osoby z najnowszą wersją prosimy o zmianę punktu wejścia na --entry-file index.js, dzięki.
Rishabh Bhatia

4
pakiet 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 / interactates / res / scaled / debug dla nowej wersji reaktywnej, w której index.js jest ujednolicony dla
systemów iOS

101

Wykonaj te kroki.

Dołącz swój js:

jeśli masz index.android.js w katalogu głównym projektu, uruchom

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

jeśli masz plik index.js w katalogu głównym projektu, uruchom

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

Utwórz plik APK do debugowania:

cd android/
./gradlew assembleDebug

Następnie możesz znaleźć swój apk tutaj:

cd app/build/outputs/apk/

11
A jeśli to spowoduje wyświetlenie dużego czerwonego ekranu po uruchomieniu aplikacji? (Uwaga: uruchamiam to bezpośrednio po wyrzuceniu)
Simon Forsberg

2
@SimonForsberg, jeśli używasz reakcji ^ 0.5, zmień punkt wejścia na index.js zamiast App.js lub 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
Nie działa, to polecenie buduje apk, ale ten apk nie działa bez serwera pakującego.
Vishal Chhodwani,

1
To nie zadziała, ponieważ wymaga serwera
deweloperskiego

1
Mam ten sam problem, podczas generowania debug-APK mogłem go zainstalować, ale potrzebuję serwera deweloperskiego, a kiedy używam wydania APK, nie mogłem go zainstalować na swoim telefonie, nie wiem co jest z tym źle
aName

62

Najnowsza aktualizacja

W głównym katalogu projektu

Upewnij się, że masz już katalog android / app / src / main / asset / , jeśli nie, utwórz katalog, po tym utwórz nowy plik i zapisz jako index.android.bundlei umieść plik w tym android / app / src / main / asset / index.android .pakiet

Następnie uruchom to

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

Następnie można uzyskać apkw app / Build / wyjść / apk / debug / app-debug.apk


Ta odpowiedź naprawdę działa, dziękuję bardzo,
nazwa,

Ta odpowiedź naprawdę działa, dziękuję bardzo,
nazwa,

@jeeva: jak ponownie połączyć aplikację z serwerem deweloperskim w React Native?
Mayur Baldha,

Punkt, który tworzysz, index.android.bundlejest naprawdę ważny, aby nie używać serwera programistycznego na hoście.
Lee Elton

@ Mayur Balha: Możesz połączyć się z powrotem przez USB lub Wi-Fi (podłączone do tej samej sieci). Aby połączyć się z serwerem z powrotem w aplikacji React potrząśnij telefonem na emulatorze naciśnij Win + R następnie kliknij ustawienia deweloperskie Przewiń w dół "Debug Server Host & Port" wprowadź swój adres IP i port (w Windows otwórz cmd wpisz "ipconfig" lub Mac open terminal wpisz „ifconfig”), np. 192.168.1.1:8080, a następnie naciśnij ponownie ok, potrząśnij lub naciśnij klawisz Win + R, aby uruchomić emulator, naciśnij ponownie załaduj, teraz możesz zobaczyć połączenie aplikacji z powrotem do programowania (będzie działać tylko dla debugowania, a nie dla wydania apk).
Jeeva

29

Ze mną w katalogu projektu uruchom następujące polecenia.

Dla Reaguj natywnej starej wersji (zobaczysz index.android.js w katalogu głównym):

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

Dla nowej wersji reaktywnej (po prostu zobacz index.js w katalogu głównym):

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

Plik APK zostanie wygenerowany pod adresem:

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

czy możesz trochę rozwinąć i jak to rozwiązuje problem?
Priyal

Pojawił się błąd podczas otwierania w index.android.bundle i rozwiązałem go zgodnie z twoją sugestią. Dziękuję ... :)
zephyr

6
Dla mnie to jest$ 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

Nie znaleziono pliku: index.android.js w żadnym z korzeni projektu
Anuj,

1
Należy pamiętać, że --entry-file index.android.jsw --entry-file index.jsprzypadku nowszych projektów, które index.jszamiast index.android.jsw katalogu głównym ich projektów , należy je zastąpić .
daka

8

Po wykonaniu pierwszej odpowiedzi możesz uruchomić aplikację za pomocą

react-native run-android --variant=debug

Twoja aplikacja będzie działać bez programu pakującego


1
najprostsza odpowiedź była najbardziej wydajna przez cały czas, działała bezbłędnie, spędził dni na testowaniu różnych linii poleceń i ton konfiguracji js, a wszystko zostało wznowione w tym
Nicolas Silva

4

Od respons-native 0.57 żadna z wcześniej podanych odpowiedzi nie będzie już działać, ponieważ katalogi, w których gradle spodziewa się znaleźć paczkę i zasoby uległy zmianie.

Prosty sposób bez pakietu reagującego

Najprostszym sposobem zbudowania kompilacji do debugowania jest react-native bundlecałkowite bez użycia polecenia, ale po prostu zmodyfikowanie app/build.gradlepliku.

Wewnątrz project.ext.reactmapy w app/build.gradlepliku dodaj bundleInDebug: truewpis. Jeśli chcesz, aby nie była to --devkompilacja (bez ostrzeżeń i zminimalizowanego pakietu), powinieneś również dodaćdevDisabledInDebug: true wpis do tej samej mapy.

Z pakietem React-Native

Jeśli z jakiegoś powodu potrzebujesz lub chcesz użyć react-native bundlepolecenia, aby utworzyć pakiet, a następnie, ./gradlew assembleDebugaby utworzyć APK z pakietem i zasobami, musisz upewnić się, że pakiet i zasoby są umieszczone we właściwych ścieżkach, gdzie gradle może znajdź je.

W przypadku responsywności 0.57 te ścieżki są android/app/build/generated/assets/react/debug/index.android.js dla pakietu

i android/app/build/generated/res/react/debugmajątku. Tak więc pełne polecenia do ręcznego łączenia i budowania pakietu APK z pakietem i zasobami to:

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

i wtedy

./gradlew assembleDebug

Pakiet i ścieżka zasobów

Zwróć uwagę, że ścieżki, w których Gradle szuka pakietu i zasobów, mogą ulec zmianie. Aby dowiedzieć się, gdzie są te ścieżki, spójrz na react.gradleplik w swoim node_modules/react-nativekatalogu. Wiersze zaczynające się od def jsBundleDir =i def resourcesDir =określają katalogi, w których gradle szuka odpowiednio pakietu i zasobów.


3

Dla użytkownika systemu Windows, jeśli wszystkie kroki zostały wykonane prawidłowo: https://facebook.github.io/react-native/docs/signed-apk-android.html

Musisz tylko uruchomić: gradlew assembleRelease

Twój plik będzie:

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

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


Możesz zainstalować / udostępnić app-release.apk na dowolnym urządzeniu
Dharam Mali

2
Zwykle kompilacja debugowania ma inną konfigurację niż kompilacja wydania (np. Wykorzystuje pomostowy interfejs API). To nie pomaga, jeśli potrzebujesz samodzielnego pliku APK, który używa innej konfiguracji kompilacji niż wersja
Josh

Ten plik APK jest przeznaczony tylko do programowania / testowania.
Dharam Mali

3

Jestem na reagowaniu natywnym 0.55.4, w zasadzie musiałem spakować ręcznie:

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

Następnie podłącz urządzenie przez USB, włącz debugowanie USB. Sprawdź podłączone urządzenie za pomocą adb devices.

Wreszcie biegnij react-native run-android który zainstaluje apk debugowania na twoim telefonie i możesz go dobrze uruchomić na serwerze deweloperskim

Uwaga:

  • Od 0.49.0 punkt wejścia jest pojedynczy index.js
  • gradlew assembleRelease generuje tylko apki bez znaku wydania, których nie można zainstalować

3

Możliwe jest wygenerowanie niepodpisanej wersji apk do celów testowych, aby można było uruchomić ją na telefonie komórkowym.

Początkowo otrzymałem błędy czerwonego ekranu, jak większość wspomniano tutaj. ale poszedłem za tym samym, o którym wspomniano tutaj i zadziałało to dla mnie.

Na konsoli z katalogu roboczego uruchom te cztery polecenia

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

Następnie plik APK zostanie utworzony na: android \ app \ build \ output \ apk \ debug \ app-debug.apk


3

Na wypadek, gdyby ktoś inny zaczął ostatnio zajmować się tym samym problemem, używam React Native 0.59.8 (testowany również z RN 0.60) i mogę potwierdzić niektóre inne odpowiedzi, oto kroki:

  1. Odinstaluj najnowszą skompilowaną wersję aplikacji zainstalowanej na urządzeniu

  2. Biegać 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. biegać cd android/ && ./gradlew assembleDebug

  4. Pobierz plik app-debug.apk w folderze android / app / build / output / apk / debug

powodzenia!


1
Nie działa !!!, generuje plik APK do debugowania, ale aplikacja nadal potrzebuje serwera
deweloperskiego

To nie może działać w przypadku natywnego reagowania 0.59.8, ponieważ gradle oczekuje, że pakiet będzie dostępny, android/app/build/generated/assets/react/debug/index.android.jsa zasoby będą dostępne w android/app/build/generated/res/react/debugnatywnym reagowaniu 0.57.
TheBaj

Działa dobrze w przypadku reaktywnego natywnego 0,60>
Moso Akinyemi

0

Znalazłem rozwiązanie zmieniające typy buildType takie jak:

buildTypes {
  release {
    signingConfig signingConfigs.release
  }
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.