安卓系统签名的制作与使用(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

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

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

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

相关文章

VUE3【实用教程】(2024最新版)

VUE3 概述 Vue 2 已于 2023 年 12 月 31 日停止维护,请用 Vue 3 vue3 的优势 性能更好体积更小更好的 TS 支持更好的代码组织更好的逻辑抽离更多新功能 vue3 升级的新功能 https://sunshinehu.blog.csdn.net/article/details/137834437 API 风格 vue3 有两种A…

智能合约语言(eDSL)—— 并行化方案——调度算法

3、调度算法 处理区块的时候,我们会同时启动多个线程去执行多个交易,这个时候我们需要一个良好的调度策略,来决定当前的线程是应该执行交易还是验证交易、提前结束还是立刻重新执行交易等,只有有一个良好调度策略才能保证所有交易都稳定有序的执行; 线程数量 这是一个不…

【Android】常用基础布局

布局是一种可用于放置很多控件的容器,它可以按照一定的规律调整内部控件的位置,从而编写出精美的界面,布局内不单单可以放控件,也可以嵌套布局,这样可以完成一些复杂的界面,下面就来认识一些常用的布局吧。…

价格较低,功能最强?OpenAI 推出 GPT-4o mini,一个更小、更便宜的人工智能模型

OpenAI美东时间周四推出“GPT-4o mini”,入局“小而精”AI模型竞争,称这款新模型是“功能最强、成本偏低的模型”,计划今后整合图像、视频、音频到这个模型中。 OpenAI表示,GPT-4o mini 相较于 OpenAI 目前最先进的 AI 模型更加便…

MOGONET:患者分类与biomarker识别

为了充分利用组学技术的进步并更全面地了解人类疾病,需要新的计算方法来综合分析多种类型的组学数据。多组学图卷积网络 (MOGONET,Multi-Omics Graph cOnvolutional NETworks)是一种用于生物医学分类的新型多组学整合方法。MOGONET 包含特定组学的学习和…

SpringBoot整合Swagger报错:Failed to start bean ‘documentationPluginsBootstrapper

文章目录 1 问题背景2 问题原因3 修改SpringBoot配置文件 application.properties参考 1 问题背景 Swagger是SpringBoot中常用的API文档工具,在刚接触使用的时候,按照通用的代码进行配置,发现报错了 [main] ERROR org.springframework.boot…

2024-7-19 IT新闻

目录 微软蓝屏 全球IT支出持续增长 科技行业裁员动态 微软蓝屏 事件概述: 2024年7月19日,微软系统遭遇技术故障,导致全球性信息技术中断事件。这场事件对全球多个行业造成了广泛影响,包括航空、银行、医疗、交通等多个关键领域…

Java枚举的一些易忽视点

1、和equals方法 枚举相等比较中,和equals方法没有任何区别,查看源码你会发现,equals方法的实现就是通过判断的。 2、compareTo方法 Enum类的compareTo方法比较的其实是枚举的顺序大小,所以先定义的枚举项要“小于”后定义的枚…

MySQL实现主从复制的步骤,包括配置读写分离的方法。—— 慧哥充电桩开源平台

下载源码 【慧哥开源充电桩平台】 https://liwenhui.blog.csdn.net/article/details/134773779?spm1001.2014.3001.5502 MySQL主从复制是一种常见的数据备份和读写分离策略。下面是实现MySQL主从复制的步骤: 配置主服务器(Master)&#xff1…

【Android】Fragment的静态动态创建以及两种创建方式的生命周期

参考: 33.3-Fragment的创建-静态创建2_哔哩哔哩_bilibili Fragment的创建_从现有代码创建foutran-CSDN博客 【Android】Fragment的基本用法、Fragment和活动间的通信、Fragment的生命周期、动态加载布局的技巧_android fragment-CSDN博客 文章目录 Fragment的静态创…

linux LED代码设计

设计目标&#xff1a; 写RGB LED灭、亮、闪烁等效果&#xff0c;不同颜色也需要设置 #include <iostream> #include <unistd.h> // 对于usleep() #include <fcntl.h> // 对于open(), close() #include <sys/ioctl.h> // 对于ioctl() #include <li…

C++案例四:简易记事本程序

文章目录 程序介绍代码说明包含必要的头文件主函数定义变量定义主循环显示菜单和读取选择处理用户选择程序介绍 编写一个简单的记事本程序,可以帮助用户添加和查看笔记。这个案例可以练习C++中的输入输出、向量(std::vector)、字符串处理(std::string)、以及简单的控制结…

各种复现,保证质量

代码复现&#xff0c;文献复现&#xff0c;模型复现&#xff0c;算法复现&#xff0c;文章复现&#xff0c;创新点等等&#xff0c;python/matlab/c语言/r语言均可&#xff0c;保证高质量完成&#xff0c;可接急单&#xff0c;不成功不收费&#xff01;

前端小知识点——按钮之间出现很小的空隙如何规避

前端小知识点——按钮之间出现很小的空隙如何规避 文章介绍问题再现总结 文章介绍 本文主要介绍页面中两个按钮相邻时会出现一点空隙&#xff0c;导致在后续自定义填充的时候出现换行或其它问题&#xff0c;特此记录。 问题再现 这个图片能看到我们给外面的div设置的是300的宽…

discuz手机版发帖提示“网络出现问题,请稍后再试”

大家好&#xff0c;我是网创有方。今天分享一个discuz发帖报错的问题。 问题描述&#xff1a;discuz手机网页端发帖提示“网络出现问题&#xff0c;请稍后再试”&#xff0c;但是实际上帖子已经发布成功。 本次记录下分析过程&#xff1a; 第一步&#xff1a;打开宝塔&#…

C++:左值/右值引用、移动语义/std::move、万能引用/完美转发std::forward 详解

你能学到 左值 与 右值左值引用 与 右值引用 基本用法与作用拷贝构造函数 与 移动构造函数移动语义 与 std::move万能引用 与 引用折叠完美转发&#xff1a;std::forward 前言 本文代码片段中变量命名规则如下&#xff1a; 小写字母&#xff1a;一般类型的变量&#xff08;非…

egret 白鹭的编译太慢了 自己写了一个

用的swc 他会检测git的改变 const simpleGit require(simple-git); const fs require(fs); const path require(path); // 初始化 simple-git const swc require(swc/core); const baseDir D:\\project; const gameDir game\\module\\abcdefg; const gitDir D:\\projec…

Linux_线程的使用

目录 1、线程与进程的关系 2、线程的优缺点 3、创建线程 4、查看启动的线程 5、验证线程是共享地址空间的 6、pthread_create的重要形参 6.1 线程id 6.2 线程实参 7、线程等待 8、线程退出 9、线程取消 10、线程tcb 10.1 线程栈 11、创建多线程 12、__th…

VS2019安装MFC组件

VS2019支持的MFC版本是mfc140 ~ mfc142版本&#xff0c;它兼容VS2015、VS2017之前的老版本程序。 一、MFC的历史版本 MFC的历史版本如下&#xff1a; IDE发布时间工具集版本MSC_VERMSVCMFC版本dllVisual C6.01998V601200MSVC6.06.0mfc42.dll、mfcce400.dllVisual Studio 2002…

【面试题】手撕缓存LRU

设计LRU(最近最少使用)缓存结构&#xff0c;该结构在构造时确定大小&#xff0c;假设大小为K&#xff0c;并有如下两个功能 put(key, value)&#xff1a;将记录(key, value)插入该结构get(key)&#xff1a;返回key对应的value值 对于put(key, value)来说&#xff0c;我们需要…