文章

Android系统签名转换为keystore

文章目录

为啥需要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即可)

本文参考文章:

  1. Unable to find debug key in keystore in Eclipse
  2. Android系统签名转换为keystore
发表评论