[Rom]如何用Android源码生成签名文件

Posted 灰灰的Rom笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Rom]如何用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

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

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

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

这里的 androidandroiddebugkey 可以自行替换,但为了方便记忆,我们尽量将这两个参数与 IDE 默认的签名文件(debug.keystore)内容保持一致。

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 源码有mediaplatformreleasekeysharedtestkeyverity这6种签名,个人猜测将上面步骤中的platform替换成其他名称也是能获得对应签名文件的,我这里没有去验证这个猜想。

原文出自我的简书笔记:https://www.jianshu.com/p/bee31edd6e10
现已迁移至此。


支持一下:

以上是关于[Rom]如何用Android源码生成签名文件的主要内容,如果未能解决你的问题,请参考以下文章

如何用Android NDK编译FFmpeg

Android 根据源码文件生成.jks的系统签名

android 系统签名

Cordova android - 如何用生成的替换自定义 build.gradle

Android系统签名

android中如何用代码生成View控件