Het maken en testen van PhoneGap/Cordova-apps op je eigen computer is niet lastig. De apps worden dan gesigneerd met een (tijdelijke, machinegebonden) debug-key en met deze key op je device geplaatst.
Anders wordt het als je je apps wilt publiceren in de Google Play Store. Dan moeten ze met een ‘echt’ certificaat worden ondertekend. Nu is dat proces niet zo lastig als bij Apple, waarbij je verplicht via het Apple Developer Portal moet werken, maar het kan toch nog een hele klus zijn.
Opties
Als je app gereed is, heb je verschillende opties:
- Signeren via Eclipse en de Android Developer Tools (als je met deze IDE werkt).
- Signeren via Android Studio. Android Studio gebruikt echter een andere build-tool (Gradle) dan PhoneGap/Cordova (Apache Ant), reden waarom het ook niet eenvoudig is een PhoneGap-app vanuit Android Studio te signeren.
- Handmatig signeren vanaf de command line.
Deze laatste optie is de optie die altijd werkt, ongeacht het platform (Mac/Pc/Linux) en de tool die je gebruikt. Ik heb van het complete proces een YouTube-video gemaakt. Daaronder worden de stappen nog kort samengevat, maar bekijk de video (15 min.) voor een complete walkthrough.
http://www.youtube.com/watch?v=EAzFAntSM3Q
Stappen
1. Maak een keystore. Bewaar de keystore op een veilige plaats. Onthoud je wachtwoord voor de keystore. Elke app heeft zijn eigen keystore. Maak nieuwe builds van de app (updates) met dezelfde keystore.
De opdracht luidt (vervang […] door gegevens van je eigen app)
keytool -genkey -v -keystore [appname-key].keystore -alias [alias_appName] -keyalg RSA -keysize 2048 -validity 10000
2. Compileer de app in release-mode. Maak hiervoor een bestand ant.properties in de root van je android-projectmap. Dit is de inhoud van ant.properties:
key.store=[/Pad/Naar/Jouw/keystores/hello-key.keystore]
key.alias=alias_[appname]
3. Typ de opdracht ant release. Ant maakt nu in de \bin map van het project een release-versie van de app.
3a. Krijg je de foutmelding sdk.dir is missing ? Dit vooral het geval als je de app voor het eerst in release-modus wilt maken, zo heb ik gemerkt. Bij updates gaat het meestal goed. Draai dan eerst een update van het project. De opdracht hiervoor is
android update project –p [/Pad/Naar/Jouw/Project/platforms/android] –subprojects
Typ daarna opnieuw de opdracht ant release.
Typ je wachtwoord (uit stap 1) als daar om gevraagd wordt.
4. Draai jarsigner. De opdracht hiervoor is:
cd \bin
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore [Pad/Naar/Appname-key.keystore] CordovaApp-release-unsigned.apk alias_[appName]
4a. Verifieer eventueel de apk. Deze stap is niet verplicht. De opdracht hiervoor is:
jarsigner -verify -verbose -certs CordovaApp-release-unsigned.apk
5. Draai zipalign. Dit comprimeert de app verder en zet alle bytes in de goede volgorde. De opdracht is:
zipalign -v 4 CordovaApp-release-unaligned.apk FinalAppName.apk
Dan heb je uiteindelijk een gesigneerde, uitgelijnde versie van je app in het bestand FinalAppName.apk. Deze versie kun je uploaden naar Google Play.
Bovenstaande is een verkorte (en ik hoop duidelijker) weergave van de pagina op http://developer.android.com/tools/publishing/app-signing.html.
Succes er mee!
Peter Kassenaar
-- 27 februari 2015