把Android系统签名弄成jks

把Android系统签名弄成jks假设我们得到了系统签名文件:platform.pk8、platform.x509.pem,还需要一个用于签名的文件:signapk.jar,这里提供了一份下载连接,可供练习使用:链接:https://pan.baidu.com/s/1OiBcVyhZVqTulb6HXwcqHA提取码:7g81不同的系统,系统签名是不一样的,所以你们下载我的这个签名文件是用不到你的系统上的,但是signapk.jar是通用的,什么系统签名都可以使用他。当你有你的系统签名文件时,如何把一个apk签名为系统签名呢?如下:

大家好,又见面了,我是你们的朋友全栈君。

一、应用使用系统签名

假设我们得到了系统签名文件:platform.pk8、platform.x509.pem,还需要一个用于签名的文件:signapk.jar,这里提供了一份下载连接,可供练习使用:链接:https://pan.baidu.com/s/1OiBcVyhZVqTulb6HXwcqHA 提取码:7g81

有时候我们找系统提供商要系统签名时,可能给的文件很多,如下:
在这里插入图片描述
其实真正只需要用到platform.pk8、platform.x509.pem即可。

不同的系统,系统签名是不一样的,所以你们下载我的这个签名文件是用不到你的系统上的,但是signapk.jar是通用的,什么系统签名都可以使用他。

当你有你的系统签名文件时,如何把一个apk签名为系统签名呢?如下:

  1. 把platform.pk8、platform.x509.pem、signapk.jar、app.apk放到同一个目录下

  2. CMD进入到上面的目录中,然后输入如下命令:

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

    注:这里app.apk就是你的App,此App不论是有签名还是没签名都是可以的,通过上面的命名后,签名就会变成系统的签名了。

这有一篇文章:应该是需要在Linux系统下进行操作的:https://blog.csdn.net/georgebindragon/article/details/106253192

注:一个应用要想使用系统签名,还需要在清单文件中设置一个属性,如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:sharedUserId="android.uid.system">

我们使用adb命令安装一个没有签名的apk

adb install unsigned.apk

此时会报错,如下:

Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

INSTALL_PARSE_FAILED_NO_CERTIFICATES翻译过来就是:安装解析失败,没有证书(签名)

使用adb命令安装一个有系统签名的apk,但是安装到一个不匹配的android系统上,会报错如下:

Failure [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE]

INSTALL_FAILED_SHARED_USER_INCOMPATIBLE翻译过来就是:安装失败,共享用户不兼容(其实说的就是系统签名与所安装的手机不兼容)

二、把系统签名弄成jks签名文件

1、把platform.pk8、platform.x509.pem放在同一个目录下,然后cmd中进入这个目录。
2、生成platform.pem,输入如下命令:

openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem

如果提示没有openssl命令,则需要先安装openssl,下载地址:http://slproweb.com/products/Win32OpenSSL.html,一般我们下载64位的exe,且容量大的那个,如下:
在这里插入图片描述
预防下载连接失效,这里也提供一个百度网盘下载:链接:https://pan.baidu.com/s/1gFpPMwfwCTpty7xCdiEZ2A 提取码:1234

安装后之后,把安装目录下的bin目录设置到path环境变量中即中。

3、生成platform.p12,命令如下:

openssl pkcs12 -export -in  platform.x509.pem -out platform.p12 -inkey  platform.pem -password pass:123456 -name key0

注:这里的123456为密码,key0为别名,可以自行设置。
4、生成platform.jks,命令如下:

keytool -importkeystore -deststorepass 123456 -destkeystore ./platform.jks -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass 123456

注:这里有两个123456,都是密码,与前一步设置的密码保持一致。

这一步,会报出一个警告,如下:

Warning:
JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore -srckeystore ./platform.jks -destkeystore ./platform.jks -deststoretype pkcs12” 迁移到行业标准格式 PKCS12。

可以忽略它,也可以按它说的输入那个命令:

keytool -importkeystore -srckeystore ./platform.jks -destkeystore ./platform.jks -deststoretype pkcs12

到这里,我们就有了一个platform.jks的系统签名文件了,以后打包apk就像平常那样打包即可,可以把debug的签名也设置为这个,这样在AndroidStudio中可以直接运行apk来调试。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151996.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • navicat for mysql 激活码【在线注册码/序列号/破解码】

    navicat for mysql 激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    832
  • 【oracle】varchar和varchar2区别「建议收藏」

    【oracle】varchar和varchar2区别「建议收藏」1.varchar是标准sql里面的。varchar2是oracle提供的独有的数据类型。2.varchar对于汉字占两个字节,对于英文是一个字节,占的内存小,varchar2都是占两个字节。3.varchar对空串不处理,varchar2将空串当做null来处理。4.varchar存放固定长度的字符串,最大长度是2000,varchar2是存放可变长度的字符串,最大长度是4000….

    2022年6月15日
    33
  • 枚举类型enum用法(enum类型)

    【1】什么是枚举类?  实例(也叫对象)有限而固定的类,在Java里被称为枚举类。    例如,季节类,它只有4个实例(春、夏、秋、冬),并且这4个实例不会改变。可以用枚举类来表示:publicenumSeasonEnum{SPRING,SUMMER,FALL,WINTER;}    枚举类是一种特殊的类,它一样可以有自己的成员变量、方法,可以实现一个或多个接口,也可以有自己的…

    2022年4月18日
    60
  • 怎么完全卸载赛门铁克_发一个赛门铁克的卸载工具

    怎么完全卸载赛门铁克_发一个赛门铁克的卸载工具===================================WhatisNONAV===================================NONAVisanunsupportedSymantectoolforremovingfilesandregistrykeysfromNortonAntivirus/SymantecAntiviru…

    2022年5月1日
    60
  • 关于LLDP

    关于LLDPLLDP是LinkLayerDiscoveryProtocol链路层发现协议的简称,几乎所有以太网交换机都内置了这个功能。LLDP的大致原理如下:1交换机定期通过LLDP报文对外广播自己的设备类型、端口编号等信息,交换机不会转发LLDP报文,但是会在链路上侦听其他设备发送过来的LLDP数据,并在一定时限的有效期内存储在交换机MIB中,可以供SNMP查询,进而掌握自己邻居的大致情况。

    2022年5月28日
    175
  • 详解C/C++中volatile关键字

    详解C/C++中volatile关键字一、volatile介绍volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:这段…

    2022年6月1日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号