目录
一 任意目录下创建一个文件夹
二 该目录下需要准备的5个文件
三 执行命令
四 生成结果
一 任意目录下创建一个文件夹
二 该目录下需要准备的5个文件
上述五个文件,
前四个可以从编译好的安卓源码工程目录下复制,
第五个是自己需要签名的apk文件
- ①platform.pk8
路径:DCU_CODE/buildsystem/android10/build/target/product/security/platform.pk8
文件名
platform.pk8
通常是 Android 系统中的一个签名密钥文件。在 Android 平台上,应用程序必须使用数字证书进行签名,以便系统可以验证其身份并确保它们没有被篡改。
platform.pk8
是用于签署 Android 平台核心组件的密钥文件,例如系统服务和框架应用程序。这些组件通常由设备制造商或 Android 平台开发团队签名。该文件只能由具有特定权限的人员访问和使用。
- ② platform.x509.pem
路径:DCU_CODE/buildsystem/android10/build/target/product/security/platform.x509.pem
platform.x509.pem
文件通常是 Android 系统中用于验证应用程序身份的证书文件。在 Android 平台上,应用程序必须使用数字证书进行签名,以便系统可以验证其身份并确保它们没有被篡改。
platform.x509.pem
文件包含了一个或多个数字证书,这些证书用于验证应用程序的身份。这些证书由设备制造商或 Android 平台开发团队签名,并与platform.pk8
中的私钥配对使用。当用户安装一个应用程序时,Android 系统会检查该应用程序是否使用有效的证书进行签名,并且该证书是否与设备上的已知证书匹配。如果证书无效或不匹配,则系统将阻止应用程序安装或运行。
- ③libconscrypt_openjdk_jni.so
路径:DCU_CODE/buildsystem/android10/out/host/linux-x86/lib64/ libconscrypt_openjdk_jni.so
libconscrypt_openjdk_jni.so 是一个用于加密和安全通信的库文件。具体来说,它是 Google Conscrypt 库的 JNI 绑定,允许 Java 应用程序使用 OpenSSL 的加密算法进行加密和解密操作。
Java 运行时环境默认使用自己的加密实现,但在某些情况下,如与其他平台(如 OpenSSL)通信或执行特定加密任务时,使用 OpenSSL 实现可能更好。此时,可以使用 libconscrypt_openjdk_jni.so 作为替代方案。
总的来说,libconscrypt_openjdk_jni.so 可以提供更高级别的加密和安全性,同时提供跨平台兼容性。
- ④sign.apk.jar
路径:DCU_CODE/buildsystem/android10/out/host/linux-x86/framework/sign.apk.jar
签名(signing)是 Android 应用程序开发过程中的一个重要步骤。应用程序必须被签名,以验证其来源并保证应用程序没有被篡改。 APK (Android Package)文件是 Android 应用程序的安装包格式,它包含了应用程序的所有组件和资源文件。在将 APK 文件部署到设备上之前,需要使用 keytool 工具生成数字证书,然后使用 jarsigner 工具对 APK 进行签名。
在 Android 开发中,sign.apk.jar 是一个用于签名 APK 文件的工具,它可以通过命令行或脚本调用。该工具能够将特定的数字证书信息与 APK 文件进行关联,从而确保用户下载并安装的应用程序来自可信来源,并且没有被篡改
- ⑤待签名的apk文件
三 执行命令
- openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
这是一个使用 OpenSSL 工具将 PKCS #8 格式的密钥转换为 PEM 格式的命令。其中:
- openssl 是 OpenSSL 工具的命令行程序。
- pkcs8 表示要转换的密钥格式是 PKCS #8。
- -inform DER 表示输入文件的格式为 DER 编码。
- -nocrypt 表示输出的 PEM 文件不需要加密。
- -in platform.pk8 表示输入文件名为 platform.pk8,即要转换的 PKCS #8 格式的密钥文件。
- -out platform.pem 表示输出文件名为 platform.pem,即转换后的 PEM 格式的密钥文件。
②openssl pkcs12 -export -in platform.x509.pem -out platform.p12 -inkey platform.pem -password pass:123456 -name "alias_name"
这是一个使用 OpenSSL 工具将 X.509 证书和私钥打包成 PKCS #12 文件的命令。其中:
- openssl 是 OpenSSL 工具的命令行程序。
- pkcs12 表示要执行 PKCS #12 相关的操作。
- -export 表示要进行导出(打包)操作。
- -in platform.x509.pem 表示输入文件名为 platform.x509.pem,即要打包的 X.509 证书文件。
- -out platform.p12 表示输出文件名为 platform.p12,即打包后的 PKCS #12 文件。
- -inkey platform.pem 表示要使用的私钥文件为 platform.pem。
- -password pass:123456 表示设置 PKCS #12 文件密码为 123456。
- -name "alias_name" 表示在 PKCS #12 文件中标识此证书的别名为 alias_name。
执行该命令时,会提示您输入 PKCS #12 密码两次以确认。
③keytool -importkeystore -deststorepass 123456 -destkeystore platform.jks -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass 123456
这是一个使用 keytool 工具将 PKCS #12 文件中包含的证书和私钥导入到 JKS(Java KeyStore)文件中的命令,其中:
- keytool 是 Java 提供的管理密钥和证书的工具。
- -importkeystore 表示要执行导入操作。
- -deststorepass 123456 表示设置目标 JKS 文件的密码为 123456。
- -destkeystore platform.jks 表示指定目标 JKS 文件的名称为 platform.jks。
- -srckeystore platform.p12 表示指定源 PKCS #12 文件的名称为 platform.p12。
- -srcstoretype PKCS12 表示指定源 PKCS #12 文件的类型为 PKCS #12。
- -srcstorepass 123456 表示指定源 PKCS #12 文件的密码为 123456。
执行该命令时,会提示您输入源 PKCS #12 文件的密码和确认是否信任证书等信息。成功导入后,在 platform.jks 文件中就可以访问 PKCS #12 文件中包含的证书和私钥了。
④java -Djava.library.path=. -jar signapk.jar platform.x509.pem platform.pk8 app-NeedSign.apk app-SignFinish.apk
这是一个使用 Java 程序运行一个名为 signapk.jar 的 JAR 文件进行 APK 签名的命令,其中:
- java 表示启动 Java 运行环境。
- -Djava.library.path=. 表示将当前目录作为本地库文件的加载路径。
- -jar signapk.jar 表示要执行的 JAR 文件为 signapk.jar。
- platform.x509.pem 和 platform.pk8 分别是包含签名证书和私钥的文件,用于对 APK 进行签名。
- app-NeedSign.apk 是待签名的 APK 文件名。
- app-SignFinish.apk 是签名后生成的新 APK 文件名。
执行该命令时,会通过 signapk.jar 程序读取 platform.x509.pem 和 platform.pk8 文件中的证书和私钥,对 app-debug.apk 文件进行签名,并将签名后的结果保存到 app-debug_sign.apk 文件中。完成签名后,您可以将 app-debug_sign.apk 安装到设备上或发布给用户。
命令效果如下:
四 生成结果
生成的 app-SignFinish.apk 即为签名完成的文件