简介
我们在做系统级的app开发时,肯定会遇到的问题就是给app签名了,像这种系统级的app开发,android系统是没有直接给出keystore的签名文件的,那么我们要怎么给自己的app签上系统级签名呢?下面介绍两种方法。
前提
要做系统签名必须要拿到的两个文件platform.x509.pem,platform.pk8它们存放在系统的/build/target/product/security/目录下。拿到这两个文件后就可以做我们的app签名了。系统下的其他签名类似,大家可以以此类推,举一反三。
CMD命令方式
java -jar signapk.jar platform.x509.pem platform.pk8 XXX.apk XXXNew.apk
这样我们生成的app就是有系统签名的app了,但是我们每次都要使用命令的方式来执行给我们开发调试的app签名是不是很烦,有没有更好的方式呢?下面就重点说下keysotre的方式。
keystore方式
最前面我们说了,系统没有提供keystore的签名给我们,那这个keystore是怎么来的?看来只有自己动手生成这个文件了,来看我们怎么制作这个keystore吧。
环境:Linux
文件:platform.x509.pem,platform.pk8
命令:
openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
openssl pkcs12 -export -in platform.x509.pem -out platform.p12 -inkey platform.pem -password pass:android -name androiddebugkey`
keytool -importkeystore -deststorepass android -destkeystore ./platform.keystore -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass android
依次执行完这3条命令后我们的签名文件platform.keystore就生成啦,接下来要做的事情就是导出app的时候使用这个签名就好了。nice~~~
这样一条一条命令的输入是不是很麻烦,并且可能会忘记部分参数的拼写,所以这里就要用到shell脚本了,根据这3条命令我们可以写一个小脚本,完成签名的生成。下面来看下个人写的一个脚本吧。这样就一劳永逸的解决了生成签名会忘记部分参数的问题了。
generatesignature.sh
#!/bin/sh
myFile="platform.pem"
if [ -f $myFile ]
then
echo "存在platform.pem platform.p12 platform.keystore,先删除!"
rm -f platform.pem platform.p12 platform.keystore
fi
echo "开始执行!!"
openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
echo "生成 platform.pem"
openssl pkcs12 -export -in platform.x509.pem -out platform.p12 -inkey platform.pem -password pass:android -name androiddebugkey
echo "生成 platform.p12"
keytool -importkeystore -deststorepass android -destkeystore ./platform.keystore -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass android
echo "生成 platform.keystore 成功"
注意:这里需要特别注意的地方就是,我这个kestore的生成是在Linux环境制作的,所以在windows环境下的朋友可能需要自己想点办法了。