Publiceren naar Google Play Store

Android vereist dat alle apps digitaal worden ondertekend met een certificaat voordat ze kunnen worden geïnstalleerd. Om uw Android applicatie via Google Play store te distribueren moet deze ondertekend worden met een release key die vervolgens gebruikt moet worden voor alle toekomstige updates. Sinds 2017 is het mogelijk voor Google Play om het ondertekenen van releases automatisch te beheren dankzij de App Signing by Google Play functionaliteit. Voordat de binary van uw applicatie wordt geüpload naar Google Play moet deze echter worden ondertekend met een uploadsleutel. De pagina Uw applicaties ondertekenen op de Android-ontwikkelaarsdocumentatie beschrijft het onderwerp in detail. Deze gids behandelt het proces in het kort, evenals een lijst van de stappen die nodig zijn om de JavaScript-bundel te verpakken.

Het genereren van een upload-sleutel#

U kunt een private ondertekeningssleutel genereren met keytool. Onder Windows moet keytool worden uitgevoerd vanuit 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

Dit commando vraagt u om wachtwoorden voor de sleutelbewaarplaats en sleutel en om de Distinguished Name-velden voor uw sleutel. Vervolgens wordt de sleutelbewaarplaats gegenereerd als een bestand met de naam my-upload-key.keystore.

De sleutelbewaarplaats bevat een enkele sleutel, die 10000 dagen geldig is. De alias is een naam die u later zult gebruiken bij het ondertekenen van uw app, dus vergeet niet om de alias te noteren.

Op de Mac, als u niet zeker weet waar uw JDK bin folder is, voer dan het volgende commando uit om het te vinden:

/usr/libexec/java_home

Copy

Hieruit komt de directory van de JDK, die er ongeveer zo uit zal zien:

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

Kopiëren

Navigeer naar die map met het commando cd /your/jdk/path en gebruik het commando keytool met sudo-toestemming zoals hieronder wordt weergegeven.

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

Copy

Note: Vergeet niet om het keystore bestand prive te houden. In het geval dat u de uploadsleutel bent kwijtgeraakt of deze is gecompromitteerd, dient u deze instructies op te volgen.

Gradle-variabelen instellen#

  1. Plaats het my-upload-key.keystore-bestand onder de android/app map in uw projectmap.
  2. Bewerk het bestand ~/.gradle/gradle.properties of android/gradle.properties, en voeg het volgende toe (vervang ***** door het juiste keystore wachtwoord, alias en sleutel wachtwoord),

MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
MYAPP_UPLOAD_KEY_ALIAS=mijn-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=*****
MYAPP_UPLOAD_KEY_PASSWORD=*****

Copy

Dit worden globale Gradle-variabelen, die we later in onze Gradle-config kunnen gebruiken om onze app te ondertekenen.

Note over veiligheid: Als je er niet van houdt om je wachtwoorden in platte tekst op te slaan, en je draait macOS, dan kun je je credentials ook opslaan in de Keychain Access-app. Dan kunt u de laatste twee rijen in ~/.gradle/gradle.properties overslaan.

De ondertekeningsconfiguratie toevoegen aan de Gradle-configuratie van uw app#

De laatste configuratiestap die moet worden uitgevoerd, is het instellen van release builds om te worden ondertekend met de uploadsleutel. Bewerk het bestand android/app/build.gradle in uw projectmap, en voeg de ondertekeningsconfig,

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

Kopiëren

Genereren van de release AAB#

Run het volgende in een terminal:

cd android
./gradlew bundleRelease

Copy

Gradle’s bundleRelease zal alle JavaScript die nodig is om uw app uit te voeren bundelen in de AAB (Android App Bundle). Als u de manier waarop de JavaScript-bundel en/of de tekenbare bronnen worden gebundeld, moet wijzigen (bijvoorbeeld als u de standaard bestands-/mapnamen of de algemene structuur van het project hebt gewijzigd), bekijkt u android/app/build.gradle om te zien hoe u deze kunt bijwerken om deze wijzigingen weer te geven.

Note: zorg ervoor dat gradle.properties org.gradle.configureondemand=true niet bevat, omdat dit ervoor zorgt dat de release build de bundeling van JS en assets in de app binary overslaat.

De gegenereerde AAB kan worden gevonden onder android/app/build/outputs/bundle/release/app.aab, en is klaar om te worden geüpload naar Google Play.

Om ervoor te zorgen dat Google Play de AAB-indeling accepteert, moet App Signing by Google Play voor uw toepassing worden geconfigureerd in de Google Play Console. Als u het bijwerken van een bestaande app die geen gebruik maakt van App Signing door Google Play, kijk dan op onze migratie sectie om te leren hoe u die configuratie wijziging uit te voeren.

Het testen van de release build van uw app#

Voor het uploaden van de release build naar de Play Store, zorg ervoor dat je het grondig te testen. Verwijder eerst de vorige versie van de app die u al hebt geïnstalleerd. Installeer de app op het apparaat met het volgende commando in de project root:

npx react-native run-android –variant=release

Copy

Merk op dat --variant release alleen beschikbaar is als u de ondertekening hebt ingesteld zoals hierboven is beschreven.

U kunt alle lopende bundler-instanties beëindigen, aangezien al uw framework- en JavaScript-code is gebundeld in de assets van de APK.

Publiceren naar andere winkels#

De gegenereerde APK heeft standaard de native code voor zowel x86- als ARMv7a-CPU-architecturen. Dit maakt het makkelijker om APK’s te delen die op bijna alle Android toestellen draaien. Dit heeft echter het nadeel dat er wat ongebruikte native code op elk apparaat zal zijn, wat leidt tot onnodig grotere APK’s.

U kunt een APK voor elke CPU maken door de volgende regel in android/app/build.gradle te veranderen:

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

Copy

Upload beide bestanden naar markten die device targeting ondersteunen, zoals Google Play en Amazon AppStore, en de gebruikers zullen automatisch de juiste APK krijgen. Als u wilt uploaden naar andere markten, zoals APKFiles, die niet meerdere APK’s voor één app ondersteunen, wijzigt u ook de volgende regel om de standaard universele APK te maken met binaries voor beide CPU’s.

– universalApk false // Indien true, ook een universele APK genereren
+ universalApk true // Indien true, ook een universele APK genereren

Copy

Proguard inschakelen om de grootte van de APK te verkleinen (optioneel)#

Proguard is een hulpmiddel dat de grootte van de APK enigszins kan verkleinen. Het doet dit door delen van de React Native Java-bytecode (en de afhankelijkheden) die uw app niet gebruikt, te strippen.

BELANGRIJK: Zorg ervoor dat u uw app grondig test als u Proguard hebt ingeschakeld. Proguard vereist vaak specifieke configuraties voor elke native bibliotheek die u gebruikt. Zie app/proguard-rules.pro.

Om Proguard in te schakelen, bewerkt u android/app/build.gradle:

/**
* Start Proguard om de Java-bytecode in release builds te verkleinen.
*/
def enableProguardInReleaseBuilds = true

Copy

Oude Android React Native-apps migreren om App Signing by Google Play te gebruiken#

Als u overstapt van een vorige versie van React Native, is de kans groot dat uw app de functie App Signing by Google Play niet gebruikt. Wij raden u aan om dat in te schakelen om te profiteren van dingen zoals automatische app-splitsing. Om te migreren van de oude manier van ondertekenen moet je beginnen met het genereren van een nieuwe upload key en dan de release signing config in android/app/build.gradle vervangen om de upload key te gebruiken in plaats van de release (zie sectie over signing config toevoegen aan gradle). Zodra dat is gedaan, moet u de instructies van de Google Play Help-website volgen om uw originele release-sleutel naar Google Play te sturen.

Standaardmachtigingen#

Standaard is INTERNET toestemming toegevoegd aan uw Android-app omdat vrijwel alle apps deze gebruiken. SYSTEM_ALERT_WINDOW permissie is toegevoegd aan uw Android APK in debug-modus, maar het zal worden verwijderd in productie.