为啥需要keystore
通常,我们在做系统用户开发时,需要给应用加上系统签名,使其拥有系统权限,签名方式可以使用系统源码中的platform.pk8、platform.x509.pem、signapk.jar对应用签名。
PS:参考之前的文章《利用signapk.jar工具对apk文件进行签名》
这种方法对于开发者来说非常不方便,每次编译完成之后还有进行签名操作。因此考虑把签名文件转成为keystore文件,这样Eclipse和Android Studio可以导入签名文件并一键生成签名后的apk。
keystore的生成
PS:进入进入有platform.x509.pem、platform.pk8等的目录:/build/target/product/security
第一步
openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out shared.priv.pem -nocrypt
第二步
其中的water是keyAlias,你可以换成自己的关键字
openssl pkcs12 -export -in platform.x509.pem -inkey shared.priv.pem -out shared.pk12 -name water
输入如此命令后提示输入[Enter Export Password],输入两次android(这里好像只能输入android?具体原因不知)。我测试过用其他的比如字符串为water或者其他的,最后一步通不过。
有如下提示:
keytool error: java.io.IOException: failed to decrypt safe contents entry: javax.crypto.BadPaddingException: Given final block not properly padded
第三步
-alias water 是我们上面设置的keyAlias
keytool -importkeystore -deststorepass android -destkeypass android -destkeystore source.keystore -srckeystore shared.pk12 -srcstoretype PKCS12 -srcstorepass android -alias water
经过编译,会生成一个source.keystore
keystore的使用
Android Studio 修改module中的build.gradle
android { signingConfigs { release { storeFile file('E:\\Andorid_Workplace\\key_store\\source.keystore') storePassword 'android' keyAlias = 'water' keyPassword 'android' } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release } debug { signingConfig signingConfigs.release } }
Eclipse的使用
在Window->Preferences->Android->Build->Custom debug keystore 选择source.keystore ,点击apply 就可以使用eclipse直接运行调试了。
但是,如果上面编译的source.keystore中的keyAlias不是androiddebugkey(比如我的是water),就会有如下的提示:
Unable to find debug key in keystore!
修改这个问题就是在编译keystone时keyAlias设置为androiddebugkey就可以解决问题。(PS:把我上面的water改成androiddebugkey即可)
本文参考文章: