Jak mogę wygenerować APK, który może działać bez serwera z React-Native?


210

Zbudowałem aplikację, mogę ją uruchomić na moim lokalnym emulatorze (a także na moim urządzeniu z Androidem w tej samej sieci, zmieniając serwer debugowania).

Chcę jednak zbudować pakiet APK, który mogę wysłać komuś bez dostępu do serwera programistycznego i chcę, aby mógł on testować aplikację.

Widzę, że jest sekcja Używanie pakietu offline w sekcji iOS dokumentacji. Ale nie mogłem wymyślić, jak to zrobić dla Androida. czy to możliwe? Jeśli tak to jak?

AKTUALIZACJA: W odpowiedzi na to pytanie ( Android nie załadował pakietu JS ) mówi się, że pakiet offline można pobrać z serwera programistycznego. Ale gdy otrzymam pakiet z serwera programowania, nie można załadować plików obrazów.


sprawdź ten prosty przykład, aby wygenerować plik apk: React Native Generate Release APK przez Windows Command Prompt Android
— sumit kumar pradhan

Odpowiedzi:


202

Po odpowiedzi Adityi Singh wygenerowany (niepodpisany) apk nie zainstaluje się na moim telefonie. Musiałem wygenerować podpisany apk, korzystając z instrukcji tutaj .

Dla mnie działało:

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

Umieść my-release-key.keystoreplik w android/app katalogu w folderze projektu. Następnie edytuj plik ~/.gradle/gradle.propertiesi dodaj następujące elementy (zastąp **** poprawnym hasłem do pliku kluczy, aliasem i hasłem klucza)

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

Jeśli używasz systemu MacOS, możesz przechowywać hasło w pęku kluczy, postępując zgodnie z instrukcjami tutaj, zamiast przechowywać je w postaci zwykłego tekstu.

Następnie edytuj aplikację / build.gradle i upewnij się, że są tam następujące (może być konieczne dodanie sekcji z 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
        }
    }
}
...

Następnie uruchom polecenie cd android && ./gradlew assembleRelease,

W systemie Windows „cd android”, a następnie uruchom gradlew assembleReleasepolecenie i znajdź podpisany apk podandroid/app/build/outputs/apk/app-release.apk


10
To najbardziej aktualna i dokładna odpowiedź. Dzięki.
— Gokhan Sari,

2
Aplikacja-release.apk nie instaluje się. jaki byłby problem?
— Balasubramanian

1
Tworzę apk, przesyłam do Google Play, ale to nie działa ... jakaś wskazówka?
— Italo Rodrigo,

2
Nie mogę znaleźć folderu Androida / aplikacji, gdzie to się znajduje?
— DHLopez

6
Dzięki, nie było, ale odkryłem, że to dlatego, że używam expo do testowania, a tworzenie aplikacji rodzimej npm ma inną strukturę, więc na wypadek potrzeby w przyszłości, jeśli ktoś dostanie ten problem, po prostu wysuń swój projekt, a następnie otrzymasz te foldery, zabawne, jak samouczek mówi Ci, jak używać npm do tworzenia aplikacji, a następnie mówi o strukturze, która nie istnieje, gdy z niej korzystasz
— DHLopez

193

Musisz utworzyć klucz, aby podpisać apk. Użyj poniżej, aby utworzyć swój klucz:

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

Po wyświetleniu monitu użyj hasła

Po wygenerowaniu klucza użyj go do wygenerowania instalowalnej kompilacji:

 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/

Wygeneruj kompilację za pomocą gradna

 cd android && ./gradlew assembleRelease

Prześlij pakiet APK na swój telefon. -rFlag zastąpi istniejącą aplikację (jeśli istnieje)

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

Bardziej szczegółowy opis znajduje się tutaj: https://facebook.github.io/react-native/docs/signed-apk-android.html

AKTUALIZACJA : Na podstawie komentarzy @shashuec i @Fallen

jeśli pojawi się błąd

ENOENT: nie ma takiego pliku ani katalogu, otwórz „android / app / src / main / resources / index.android.bundle”

uruchom mkdir android / app / src / main / asset


4
Wielkie dzięki za to, zadziałało dla mnie. Jedyny problem, jaki dostałem, to komunikat: „Brak wymaganych argumentów: pakiet-wyjście” en część reagujący pakiet-natywny, ale problem został rozwiązany przez usunięcie 2 symboli „\”
— guinunez

58
Dziwi mnie słaba dokumentacja Facebooka, w której całkowicie pominęli tę react-native bundleczęść. Dziękuję za odpowiedź!
— technophyle,

2
Pracuję z systemem Windows, również z tym współpracuję gradlew.bat assembleRelease.
— Tabares

12
Otrzymuję ten błąd Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] . kiedy próbuję zainstalować apk.
— developernaren

18
jeśli ENOENT: no such file or directory, open 'android/app/src/main/assets/index.android.bundle'mkdir android/app/src/main/assets
— pojawi

31

W tym procesie powinieneś po prostu użyć Androida Studio. To jest po prostu prostsze. Ale najpierw uruchom to polecenie w swoim katalogu aplikacji natywnej:

Dla nowszej wersji React-Native (np. React Native 0.49.0 i tak dalej ...)

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

Dla starszej wersji React-Native (0.49.0 i poniżej)

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/

Następnie użyj Android studio, aby otworzyć folder „android”, w którym zareagujesz na natywny katalog aplikacji, poprosi o aktualizację gradle i kilka innych rzeczy. przejdź do build-> Wygeneruj podpisany APK i postępuj zgodnie z instrukcjami. To naprawdę proste.


Używam również Androida Studio i Xcode do tworzenia wersji wydanych dla moich aplikacji React Native ... ale generowanie Androida można wykonać za pomocą skryptu opisanego przez @Aditya Singh
— WiRa

To nie jest już potrzebne proandroiddev.com/…
— onmyway133

30

Uruchom to polecenie:

react-native run-android --variant=release

Pamiętaj, że --variant=releasejest dostępna tylko wtedy, gdy masz skonfigurowane podpisywanie przy użyciu cd android && ./gradlew assembleRelease.


@jasan Znalazłem inny problem, taki jak tutaj: github.com/facebook/react-native/issues/11586 Może to rozwiązać problem: cd android && ./gradlew installRelease
— Ahmed Ashraf

Próbowałem cd android && ./gradlew installReleasei dostałem ten błądTask 'assembleRelease.' not found in root project 'project'. Some candidates are: 'assembleRelease'.
— ThomasReggi

Tak, musisz wygenerować plik magazynu kluczy. i edytuj plik stopni. Postępuj zgodnie z tymi instrukcjami, aby rozwiązać ten problem. facebook.github.io/react-native/docs/signed-apk-android.html
— Ahmed Ashraf

21

dla React Native 0.49 i nowszych

powinieneś przejść do katalogu projektu na terminalu i uruchomić tę komendę

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

jeśli poniżej 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

Następnie użyj Android studio, aby otworzyć folder „android”, w którym zareagujesz na natywny katalog aplikacji, poprosi o aktualizację gradle i kilka innych rzeczy. przejdź do build-> Wygeneruj podpisany APK i postępuj zgodnie z instrukcjami. To dobrze.


Jest to łatwy sposób, jeśli masz zainstalowany Android Studio (który zajmie się używaniem lub tworzeniem magazynu kluczy). Dzięki.
— leosok

Hej ... masz szybkie pytanie ... czy wymagane są powyższe kroki? Natywny doktor nigdzie nie wspomina o tym nigdzie
— pravin

1
@pravin nie jest wymagane, jest to jedna z metod generowania apk.
— Yasin Ugurlu,

12

Jeśli masz Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES].

Próbowałem użyć metody @ Aditya do wygenerowania niepodpisanego pliku APK i zainstalowania go, ale kiedy poszedłem go zainstalować na moim tablecie z Androidem, wystąpił błąd Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] .

Wyobrażam sobie, że dzieje się tak, ponieważ plik APK nie został podpisany, a tablet nie był z tego zadowolony. Po wygenerowaniu pliku pakietu React Native byłem w stanie wygenerować podpisany plik APK, jak zwykle, za pośrednictwem Android Studio.

Nawiasem mówiąc, nasza aplikacja jest w pełni działającą aplikacją na Androida, która już istnieje w Sklepie Play, a my dodajemy do niej React Native w kawałkach wielkości kęsa, ponieważ jest niesamowity.

Podsumowując, oto moje kroki:

1) Generuj pakiet React Native:

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) Wygeneruj podpisany plik APK z Android Studio.

3) Zainstaluj podpisany plik APK na urządzeniu USB:

adb -d install -r <path_to_signed_apk> 

-dFlaga tylko mówi adbdo zainstalowania na urządzeniu USB załączonym, w przypadku gdy masz emulator działa tak dobrze. Jeśli chcesz zainstalować na dowolnym emulatorze, upuść -dflagę.

4) Zysk!


11

Spróbuj poniżej, wygeneruje app-debug.apk w folderze 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

następnie przejdź do folderu Androida i uruchom

./gradlew assembleDebug


Generowany tutaj APK potrzebuje metra do uruchomienia ... więc myślę, że nadal korzysta z serwera
— deweloperów

11

Jeśli ktoś chce budować bez kluczy playstore, to polecenie byłoby bardzo pomocne.

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

Po zakończeniu kompilacji możesz znaleźć apk w pliku kompilacji wydania.


7

Przejdź do katalogu projektu i uruchom polecenie:

cd android && ./gradlew assembleRelease

To wygeneruje niepodpisany apk, jeśli nie wykonałeś wymaganej konfiguracji (jak powiedział Pedram).
— Gokhan Sari

Stworzy to debugowanie, wydanie i niepodpisany apk w wygenerowanym folderze. Moim zamiarem było udostępnienie apk wydania.
— Sidharth Taneja

6

Jeśli pojawi się błąd związany z plikiem index.android.js. Wynika to z faktu, że używasz nowej wersji natywnej React (używam wersji 0.55.4). Po prostu zamień „index.android.js” na „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

Mam inne rozwiązanie: - Generowanie klucza podpisu Możesz wygenerować prywatny klucz podpisu za pomocą keytool. W systemie Windows keytool należy uruchomić z C: \ Program Files \ Java \ jdkx.x.x_x \ bin.

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

Umieść plik my-release-key.keystore w katalogu android / app w folderze projektu.

Edytuj plik android / app / build.gradle w folderze projektu i dodaj konfigurację podpisywania,

android {
....
signingConfigs { 
  release { 

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

  } 
}}}


buildTypes {release {signingConfig signingConfigs.release}}

i biegnij

gradlew assembleRelease

To da ci dwa pliki na Android \ app \ build \ wyjścia \ apk app-release.apk i app-release-unsigned.apk teraz zainstaluj app-release.apk na urządzeniu z Androidem.


Gdzie jest folder android \ app? Nie widzę tego pod moim projektem (widzę tylko node_modules, a wewnątrz niego nie ma Androida / aplikacji)
— DHLopez

1
@DHLopez musisz użyć czystego projektu React Native, aby uzyskać dostęp do folderu Androida. Jeśli używasz Expo, musisz odłączyć projekt Expo za pomocą wysuwania expo.
— fxbayuanggara

5

Mam nadzieję, że pomoże nowym początkującym

Oficjalny dokument tutaj

Jeśli nie masz magazynu kluczy niż użyj przed komendą, pomiń

Generowanie klucza podpisu / pliku kluczy Można wygenerować prywatny klucz podpisu za pomocą keytool. W systemie Windows keytool należy uruchomić z C: \ Program Files \ Java \ jdkx.x.x_x \ bin.

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

otrzymasz plik taki jak my-release-key.keystore

Konfigurowanie zmiennych stopni Umieść plik my-release-key.keystore w katalogu android / app w folderze projektu. Zmodyfikuj plik android / gradle.properties i dodaj następujące elementy (zamień ***** na prawidłowe hasło magazynu kluczy, alias i hasło klucza), obejdź ustawienie enableAapt2 ustawione na fałsz, ponieważ problem dotyczy wersji 3.0 Androida

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

następnie dodaj te app / buid.gradle (app)

poniżej domyślnej konfiguracji

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

oraz wersja typu Inside Build {}

 signingConfig signingConfigs.release

następnie po prostu uruchom to polecenie w terminalu Android Studio Poniższe polecenia zautomatyzują przede wszystkim odpowiedzi

jeśli Windows

cd android
gradlew assembleRelease

jeśli linux / mac

$ cd android
$ ./gradlew assembleRelease

jeśli wystąpi błąd, usuń cały folder kompilacji i uruchom polecenie

gradlew clean

niż znowu

gradlew assembleRelease

1
omg gradle clean... Walczyłem z tym przez jakiś czas, otrzymując te błędy kompilacji, dziękuję bardzo za tę odpowiedź !!
— nerdlinger

5

Najnowsze reakcje natywnych wersji w pakiecie projektu

Android

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

Sposób GUI w Android Studio

  • Otwórz aplikację Android React Native w Android Studio (oznacza to po prostu otwarcie folderu Android Twojego projektu React-Native w Android Studio)
  • Przejdź do karty „Kompilacja” u góry
  • Przejdź do „Kompilacji pakietów / pakietów APK”
  • Następnie wybierz „Zbuduj pliki APK”
  • Poprowadzi Cię przez proces lokalizowania kluczy do podpisania APK lub tworzenia kluczy, jeśli jeszcze ich nie masz, co jest bardzo proste. Jeśli tylko ćwiczysz, możesz wygenerować te klucze i zapisać je na pulpicie.
  • Po zakończeniu tego procesu i jeśli kompilacja zakończyła się powodzeniem, poniżej pojawi się wyskakujące okienko w Android Studio. Kliknij znajdujący się w nim link z napisem „zlokalizuj” (APK)
  • To zabierze Cię do pliku apk, przenieś go na urządzenie z Androidem. Następnie przejdź do tego pliku na urządzeniu z Androidem i zainstaluj go.

0

Użycie aplikacji Android Studio do wygenerowania podpisanego pliku APK dla projektu React's Android jest również dobrą i łatwą opcją, otwarcie projektu Android React w aplikacji Android Studio i wygenerowanie naciśnięcia klawisza i podpisanego APK.


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.