android开发者都知道apk需要签名,今天在网上搜索了一下apk签名的几种方式。这里列出来以防止忘记了。
1. 开发中对apk进行签名。 这个过程在build完成后自动进行,需要我们在IDE环境中配置keysotore文件路径。例如, 我们用androidstudio开发apk的时候,会在build.gradle制定debug/release build时的签名配置,如下所示:
signingConfigs { mitv { keyAlias 'mitv' keyPassword 'android' storeFile file('../mitv.keystore') storePassword 'android' } }buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.mitv } debug { signingConfig signingConfigs.mitv } }
上面的这个配置里,debug和release build的时候用了同一个签名配置,也就是用过来同一个keystore文件mitv.keystore.
这种方式的签名是在gradle build的时候就已经签名了。这是第一种签名方式,也是我们开发者常用的签名方式。
2. 如果我们已经拿到了一个现成的apk, 需要对这个apk进行签名该如何做呢? 这就需要用到android自带的signapk.jar这个工具jar包了,还需要
我们的证书和私钥文件, 执行如下命令即可(MyDemo.apk是需要重新签名的文件, MyDemo_signed.apk是前后的文件):java -jar signapk.jar platform.x509.pem platform.pk8 MyDemo.apk MyDemo_signed.apk
3. 如何从pem文件和pk8文件生成keystore文件呢? 执行下面的命令就可以:
1)把pk8转换成pk12格式
openssl pkcs8 -in shared.pk8 -inform DER -outform PEM -out shared.priv.pem -nocrypt
2) 生成pk12的密钥文件
openssl pkcs12 -export -in shared.x509.pem -inkey shared.priv.pem -out shared.pk12 -name androiddebugkey
3) 生成keystore
keytool -importkeystore -deststorepass android -destkeypass android -destkeystore debug.keystore -srckeystore shared.pk12 -srcstoretype PKCS12 -srcstorepass android -alias androiddebugkey
4. 如何使用keytool命令列出一个keystore文件里的entries呢? 用下面的命令:
keytool -list -keystore debug.keystore
这个命令的执行结果如下:
lierjian@lierjian-OptiPlex-7010:~/work/code/MiTV/MiTVOnlineVideoNew/duokantv/proj.android/m6_sig/test$ keytool -list -keystore debug.keystore
Enter keystore password:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
androiddebugkey, Mar 22, 2017, PrivateKeyEntry,
Certificate fingerprint (SHA1): 08:32:F8:EB:8B:B2:28:12:1A:6E:A9:0C:AD:D8:9D:58:2C:B1:9C:7D