Publicering till Google Play Store

Android kräver att alla appar signeras digitalt med ett certifikat innan de kan installeras. För att distribuera din Android-applikation via Google Play Store måste den signeras med en utgivningsnyckel som sedan måste användas för alla framtida uppdateringar. Sedan 2017 är det möjligt för Google Play att hantera signering av releaser automatiskt tack vare funktionaliteten App Signing by Google Play. Innan din binära applikation laddas upp till Google Play måste den dock signeras med en uppladdningsnyckel. På sidan Signering av dina applikationer i dokumentationen för Android Developers beskrivs ämnet i detalj. Den här guiden täcker processen i korthet och listar de steg som krävs för att paketera JavaScript-paketet.

Generera en uppladdningsnyckel#

Du kan generera en privat signeringsnyckel med hjälp av keytool. På Windows måste keytool köras från 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

Copy

Detta kommando uppmanar dig att ange lösenord för keystore och nyckel och för fälten Distinguished Name för din nyckel. Den genererar sedan keystore som en fil som heter my-upload-key.keystore.

Keystore innehåller en enda nyckel som är giltig i 10000 dagar. Aliaset är ett namn som du kommer att använda senare när du signerar din app, så kom ihåg att notera aliaset.

På Mac, om du inte är säker på var din JDK bin-mapp finns, utför följande kommando för att hitta den:

/usr/libexec/java_home

Copy

Det kommer att ge ut JDK-katalogen, som kommer att se ut ungefär så här:

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

Kopiera

Navigera till den katalogen med kommandot cd /your/jdk/path och använd kommandot keytool med sudo-behörighet enligt nedan.

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

Copy

Notera: Kom ihåg att hålla keystore-filen privat. Om du har förlorat uppladdningsnyckeln eller om den har äventyrats bör du följa dessa instruktioner.

Uppsättning av Gradle-variabler#

  1. Placera filen my-upload-key.keystore under katalogen android/app i din projektmapp.
  2. Redigera filen ~/.gradle/gradle.properties eller android/gradle.properties och lägg till följande (ersätt ***** med rätt lösenord för keystore, alias och nyckellösenord),
MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=*****
MYAPP_UPLOAD_KEY_PASSWORD=*****

Kopiera

Detta kommer att vara globala Gradle-variabler som vi senare kan använda i vår Gradle-konfiguration för att signera vår app.

Note about security: Om du inte är förtjust i att lagra dina lösenord i klartext och du kör macOS kan du också lagra dina autentiseringsuppgifter i appen Keychain Access. Då kan du hoppa över de två sista raderna i ~/.gradle/gradle.properties.

Lägga till signeringskonfiguration till din apps Gradle-konfiguration#

Det sista konfigurationssteget som behöver göras är att ställa in release-builds som ska signeras med hjälp av uppladdningsnyckeln. Redigera filen android/app/build.gradle i din projektmapp och lägg till signeringskonfigurationen,

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

Kopiera

Generering av utgåvan AAB#

Kör följande i en terminal:

cd android
./gradlew bundleRelease

Kopiera

Gradles bundleRelease kommer att bunta allt JavaScript som behövs för att köra din app i AAB (Android App Bundle). Om du behöver ändra hur JavaScript-paketet och/eller ritbara resurser paketeras (t.ex. om du ändrat standardnamnen för filer/mappar eller projektets allmänna struktur), ta en titt på android/app/build.gradle för att se hur du kan uppdatera den så att den återspeglar dessa ändringar.

Notera: Se till att gradle.properties inte innehåller org.gradle.configureondemand=true eftersom det kommer att göra att release-bygget hoppar över att paketera JS och tillgångar i appbinärfilen.

Den genererade AAB finns under android/app/build/outputs/bundle/release/app.aab och är redo att laddas upp till Google Play.

För att Google Play ska acceptera AAB-formatet måste App Signing by Google Play konfigureras för din applikation i Google Play Console. Om du uppdaterar en befintlig app som inte använder App Signing by Google Play, se vårt avsnitt om migrering för att lära dig hur du utför den konfigurationsändringen.

Testning av release-build av din app#

För att ladda upp release-build till Play Store ska du se till att du testar den noggrant. Avinstallera först alla tidigare versioner av appen som du redan har installerat. Installera den på enheten med följande kommando i projektroten:

npx react-native run-android –variant=release

Copy

Bemärk att --variant release endast är tillgängligt om du har ställt in signering enligt beskrivningen ovan.

Du kan avsluta alla pågående bundler-instanser, eftersom all din ramverks- och JavaScript-kod är paketerad i APK:ns tillgångar.

Publicering till andra butiker#

Den genererade APK:n har som standard den ursprungliga koden för både x86- och ARMv7a-CPU-arkitekturerna. Detta gör det lättare att dela APK:er som körs på nästan alla Android-enheter. Detta har dock nackdelen att det kommer att finnas en del oanvänd inhemsk kod på alla enheter, vilket leder till onödigt stora APK:er.

Du kan skapa en APK för varje CPU genom att ändra följande rad i android/app/build.gradle:

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

Kopiera

Ladda upp båda dessa filer till marknader som har stöd för enhetsmålinriktning, t.ex. Google Play och Amazon AppStore, och användarna kommer automatiskt att få den lämpliga APK:n. Om du vill ladda upp till andra marknader, t.ex. APKFiles, som inte stöder flera APK:er för en enda app, ändrar du följande rad också för att skapa den universella standard-APK:n med binärfiler för båda CPU:erna.

– universalApk false // Om sant, generera även en universell APK
+ universalApk true // Om sant, generera även en universell APK

Kopiera

Aktivering av Proguard för att minska storleken på APK:n (valfritt)#

Proguard är ett verktyg som kan minska APK:ns storlek något. Det gör det genom att ta bort delar av React Native Java bytecode (och dess beroenden) som din app inte använder.

VIKTIGT: Se till att noggrant testa din app om du har aktiverat Proguard. Proguard kräver ofta en konfiguration som är specifik för varje inhemskt bibliotek som du använder. Se app/proguard-rules.pro.

För att aktivera Proguard redigerar du android/app/build.gradle:

/**
* Kör Proguard för att krympa Java-bytekoden i release-builds.
*/
def enableProguardInReleaseBuilds = true

Kopiera

Migrering av gamla Android React Native-appar så att de kan använda App Signing by Google Play#

Om du migrerar från en tidigare version av React Native är det troligt att din app inte använder funktionen App Signing by Google Play. Vi rekommenderar att du aktiverar den för att kunna dra nytta av saker som automatisk delning av appar. För att migrera från det gamla sättet att signera måste du börja med att generera en ny uppladdningsnyckel och sedan ersätta release signering config i android/app/build.gradle för att använda uppladdningsnyckeln istället för release-nyckeln (se avsnittet om att lägga till signeringskonfiguration i gradle). När det är gjort bör du följa instruktionerna från Google Play Help-webbplatsen för att skicka din ursprungliga release-nyckel till Google Play.

Standardbehörigheter#

Som standard läggs behörigheten INTERNET till i din Android-app eftersom i stort sett alla appar använder den. Behörigheten SYSTEM_ALERT_WINDOW läggs till i din Android APK i felsökningsläge men tas bort i produktion.