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

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

相关推荐
B.-2 小时前
Flutter 应用在真机上调试的流程
android·flutter·ios·xcode·android-studio
有趣的杰克2 小时前
Flutter【04】高性能表单架构设计
android·flutter·dart
大耳猫7 小时前
主动测量View的宽高
android·ui
帅次10 小时前
Android CoordinatorLayout:打造高效交互界面的利器
android·gradle·android studio·rxjava·android jetpack·androidx·appcompat
枯骨成佛10 小时前
Android中Crash Debug技巧
android
kim565915 小时前
android studio 更改gradle版本方法(备忘)
android·ide·gradle·android studio
咸芝麻鱼16 小时前
Android Studio | 最新版本配置要求高,JDK运行环境不适配,导致无法启动App
android·ide·android studio
无所谓จุ๊บ16 小时前
Android Studio使用c++编写
android·c++
csucoderlee16 小时前
Android Studio的新界面New UI,怎么切换回老界面
android·ui·android studio
kim565916 小时前
各版本android studio下载地址
android·ide·android studio