安卓源码下apk进行platform签名的方法

news2024/11/27 11:54:55

目录

一 任意目录下创建一个文件夹

 二 该目录下需要准备的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 文件中包含的证书和私钥导入到 JKSJava 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 即为签名完成的文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/529048.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

抖音谋局本地生活“大蛋糕”|成都待慕电商

打开抖音APP,“同城”里囊括的美食、休闲娱乐、丽人美发、酒店民宿、周边旅游等让消费者们眼花缭乱,似乎正在打造另一个短视频版本的同城服务商。 4月25日,2023抖音生活服务生态伙伴大会在成都举行。《每日经济新闻》记者看到,活…

基于WiFi的CSI数据做呼吸频率检测-python版(含代码和数据)

一、概述 本Demo无需机器学习模型,Demo功能涉及的理论主要参考了硕士学位论文《基于WiFi的人体行为感知技术研究》,作者是南京邮电大学的朱XX,本人用python复现了论文中呼吸频率检测的功能。Demo实现呼吸速率检测的主要过程为: …

Java面试知识点(全)-设计模式三

Java面试知识点(全) 导航: https://nanxiang.blog.csdn.net/article/details/130640392 注:随时更新 18、责任链模式(Chain of Responsibility) 接下来我们将要谈谈责任链模式,有多个对象,每个对象持有对…

基于stm32mp157 linux开发板ARM裸机开发教程6:ARM 汇编语言程序设计(连载中)

前言: 目前针对ARM Cortex-A7裸机开发文档及视频进行了二次升级持续更新中,使其内容更加丰富,讲解更加细致,全文所使用的开发平台均为华清远见FS-MP1A开发板(STM32MP157开发板) 针对对FS-MP1A开发板&…

Scrapy 框架介绍

一、Scrapy是什么 Scrapy 是一个基于 Twisted 的异步处理框架,是纯 Python 实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可扩展性极强,可以灵活完成各种需求。我们只需要定制开发几个模块就可以轻松实现一个爬虫。…

索引有哪些优缺点?索引有哪几种类型?

目录 一、什么是索引? 二、索引的优点 三、索引的缺点 四、索引有哪几种数据类型? 一、什么是索引? 索引是一种能够帮组Mysql高效的从磁盘上检索数据的一种数据结构。在MySQL中的InnoDB引擎中,采取了B树的结构来实现索引和数据…

matlabR2021b启动很慢和初始化时间很长解决

工具:MatlabR2021b。 问题记录,在网上下载安装包后,安装后,发现软件启动时间很长。进入界面后软件需要较长时间的初始化。才能就绪。 查询原因为软件需要在启动是查询licence。 首先在安装文件夹中启动Activate MATLAB R2021b。…

python画直线的方法

python画直线的方法,下面介绍三种: 1、使用列表解析法,只需要添加一个数据类型的变量,然后在上面添加一系列的直线,即可得到一条直线。 5、使用循环解析法和 for循环解析法两种方法相结合来画直线,即可得到…

软件测试之jmeter性能测试让你打开一个全新的世界

一、Jmeter简介 1 概述 jmeter是一个软件,使负载测试或业绩为导向的业务(功能)测试不同的协议或技术。 它是 Apache 软件基金会的Stefano Mazzocchi JMeter 最初开发的。 它主要对 Apache JServ(现在称为如 Apache Tomcat…

IDEA入门使用

IDEA概述 ​ IDEA全称IntelliJ IDEA,是用于Java语言开发的集成环境,它是业界公认的目前用于Java程序开发最好的工具。 集成环境: ​ 把代码编写,编译,执行,调试等多种功能综合到一起的开发工具。 为什么要…

Java基础-判断和循环

1 流程控制语句 在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。 1.1 流程控制语句分类 ​ 顺序结构 ​ 判…

ChatGPT 如何不使用代理,国内直连

ChatGPT 如何不使用代理,国内直连 本来是自己在 cloudfare 上面搭建了域名解析,但是最近发现了其他的方案 域名代理 最开始是参考这个文章进行的配置,一直用的很好 使用 Cloudflare Workers 让 OpenAI API 绕过避免被封禁 最近由于 Open…

《微服务实战》 第八章 Spring Cloud 之 Hystrix

前言 多个微服务之间调用的时候,假如微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他的微服务,这就是所谓的"扇出"。 如果扇出的链路上某个微服务的调用响应的时间过长或者不可用,对微服A的调用就会占用越来越…

创新特征金字塔融合,ResNeXt引领YOLOv5高效率目标检测

目录 一、介绍1、YOLOv5简介2、ResNeXt简介3、目标检测简介 二、YOLOv5及其局限性1、YOLOv5的架构与原理2、YOLOv5的优势3、YOLOv5的局限性 三、ResNeXt与特征金字塔融合1、ResNeXt的基本原理2、ResNeXt的优势3、特征金字塔的基本原理4、特征金字塔的优势5、ResNeXt与特征金字塔…

JavaEE(系列3) -- 多线程(线程的中断与线程等待)

新内容开始之前,我们总结一个知识点. Thread类中的start方法和run方法的区别? start(): 用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程&#…

Nexus下载与安装详解

目前 Nexus 分为 Nexus 2.x 和 Nexus 3.x 两个大版本,在以往框架,有了3.x一定不会再更新2.x了,会继续向上延续3.x,4.x,而Nexus对于这两个版本是并行的关系。也就是2.x在更新迭代,3.x也在更新迭代&#xff0…

K8s基础12——etcd数据备份与恢复、集群版本升级、网络策略

文章目录 一、etcd备份与恢复1.1 kubeadm部署方式1.1.1 备份1.1.2 恢复 1.2 单etcd二进制部署方式1.2.1 部署1.2.2 备份1.2.3 恢复1.2.4 K8s集群二进制部署方式恢复 二、集群版本升级2.1 升级master节点2.2 升级node节点 三、网络策略3.1 核心字段释义3.2 测试案例案例1&#x…

20 KVM管理虚拟机-虚拟机生命周期示例

文章目录 20 KVM管理虚拟机-虚拟机生命周期示例20.1 创建虚拟机20.2 启动虚拟机20.3 重启虚拟机20.4 关闭虚拟机20.5 销毁虚拟机 20 KVM管理虚拟机-虚拟机生命周期示例 本节给出虚拟机生命周期管理相关命令的示例。 20.1 创建虚拟机 虚拟机XML配置文件为openEulerVM.xml # …

shellCode免杀技巧

目录 一、免杀简述 二、免杀方法 1.shellcode反转bypass 2.shellcode异或bypass 3.远程加载shellcode bypass 4.进程注入 5.未导出api bypass 6.掩日(进程注入工具) 其他的 本文章仅提供学习,切勿将其用于不法手段! 一、…

《编码——隐匿在计算机软硬件背后的语言》精炼——第17章(自动操作)

夫道成于学而藏于书,学进于振而废于穷。 文章目录 完善加法器加入代码的加法器扩大加数范围自由调用地址的加法器合并代码RAM和数据RAMJump指令硬件实现条件Jump指令零转移的硬件实现条件Jump指令的例子 总结 完善加法器 我们在第14章介绍了一个可以进行连加的加法…