导航:首页 > 操作系统 > androidjks签名

androidjks签名

发布时间:2023-05-02 10:07:07

A. android系统签名

有时候,我们开发的apk需要用到系统权限,需要在AndroidManifest.xml中添加共享系统进程属性:

这时候apk的签名就需要是系统签名(platform、shared或media)才能正常使用。
常用系统签名方式

这种方式比较麻烦,你需要有编译过的源码环境,并按如下步骤:
1、拷贝App源码到Android源码的packages/apps/目录下,且App源码是普通(Eclipse)格式的
2、配置Android.mk,在其中添加

3、使用mm编译App,生成的apk即系统签名

这种方式比在源码环境下签名简单,App可以在Eclipse或Android Studio下编译,然后给apk重新签名即可。
但这种方式在频繁调试的时候比较痛苦,即使写成脚本,也需要重复一样的操作。
相关文件
platform.x509.pem、platform.pk8、signapk.jar

文件位置
platform.x509.pem、platform.pk8:

signapk.jar:

signapk源码路径:

签名命令

步骤

1、将相关文件及源apk文件置于同一路径下
2、检查源apk包,去掉META-INF/CERT.SF 和 META-INF/CERT.RSA 文件
3、执行签名命令即可

让Android Studio集成系统签名,需要用到一个工具 keytool-importkeypair ,详见下文。

这个工具的作用是将系统签名的相关信息导入到已有的签名文件里。

工具的使用方法可以通过–help或README.textile来寻求帮助

platform.x509.pem、platform.pk8、keytool-importkeypair、demo.jks、signature.sh

我的做法是在App根目录新建Signature文件夹专门存放签名相关文件。
步骤

1、生成demo.jks签名文件

2、编写签名脚本signature.sh,内容如下:

为脚本文件添加可执行权限:

执行脚本:

3、配置builde.gradle

在android区域下(与defaultConfig同级)添加配置:

这样debug或release apk就带有系统签名了。

如果想直接Run app就是release版且带系统签名的apk,还需修改:

这样直接Run app就是带系统签名的release版apk了。

B. Android Studio 之签名

通过签名可以确保数据来源的可靠性和数据的不可篡改性

对 Apk 进行签名,也就是在 Apk 中写入一个指纹,写入指纹后,Apk 中有任何修改,都会导致这个指纹无效,Android 系统在安装 Apk 进行签名校验时就会不通过,进而无法安装该 Apk

如上图:

通常的签名验签过程中,接收方收到消息后,会先向 CA 机构验证证书的合法性,再进行签名校验。但 Apk 的证书通常由开发者自己制作,没有向 CA 机构申请,Android 系统在安装 Apk 时也并没有校验证书本身的合法性,只是从证书中提取公钥和加密算法,因此,如果对第三方 Apk 重新签名,也能安装到没有安装过这个 Apk 的系统中

keystore 文件包含私钥、公钥和数字证书,分为很多种,Android 使用的是 Java 标准 keystore 格式 JKS(Java Key Storage)

Android App Bundle:用于通过 Google Play 发布的应用,需要升级到AS 3.2 以上版本才支持App Bundle 格式;
APK:用于创建可部署到设备上的签名 APK

点击 Finish 就会生成签名文件与签名后的 Apk

当我们需要升级 Apk 版本的时候,需要再次对 Apk 文件进行签名,可以通过配置 build.gradle 让其自动生成签名后的 Apk

如果你的项目是开源的,需要把你的签名信息写在 local.properties 中,然后在 .gitignore 配置文件中加入 local.properties ,这样 local.properties 就不会提交到开源项目中,签名信息也就不会被人获取

local.properties:

app/build.gradle:

有时候我们的 apk 中某些功能需要系统签名,例如静默安装。测试系统签名的 apk,需要 root 权限,而带 Google APIs 的模拟器不能 root,因此要注意不能选择带 Google APIs 的模拟器

下面执行的操作都是在 linux 中,如果 apk 是 window 中生成的,需要拷贝到 linux 操作,再将生成的系统签名过得 apk 再拷贝到 window,比较麻烦,可以考虑后面的自动系统签名,还是需要在 linux 操作一次,不过之后就可以只在 window 操作了

这两个文件在目录 aosp/build/target/proct/security 下,如下图

在目录 aosp/prebuilts/sdk/tools/lib 下,如下图

将前面获取的 platform.pk8 、 platform.x509.pem 和 signapk.jar 文件放到需要签名的 apk 同一个目录,执行以下命令

如果出现上面的错误:Failed to load any of the given libraries: [conscrypt_openjdk_jni-linux-x86_64, conscrypt_openjdk_jni-linux-x86_64-fedora, conscrypt_openjdk_jni]

解决方法:

到目录 aosp/prebuilts/sdk/tools/linux/lib64 下,复制 libconscrypt_openjdk_jni.so 文件到需要签名 apk 的同一个目录,并将命令改为

自动进行系统签名的原理是:先生成一个 system.jks 文件,使用 keytool-importkeypair 对 system.jks 文件进行系统签名,再 build.gradle 和 local.properties 进行配置,直接使用带有系统签名的 system.jks 对 apk 进行签名,这样编译生成的apk文件就自带系统签名了

按照前面的方法,生成一个 system.jks 文件,此时是在 window 系统中操作的

进入 keytool-importkeypair 目录,将 system.jks、platform.pk8、platform.x509.pem 文件拷贝进来,拷贝之后的目录结构为

使用 linux 中修改过的带有系统签名的 system.jks 文件将 window 中最开始生成的 system.jks 覆盖掉,再像前面的自动签名部分一样,修改 build.gradle 和 local.properties 的配置,之后生成的 apk 就是系统签名过的了

测试方法是,在 AndroidManifest.xml 中添加 android:sharedUserId="android.uid.system" 后安装到 非 Google APIs 的模拟器上 , Google APIs 的模拟器不能 root,无法安装

会发现只有使用 system.jks 文件签名后才能安装,否则安装失败,会报以下的错误:

C. 2022-06-24 关于android的签名jks的替换尝试.

android developer 开发者
掘金博客

首先这个需求是因为客户安全部门对我们的apk进行安全测试,发现我们apk的证书签名信息是不规范的,需要我们去修改证书里面的信息,于是乎,我们开始了修改写bug之路.

实现android apk 证书签名的信息替换

至于什么是敏漏keytool,这里不再赘述,自行网络.

这里需要注意的是你们需要替换的内容是KEY_ALIAS_OLD=“老的jks的别名”,KEYSTORE_PASSWORD_OLD=”老的jks的库密码“,KEY_PASSWORD_OLD = “老的jks的别名密码”
剩下的也是依次替换就行了,然后会在你所在执行命令的目录下,生成一个lineage文件,这个文件非常重要
,相当于轮替文件的内容,下面我们在执行这个命令脚塌拿含本

这里需要注意的是这两个占位符号LINEAGE = “lineage的文件路径” ,OUT_FILE="新生成的apk的路径",
这样你就会得到签名后的apk,在执行apksigner verify --verbose 命令 ,你就能看到是否开启V3

这样能看到,V3开启,还有V4的彩蛋,当然,V4,在官网还没有更新出文档.
所以我们就可以把这个apk当成我们签名过度的apk,我们称之为transition.apk,那我们后续升级的安排,就可以是 old.apk->transition.apk->直接使用新的签名的apk,从而,完成apk的签名更新,

这个流程虽然可以解决签名替换的问题,但是,问题是,这个只在大于等于android9的机型上才会生效,经过测试,我自身的android 11 手机是可以的,android 9以下的手机还未测试,等待我后续更新,根据掘金的博主和google爸爸的描述中可以得出,只有在支持V3的手机上才会生效,而且,应用上架除非应用市场将其检验方式换成V3的应团笑该就可以了,可是并非所有版本的Android系统都可以直接覆盖安装,所以就算是安全上架了,系统版本低的还是要卸载才能安装。所以,看的出来V3在解决这个问题,那么V4呢,这个google爸爸留给我们的惊喜,不知道能不能彻底解决证书替换的问题.

D. Android查看应用签名方法

打开 Android Studio,然后选择右边的 Gradle 标签,选择一个项目,然后选择 signingReport 这个 Task,双击运行

然后选择右下角的 Gradle Console,就可以看到签名信息了

使用解压工具解压 APK 文件,在 META-INF 文李弯件夹拿到 CERT.RSA 文件。假设 CERT.RSA 文件的路径哪粗闷是 C:\Users\Administrator\Desktop\CERT.RSA。在 CMD 中输入

就可以得到签名信息了

jks 作为签名文件,也可以通过命令行来查看的其中的签名信息,假设签名文件的名称是 test_release.jks,在终端中输入

即凳锋可得到签名信息

E. Android查看应用签名方法

查看应用签名的MD5、SHA1、SHA256值及签名算法。

查看keystore文件签名信息,前提要有keystore文件和密钥,才能够获取keystore文件的签名信息。

方法一:(适用于 AS)
1)打开 AS工具窗口栏右边的 Gradle -> Project -> app -> Tasks -> android -> signingReport,双击运行 signingReport;

在没有keystore文件和密钥的情况下,要想查看我们所需应用的签名信息,就需要借助 keytool 工具来完成。
首先解压要查看的apk包,通过数据证书管理工具 keytool 查看apk的签名信息。具体步骤如下:
1)将apk修改后缀为 .rar 文件后进行解压;
2)进入解压后的 META-INF 目录,找到该目录下的 xxx.RSA 文件;
3)通过命令 cmd 打开DOS窗口,输入命令 : keytool -printcert -file [RSA文件路径]

在查看应用签名信息过程中,可能会遇到以下几个问题:

定位 keytool.exe 工具所在的目录,使用相关操作命令查看签名信息;

JKS(Java KeyStore) :是 Java 的 keytools 证书工具支持的证书私钥格式。jks 包含了公钥和私钥,可以通过 keytool 工具来将公钥和私钥导出。因为包含了私钥,所以 jks 文件通常通过一个密码来加以保护。一般用于 Java 或者 Tomcat 服务器。
PKCS #12 :定义了一种存档文件格式,用于实现存储许多加密对象在一个单独的文件中。通常用它来打包一个私钥及有关的 X.509 证书,或者打包信任链的全部项目。
定位 keytool.exe 工具所在的目录,使用操作命令转换证书格式;

F. 如何利用jks文件给apk签名

jarsigner -verbose -keystore xxx.jks -signedjar xxx.apk(签名后的apk名字) xxx.apk(需要签名的apk) xxx(keystore别名)

以linux下为例:
进入android sdk下的platform-tools:输入如下指令
jarsigner -verbose -keystore /cloud/xxx.jks -signedjar /cloud/app.apk( /cloud/app-unsigned.apk xxx
然后输入密码,即可签名成功。

阅读全文

与androidjks签名相关的资料

热点内容
算法设计心得体会 浏览:116
java修改ip 浏览:149
php不需要编译吗 浏览:134
特斯拉新车如何用app控制 浏览:185
文档拖到文件夹就不见了 浏览:814
标致308压缩比是多少 浏览:749
服务器和备用服务器地址 浏览:926
程序员加班跳槽 浏览:706
青年员工在工作中如何化解压力 浏览:602
包子解压神器怎么玩才爽 浏览:733
联想加密电脑怎么做系统 浏览:881
解压最近的压力 浏览:709
如何知道王牌战争新出来的服务器 浏览:591
程序员建的房子 浏览:419
navicatlinux破解版 浏览:454
找个辅警或者程序员 浏览:452
军团td预言命令 浏览:114
营指挥员下达作战命令 浏览:258
exe打开指定文件夹 浏览:266
pdf里面怎么去水印 浏览:847