Publikowanie w Google Play Store

Android wymaga, aby wszystkie aplikacje były cyfrowo podpisane certyfikatem, zanim będą mogły być zainstalowane. Aby dystrybuować swoją aplikację Android za pośrednictwem sklepu Google Play, musi ona być podpisana kluczem wydania, który następnie musi być używany dla wszystkich przyszłych aktualizacji. Od 2017 roku możliwe jest, aby Google Play zarządzał podpisywaniem wydań automatycznie dzięki funkcjonalności App Signing by Google Play. Zanim jednak binarna wersja aplikacji zostanie przesłana do Google Play, musi zostać podpisana za pomocą klucza przesyłania. Strona Podpisywanie aplikacji w dokumentacji Android Developers szczegółowo opisuje ten temat. Ten przewodnik omawia ten proces w skrócie, jak również wymienia kroki wymagane do spakowania pakietu JavaScript.

Generowanie klucza przesyłania#

Możesz wygenerować prywatny klucz podpisywania przy użyciu keytool. W systemie Windows keytool musi być uruchamiany z poziomu C:\Program Files\Java\jdkx.x.x_x\bin.

keytool -genkeypair -v -storetype PKCS12 -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

Kopiuj

To polecenie prosi o podanie haseł dla keystore i klucza oraz pól Distinguished Name dla klucza. Następnie generuje katalog kluczy jako plik o nazwie my-upload-key.keystore.

Katalog kluczy zawiera pojedynczy klucz, ważny przez 10000 dni. Alias jest nazwą, której będziesz używał później podczas podpisywania aplikacji, więc pamiętaj, aby zwrócić uwagę na alias.

Na Macu, jeśli nie jesteś pewien, gdzie jest folder JDK bin, wykonaj następujące polecenie, aby go znaleźć:

/usr/libexec/java_home

Kopiuj

Wyświetli ono katalog JDK, który będzie wyglądał mniej więcej tak:

/Library/Java/JavaVirtualMachines/jdkX.X.X_XXX.jdk/Contents/Home

Kopiuj

Nawiguj do tego katalogu za pomocą polecenia cd /your/jdk/path i użyj polecenia keytool z uprawnieniami sudo, jak pokazano poniżej.

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

Kopiuj

Uwaga: Pamiętaj, aby zachować prywatność pliku keystore. W przypadku utraty klucza uploadu lub jego kompromitacji należy postępować zgodnie z poniższymi instrukcjami.

Konfigurowanie zmiennych Gradle#

  1. Umieść plik my-upload-key.keystore pod katalogiem android/app w folderze projektu.
  2. Edytuj plik ~/.gradle/gradle.properties lub android/gradle.properties i dodaj następujące elementy (zastąp ***** prawidłowym hasłem keystore, aliasem i hasłem klucza),
MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=*****
MYAPP_UPLOAD_KEY_PASSWORD=*****

Kopiuj

Będą to globalne zmienne Gradle, których możemy później użyć w naszym configu Gradle do podpisania naszej aplikacji.

Uwaga na temat bezpieczeństwa: Jeśli nie przepadasz za przechowywaniem haseł w plaintext, a korzystasz z macOS, możesz również przechowywać swoje dane uwierzytelniające w aplikacji Keychain Access. Wtedy możesz pominąć dwa ostatnie wiersze w ~/.gradle/gradle.properties.

Dodawanie konfiguracji podpisywania do konfiguracji Gradle twojej aplikacji#

Ostatnim krokiem konfiguracyjnym, który należy wykonać, jest ustawienie kompilacji wydania, aby były podpisywane przy użyciu klucza przesyłania. Edytuj plik android/app/build.gradle w folderze projektu i dodaj konfigurację podpisywania,

android {
defaultConfig { … }
signingConfigs {
release {
if (project.hasProperty(’MYAPP_UPLOAD_STORE_FILE’)) {
storeFile file(MYAPP_UPLOAD_STORE_FILE)
storePassword MYAPP_UPLOAD_STORE_PASSWORD
keyAlias MYAPP_UPLOAD_KEY_ALIAS
keyPassword MYAPP_UPLOAD_KEY_PASSWORD
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}

Kopiuj

Generowanie wydania AAB#

Uruchom poniższe w terminalu:

cd android
./gradlew bundleRelease

Skopiuj

Gradle’s bundleRelease zapakuje cały JavaScript potrzebny do uruchomienia Twojej aplikacji w AAB (Android App Bundle). Jeśli musisz zmienić sposób, w jaki pakiet JavaScript i/lub zasoby drawable są dołączone (np. jeśli zmieniłeś domyślne nazwy plików/folderów lub ogólną strukturę projektu), spójrz na android/app/build.gradle, aby zobaczyć, jak możesz go zaktualizować, aby odzwierciedlić te zmiany.

Uwaga: Upewnij się, że gradle.properties nie zawiera org.gradle.configureondemand=true, ponieważ spowoduje to, że kompilacja wydania pominie dołączanie JS i zasobów do binarki aplikacji.

Generowany AAB można znaleźć pod android/app/build/outputs/bundle/release/app.aab, i jest gotowy do przesłania do Google Play.

Aby Google Play zaakceptował format AAB, App Signing by Google Play musi być skonfigurowany dla Twojej aplikacji w Google Play Console. Jeśli aktualizujesz istniejącą aplikację, która nie używa podpisywania aplikacji przez Google Play, sprawdź naszą sekcję dotyczącą migracji, aby dowiedzieć się, jak przeprowadzić tę zmianę konfiguracji.

Testowanie kompilacji twojej aplikacji#

Przed wysłaniem kompilacji do Sklepu Play, upewnij się, że dokładnie ją przetestowałeś. Najpierw odinstaluj wszystkie poprzednie wersje aplikacji, które masz już zainstalowane. Zainstaluj ją na urządzeniu za pomocą następującego polecenia w korzeniu projektu:

npx react-native run-android –variant=release

Copy

Zauważ, że --variant release jest dostępne tylko wtedy, gdy skonfigurowałeś podpisywanie w sposób opisany powyżej.

Możesz zakończyć każdą działającą instancję bundlera, ponieważ cały twój kod frameworka i JavaScript jest dołączony do aktywów APK.

Publikowanie do innych sklepów#

Domyślnie, wygenerowany APK ma natywny kod dla obu architektur procesorów x86 i ARMv7a. Ułatwia to udostępnianie APK, które działają na prawie wszystkich urządzeniach z Androidem. Jednak ma to tę wadę, że na każdym urządzeniu będzie trochę nieużywanego kodu natywnego, co prowadzi do niepotrzebnie większych APK.

Możesz utworzyć APK dla każdego procesora, zmieniając następującą linię w android/app/build.gradle:

– ndk {
– abiFilters „armeabi-v7a”, „x86”
– }
– def enableSeparateBuildPerCPUArchitecture = false
+ def enableSeparateBuildPerCPUArchitecture = true

Copy

Wgraj oba te pliki na rynki, które obsługują targetowanie urządzeń, takie jak Google Play i Amazon AppStore, a użytkownicy automatycznie otrzymają odpowiedni APK. Jeśli chcesz wysyłać na inne rynki, takie jak APKFiles, które nie obsługują wielu APK dla jednej aplikacji, zmień również poniższą linię, aby utworzyć domyślny uniwersalny APK z binariami dla obu procesorów.

– universalApk false // Jeśli true, wygeneruj również uniwersalny APK
+ universalApk true // Jeśli true, wygeneruj również uniwersalny APK

Kopiuj

Włączenie Proguard, aby zmniejszyć rozmiar APK (opcjonalnie)#

Proguard jest narzędziem, które może nieznacznie zmniejszyć rozmiar APK. Robi to poprzez usunięcie części kodu bajtowego React Native Java (i jego zależności), których twoja aplikacja nie używa.

WAŻNE: Upewnij się, że dokładnie przetestowałeś swoją aplikację, jeśli włączyłeś Proguard. Proguard często wymaga konfiguracji specyficznej dla każdej biblioteki natywnej, której używasz. Zobacz app/proguard-rules.pro.

Aby włączyć Proguard, edytuj android/app/build.gradle:

/**
* Uruchom Proguard, aby zmniejszyć kod bajtowy Java w kompilacjach wydań.
*/
def enableProguardInReleaseBuilds = true

Kopiuj

Migracja starych aplikacji Android React Native do korzystania z App Signing by Google Play#

Jeśli migrujesz z poprzedniej wersji React Native, są szanse, że Twoja aplikacja nie używa funkcji App Signing by Google Play. Zalecamy włączenie jej, aby móc korzystać z takich rzeczy jak automatyczne dzielenie aplikacji. W celu migracji ze starego sposobu podpisywania musisz zacząć od wygenerowania nowego klucza uploadu, a następnie zastąpienia release signing config w android/app/build.gradle aby użyć klucza uploadu zamiast release (zobacz sekcję o dodawaniu signing config do gradle). Gdy to zrobisz, powinieneś postępować zgodnie z instrukcjami na stronie pomocy Google Play, aby wysłać swój oryginalny klucz wydania do Google Play.

Domyślne uprawnienia#

Domyślnie, INTERNET uprawnienie jest dodane do twojej aplikacji na Androida, ponieważ prawie wszystkie aplikacje go używają. Uprawnienie SYSTEM_ALERT_WINDOW jest dodane do twojego APK Androida w trybie debugowania, ale zostanie usunięte w produkcji.