Computers and Internet

Signing Android App in Xamarin

Just got my code signing cert from Digicert and I thought of signing my Android app to publish on Playstore, but there was this weird error

jarsigner error: java.security.SignatureException: private key algorithm is not compatible with signature algorithm

I tried command line and Xamarin Archive Manager but it continued to throw this error (and similar). Finally, I was able to make it. Here’s what I did –
First, switch to release mode, right click on Android project in Xamarin and select Archive…
This brings you to Archive Manager, which is also accessible from Tools menu. It takes a little while to generate an app archive. This will create an APK for you, ready to sign and distribute.
Create a KeyStore from P12
Android app signing uses Java Key Store. KeyStore is a repository of certs and keys. JDK has a tool – KeyTool where you can create a KeyStore and import your Cert
KeyStore

keytool -genkey -alias Gigabits -keystore GigabitsKeyStore.jks -keysize 1024 -validity 14000

Be sure to provide a keySize of 1024.
This Java  Bug explains how this value reverts behavior of ‘keytool’ and ‘jarsigner’ to use SHA1withDSA.
Import

keytool -v -importkeystore -srckeystore MyCert.p12 -srcstoretype PKCS12 -destkeystore MyCertKeyStore.jks -deststoretype JKS

Migrate to industry standard PKCS12

keytool -importkeystore -srckeystore MyCertKeyStore.jks -destkeystore MyCertKeyStore.jks -deststoretype pkcs12

 
ZipAlign
ZipAlign does some optimizations on the APK, kind of repackaging. It is a mandatory process.

zipalign.exe -f -v 4 com.My.App.apk com.My.App_aligned.apk

 
Sign in Archive Manager
I ditched jarsigner since it continued to complaint. Select Distribute > AdHoc in Archive Manager and add this keystore. “Save As” should now sign the app for you.
ActivityManager
 
 

I am a curious mind, always building and experimenting, trying things to decode their inner design. Kind of a small scale inventor ;-) I like to help people realise their passion.

Leave a Reply

Your email address will not be published. Required fields are marked *