当前位置: 首页 > news >正文

安卓系统签名的制作与使用(SignApk.jar)踩坑记录

看到这里的你应该能区分apk签名跟系统签名吧,如果无法区分的请看下面链接

android 应用的证书签名跟系统签名

看过上面的文章应该知道系统签名需要的文件清单大概有哪些

前两个是编译安卓系统时在build目录下,详细目录为 /build/target/product/security

每组签名用途不同,进一步解释理解就是:

platform 签名
用途:platform签名主要用于系统核心应用,这些应用直接与Android操作系统紧密集成,并执行关键的系统级功能。
特性:
在AndroidManifest.xml中通过设置android:sharedUserId="android.uid.system"表明该应用属于系统进程组,拥有更高的权限。
使用platform签名的应用程序通常运行在system UID下,可以直接访问受保护的API和资源,并且可以和其他system用户ID下的应用共享数据。
由于这类应用的安全敏感性,它们必须使用由设备制造商或系统开发者持有的私钥进行签名。
media 签名
用途:media签名主要应用于与媒体处理和下载服务相关的系统组件,比如默认的媒体播放器、下载管理器等。
特性:
同样需要在manifest文件中声明特定的共享用户ID,即android:sharedUserId="android.media"。
这类应用同样享有较高的权限,允许它们执行与多媒体处理相关的核心操作,例如读取和写入多媒体内容,以及管理网络下载任务等。
media签名应用虽然不如platform签名应用权限高,但仍然具有超出普通第三方应用的特殊权限。
shared 签名
用途:shared签名是用于那些需要与其他特定系统进程(如home屏幕或者联系人应用)之间共享数据和资源的应用。
特性:
设置android:sharedUserId="android.uid.shared"后,应用会以同一个用户ID运行,从而能够互相访问彼此的数据目录。
shared签名的应用一般不涉及最底层的系统服务,而是针对系统内部具有一定协作关系的服务或者组件提供数据共享能力。
testkey 签名
用途:testkey是Android编译系统中的默认签名密钥,当一个APK没有明确指定LOCAL_CERTIFICATE变量时,系统会使用testkey对其进行签名。由于testkey是公开且容易获取的,因此它并不适用于正式发布或安全要求高的应用。

普通的安卓应用开发用户可从定制系统的厂商获取该文件

如果使用的设备厂商没有对这个改动过,则使用google给的这两个就行了;如果厂商做过处理,需要向厂商索取该文件

第三个文件signapk.jar 可从安卓工具箱中下载

安卓工具下载箱

安卓工具箱: http://www.top139.com/AndroidTools.html

直接点击工具下载即可,解压后可得如下四个文件,我们需要的signapk.jar也在其中

新建一个signApk的文件夹,这个文件夹可以使任意路径,后面会配置java环境

将你进行过证书签名的apk也放到signApk目录下,此时目录下有如下文件

安装JDK

各版本jdk下载

java8 第三方下载

这个java8安装不会自动配置环境变量了,得自己手动配置

【此电脑】上,右键选择【属性】--> 【高级系统设置】-->【环境变量】 

java8如果默认路径安装的花应该在C:\Program Files (x86)\Java\jre-1.8路径下

系统变量里面的【Path】变量,进行【编辑】,编辑时新增一行记录,填入的值为:%JAVA_HOME%\bin,然后点击【确定】 

再新建一条全路径 C:\Program Files (x86)\Java\jre-1.8\bin

新建一个cmd窗口,执行java -version

直接在搜索框输入cmd回车

输入java -version

以上表示java环境配置成功

 如果java环境有问题的可以参考这个老哥的博客

Windows系统安装Java环境

如上表示java环境变量配好了(高版本自动配置)

进行系统签名

进入上面的signApk目录

在上面的文件路径中输入cmd 回车打开命令行

输入如下命令:

java -jar signapk.jar platform.x509.pem platform.pk8 app-release.apk app_signed.apk

命令里面需要注意的就是两个红色名字,第一个名字是你要签名的apk,第二个名字是签名后的apk

注意:读过我开篇链接的应该主要到需要在清单文件中加上

我这个是android studio版本太高,使用的sdk版本太高导致的,直接点击图中红框部分即可,不予理会

这样就好了

查了下,sdk版本有点高

执行命令

如果提示这个错误标识jdk版本过高

如果你正在使用的是 Java 9 或更高版本,sun.misc.BASE64Encoder 和 sun.misc.BASE64Decoder 已经不再是公共 API 的一部分,因此应该避免使用这些内部 API。

先把原来安装的jdk卸载再安装java8

再次执行命令

java -jar signapk.jar platform.x509.pem platform.pk8 app-release.apk app_signed.apk

以上表示成功生成了系统签名文件

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Vue3】从零开始编写项目
  • 今日总结:雪花算法,拉取在线用户
  • 深入理解Linux网络(二):UDP接收内核探究
  • tg小程序前端-dogs前端源码分析
  • mongodb数据导出与导入
  • 【20】读感 - 架构整洁之道(二)
  • 基于springboot+vue+uniapp的农场管理系统小程序
  • Yum包下载
  • 【python doris】python连接doris数据库,并查询返回数据框
  • <数据集>pcb板缺陷检测数据集<目标检测>
  • Socket、WebSocket 和 MQTT 的区别
  • c++基础(类和对象中)(类的默认成员函数)
  • 使用Event Sourcing模式管理应用状态
  • c++图的基本操作
  • 塔子哥的题解点赞方案-美团2023笔试(codefun2000)
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • css的样式优先级
  • HTTP 简介
  • java 多线程基础, 我觉得还是有必要看看的
  • Netty 4.1 源代码学习:线程模型
  • October CMS - 快速入门 9 Images And Galleries
  • springboot_database项目介绍
  • Transformer-XL: Unleashing the Potential of Attention Models
  • ViewService——一种保证客户端与服务端同步的方法
  • webpack入门学习手记(二)
  • 开发基于以太坊智能合约的DApp
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 什么软件可以剪辑音乐?
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • AI算硅基生命吗,为什么?
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • ‌JavaScript 数据类型转换
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • #预处理和函数的对比以及条件编译
  • (2)MFC+openGL单文档框架glFrame
  • (2024)docker-compose实战 (8)部署LAMP项目(最终版)
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (翻译)terry crowley: 写给程序员
  • (三十五)大数据实战——Superset可视化平台搭建
  • (数据结构)顺序表的定义
  • (转)h264中avc和flv数据的解析
  • .dwp和.webpart的区别
  • .gitignore文件设置了忽略但不生效
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .net6 webapi log4net完整配置使用流程