背景需求
前段时间在做一个类似于开机向导的系统级应用时,碰到签名不一致,不能直接通过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替换成其他名称也是能获得对应签名文件的,我这里没有去验证这个猜想。
网友评论