Publicering til Google Play Store

Android kræver, at alle apps skal være digitalt signeret med et certifikat, før de kan installeres. For at kunne distribuere din Android-applikation via Google Play Store skal den signeres med en frigivelsesnøgle, som derefter skal bruges til alle fremtidige opdateringer. Siden 2017 er det muligt for Google Play at håndtere signering af udgivelser automatisk takket være App Signing by Google Play-funktionaliteten. Før din binære applikation uploades til Google Play skal den dog signeres med en uploadnøgle. På siden Signering af dine applikationer på Android Developers dokumentation beskrives emnet i detaljer. Denne vejledning dækker processen kortfattet og indeholder en liste over de trin, der kræves for at pakke JavaScript-bundlen.

Generering af en uploadnøgle#

Du kan generere en privat signeringsnøgle ved hjælp af keytool. På Windows skal keytool køres fra 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

Denne kommando beder dig om adgangskoder til keystore og nøgle og til felterne Distinguished Name for din nøgle. Den genererer derefter keystore som en fil kaldet my-upload-key.keystore.

Keystore indeholder en enkelt nøgle, der er gyldig i 10000 dage. Aliasset er et navn, som du senere vil bruge, når du signerer din app, så husk at notere aliaset.

På Mac, hvis du ikke er sikker på, hvor din JDK bin-mappe befinder sig, skal du udføre følgende kommando for at finde den:

/usr/libexec/java_home

Kopier

Det vil output JDK-mappen, som vil se nogenlunde sådan ud:

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

Kopier

Navigér til denne mappe ved hjælp af kommandoen cd /your/jdk/path, og brug kommandoen keytool med sudotilladelse som vist nedenfor.

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

Kopier

Bemærk: Husk at holde keystore-filen privat. Hvis du har mistet uploadnøglen, eller hvis den er blevet kompromitteret, bør du følge disse instruktioner.

Opsætning af Gradle-variabler#

  1. Placér filen my-upload-key.keystore under mappen android/app i din projektmappe.
  2. Rediger filen ~/.gradle/gradle.properties eller android/gradle.properties, og tilføj følgende (erstat ***** med den korrekte adgangskode til keystore, alias og nøgleadgangskode),
MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=*****
MYAPP_UPLOAD_KEY_PASSWORD=*****

Kopier

Dette vil være globale Gradle-variabler, som vi senere kan bruge i vores Gradle-konfiguration til at signere vores app.

Note om sikkerhed: Hvis du ikke er vild med at gemme dine adgangskoder i klartekst, og du kører macOS, kan du også gemme dine legitimationsoplysninger i appen Keychain Access. Så kan du springe de to sidste rækker i ~/.gradle/gradle.properties over.

Tilføjelse af signeringskonfiguration til din app’s Gradle-konfiguration#

Det sidste konfigurationsskridt, der skal udføres, er at indstille release builds til at blive signeret ved hjælp af uploadnøglen. Rediger filen android/app/build.gradle i din projektmappe, og tilføj signeringskonfig,

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

Kopier

Generering af udgivelsen AAB#

Kør følgende i en terminal:

cd android
./gradlew bundleRelease

Kopier

Gradle’s bundleRelease vil bundle alt det JavaScript, der er nødvendigt for at køre din app, i AAB (Android App Bundle). Hvis du har brug for at ændre den måde, JavaScript-bundlen og/eller de tegnelige ressourcer er bundtet på (f.eks. hvis du har ændret standardfil/mappenavne eller projektets generelle struktur), skal du kigge på android/app/build.gradle for at se, hvordan du kan opdatere den, så den afspejler disse ændringer.

Bemærk: Sørg for, at gradle.properties ikke indeholder org.gradle.configureondemand=true, da det vil få udgivelsesbygningen til at springe over at bundle JS og aktiver i den binære app-binærfil.

Den genererede AAB kan findes under android/app/build/outputs/bundle/release/app.aab og er klar til at blive uploadet til Google Play.

For at Google Play kan acceptere AAB-formatet skal App Signing by Google Play konfigureres for din applikation i Google Play-konsollen. Hvis du opdaterer en eksisterende app, der ikke bruger App Signing by Google Play, skal du se vores afsnit om migration for at få at vide, hvordan du udfører denne konfigurationsændring.

Test af udgivelsesbygningen af din app#

Hvis du uploader udgivelsesbygningen til Play Store, skal du sørge for at teste den grundigt. Fjern først alle tidligere versioner af appen, som du allerede har installeret. Installer den på enheden ved hjælp af følgende kommando i projektroden:

npx react-native run-android –variant=release

Copy

Bemærk, at --variant release kun er tilgængelig, hvis du har konfigureret signering som beskrevet ovenfor.

Du kan afslutte alle kørende bundler-instanser, da al din ramme- og JavaScript-kode er bundtet i APK’ens aktiver.

Udgivelse til andre butikker#

Den genererede APK har som standard den native kode for både x86- og ARMv7a-CPU-arkitekturer. Dette gør det lettere at dele APK’er, der kører på næsten alle Android-enheder. Det har dog den ulempe, at der vil være noget ubrugt native kode på alle enheder, hvilket fører til unødigt store APK’er.

Du kan oprette en APK for hver CPU ved at ændre følgende linje i android/app/build.gradle:

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

Kopier

Opload begge disse filer til markeder, der understøtter device targeting, såsom Google Play og Amazon AppStore, og brugerne vil automatisk få den relevante APK. Hvis du vil uploade til andre markeder, f.eks. APKFiles, som ikke understøtter flere APK’er for en enkelt app, skal du også ændre følgende linje for at oprette den universelle standard-APK med binære filer til begge CPU’er.

– universalApk false // Hvis sandt, generer du også en universal APK
+ universalApk true // Hvis sandt, generer du også en universal APK

Copy

Aktivering af Proguard til at reducere størrelsen af APK’en (valgfrit)#

Proguard er et værktøj, der kan reducere størrelsen af APK’en en en smule. Det gør det ved at fjerne dele af React Native Java-bytekoden (og dens afhængigheder), som din app ikke bruger.

VIGTIGT: Sørg for at teste din app grundigt, hvis du har aktiveret Proguard. Proguard kræver ofte en konfiguration, der er specifik for hvert enkelt native bibliotek, du bruger. Se app/proguard-rules.pro.

For at aktivere Proguard skal du redigere android/app/build.gradle:

/**
* Kør Proguard for at krympe Java-bytekoden i release-builds.
*/
def enableProguardInReleaseBuilds = true

Kopier

Migrering af gamle Android React Native-apps til brug af App Signing by Google Play#

Hvis du migrerer fra en tidligere version af React Native er der stor sandsynlighed for, at din app ikke bruger funktionen App Signing by Google Play. Vi anbefaler, at du aktiverer den for at kunne drage fordel af ting som automatisk opdeling af apps. For at migrere fra den gamle måde at signere på skal du starte med at generere en ny upload-nøgle og derefter erstatte release signing config i android/app/build.gradle for at bruge upload-nøglen i stedet for release-nøglen (se afsnittet om tilføjelse af signeringskonfiguration til gradle). Når det er gjort, skal du følge instruktionerne fra Google Play Help-webstedet for at sende din originale udgivelsesnøgle til Google Play.

Standardtilladelser#

Som standard tilføjes INTERNET-tilladelse til din Android-app, da stort set alle apps bruger den. SYSTEM_ALERT_WINDOW-tilladelse tilføjes til din Android APK i debug-tilstand, men den vil blive fjernet i produktionstilstand.