MTK平台如何用Android源码生成签名文件

背景需求

前段时间在做一个类似于开机向导的系统级应用时,碰到签名不一致,不能直接通过AS部署到样机的问题。一开始我的做法是,先在AS里面调试好,然后签名打包成apk,然后把apk放到Android 源码下,利用源码的platform签名文件,重新给apk签名,然后再push到样机上。这样挺有效的,三五次还能忍,但是频繁调的时候,折腾的那叫一个心累。因此就在想可不可以把源码的签名文件放到AS里面,这样就可以一步到位直接 run 进样机呢?然后一通百度Google,终于发现了如下这个办法。

准备工作

首先在 Android 源码目录执行如下命令,切到 security 目录:

cd build/target/product/security/

然后执行 ls -la 可以查看目录下的文件:

shawn:/....../build/target/product/security(master)$ ls -la
total 68
drwxrwxr-x 2 shawn shawn 4096  7月 11 18:07 .
drwxrwxr-x 3 shawn shawn 4096  7月 27 20:20 ..
-rw-rw-r-- 1 shawn shawn  260  7月 11 18:07 Android.mk
-rw-rw-r-- 1 shawn shawn 1216  7月 11 18:07 media.pk8
-rw-rw-r-- 1 shawn shawn 1675  7月 11 18:07 media.x509.pem
-rw-rw-r-- 1 shawn shawn 1216  7月 11 18:07 platform.pk8
-rw-rw-r-- 1 shawn shawn 1675  7月 11 18:07 platform.x509.pem
-rw-rw-r-- 1 shawn shawn 3123  7月 11 18:07 README
-rwxrwxr-x 1 shawn shawn 1217  7月 11 18:07 releasekey.pk8
-rwxrwxr-x 1 shawn shawn 1716  7月 11 18:07 releasekey.x509.pem
-rw-rw-r-- 1 shawn shawn 1218  7月 11 18:07 shared.pk8
-rw-rw-r-- 1 shawn shawn 1675  7月 11 18:07 shared.x509.pem
-rw-rw-r-- 1 shawn shawn 1217  7月 11 18:07 testkey.pk8
-rw-rw-r-- 1 shawn shawn 1675  7月 11 18:07 testkey.x509.pem
-rw-rw-r-- 1 shawn shawn  524  7月 11 18:07 verity_key
-rw-rw-r-- 1 shawn shawn 1219  7月 11 18:07 verity.pk8
-rw-rw-r-- 1 shawn shawn 1444  7月 11 18:07 verity.x509.pem

其中的 platform.pk8 是制作系统签名需要的文件。

详细步骤

1、在 security 目录下,执行命令:

openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem

此时会在当前目录生成临时文件 platform.pem 。

2、接着执行如下命令,将在目录下生成 platform.p12 文件,它本质上应该就是一个数字证书。

openssl pkcs12 -export -in platform.x509.pem -out platform.p12 -inkey platform.pem -password pass:android -name androiddebugkey

这里的 android 和 androiddebugkey 可以自行替换,但为了方便IDE识别,我们尽量将这两个参数与 IDE 默认的签名文件内容保持一致。

3、然后再执行如下命令:

keytool -importkeystore -deststorepass android -destkeystore ./platform.jks -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass android

这里执行后会有如下提示信息:

shawn:/....../build/target/product/security(master)$ keytool -importkeystore -deststorepass android -destkeystore ./platform.jks -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass android
Entry for alias androiddebugkey successfully imported.
Import command completed:  1 entries successfully imported, 0 entries failed or cancelled

1 个成功,0 个失败或取消,说明命令执行成功,已经在当前目录下生成了 platform.jks 文件,而这个文件就是可以用在 Eclipse 或 Android Studio 里面的签名文件了。

命令里面的 platform.jks 对应的就是生成的签名文件的名称,这个名字可以自行修改,而且后缀也可以换成 .keystore,例如 debug.keystore。

4、然后将这个 platform.jks 拷贝到自己的目录下,并在IDE中使用这个签名文件签名
apk,或者直接将 IDE 默认的签名文件替换掉,AS 也可以修改编译脚本。

5、此时IDE打包的 apk 就可以直接安装到拥有相同platform签名的机器中了。

说明

1、这个方法借鉴的别人的,但忘了记下原始链接。
2、方法里面使用的是platform签名,但Android源码有media、platform、releasekey、shared、testkey、verity这6种签名,个人猜测将上面步骤中的platform替换成其他名称也是能获得对应签名文件的,我这里没有去验证这个猜想。

你可能感兴趣的:(MTK平台如何用Android源码生成签名文件)