Android 查看apk keystore文件签名信息
Android应用开发的时候会经常使用到第三方SDK,例如地图、推送、支付以及分享等。而这些第三方服务SDK为了应用不被滥用都会有签名验证机制。我们通过上传Android应用的签名来在服务端配置以验证应用的合法性。本文将讲述下在Android Studio中常用的签名操作。
默认keystore
默认keystore存储路径
在Android Studio中系统默认内置了一个签名文件deubg.keystore,用于我们在debug下的默认App签名。如果没有在Gradle文件中特殊指定,那么Android Studio将自动使用默认的deubg.keystore文件为项目App生成Debug版本的签名。
在Mac/Linux系统中,deubg.keystore文件默认储存在
~/.android/
路径下(Mac下的.android
文件夹在Users文件夹的YourUserName文件夹下,是隐藏的,要先按快捷键command+shift+.使其显示出来)。在Windows系统中,deubg.keystore文件将默认存储在
C:\Users\{USERNAME}\.android\
路径下。
获取默认keystore SHA-1
知道了Android Studio 默认的deubg.keystore之后,下一步我们将是要获取其指纹信息,以便于在第三方服务配置中填入Debug指纹信息。
- 在Linux/Mac系统中,打开终端并输入以下命令:
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
- 在Windows系统中,在CMD中输入以下命令:
keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android
回车执行之后,你将会看到类似下面的deubg.keystore输出提示:
别名: androiddebugkey
创建日期: 2015-11-18
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=Android Debug, O=Android, C=US
发布者: CN=Android Debug, O=Android, C=US
序列号: b15af1
有效期开始日期: Wed Nov 18 07:18:45 CST 2015, 截止日期: Fri Nov 10 07:18:45 CST 2045
证书指纹:MD5: FE:A1:9C:02:71:A2:DA:F9:7F:1C:2B:61:D7:65:89:44SHA1: 01:DF:58:7D:04:3E:76:B5:92:98:37:0E:DD:70:61:01:70:F5:C9:8ESHA256: 84:18:44:C2:BD:AD:5D:A8:88:A1:96:EF:A6:27:86:0A:36:44:31:38:F2:5F:B6:4E:F1:10:EE:93:D6:22:CD:59签名算法名称: SHA256withRSA版本: 3扩展:
我们将其中的证书指纹填入到第三方服务DEBUG配置中即可。当然了,有的时候出于这样或者那样的原因考虑,我们并不想使用系统默认的keystore或者就想自己生成一个新的keystore,Debug环境与Release环境都使用同一个来减少配置的麻烦。这个时候我们就需要创建一个新的keystore文件了。
创建新的keyStore
我们使用JDK自带的keytool命令行工具即可完成keystore密钥库文件的创建,此处需要说明的是,Android Studio中自带的图形化界面keystore生成工具生成的.jks文件与keytool生成的.keystore文件在使用上没有任何区别。
生成keystore
在终端中键入以下命令:
keytool -genkey -v -keystore {FILENAME.keystore} -alias {ALIAS} -keyalg RSA -validity {DURATION}
{FILENAME.keystore}
为生成的keystore的文件名{ALIAS}
为生成的keystore文件的别名{DURATION}
为该keystore文件的过期时间
下面将以生成一个test.keystore文件为示例:
keytool -genkey -v -keystore test.keystore -alias test -keyalg RSA -validity 365
键入以上命令将生成一个以RSA算法加密的有效期365天的名为test.keystore
的文件,该keystore文件的alias为 test。回车确认执行该命令之后,将会要求输入密钥库口令以及一些基本的信息,根据提示输入无误之后将会在当前终端所在目录生成指定的keystore文件。完整的示例如下所示:
$ keytool -genkey -v -keystore test.keystore -alias test -keyalg RSA -validity 365
输入密钥库口令: android
再次输入新口令: android
您的名字与姓氏是什么?[Unknown]: Doublemine
您的组织单位名称是什么?[Unknown]: Test
您的组织名称是什么?[Unknown]: Test
您所在的城市或区域名称是什么?[Unknown]: Test
您所在的省/市/自治区名称是什么?[Unknown]: Test
该单位的双字母国家/地区代码是什么?[Unknown]: Test
CN=Doublemine, OU=Test, O=Test, L=Test, ST=Test, C=Test是否正确?[否]: y正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 365 天):CN=Doublemine, OU=Test, O=Test, L=Test, ST=Test, C=Test
输入 <test> 的密钥口令(如果和密钥库口令相同, 按回车):
[正在存储test.keystore]
这样我们就有了一个全新的keystore文件可以用于Android的App签名,有了keystore文件下一步当然就是获取我们生成的keystore文件的指纹信息啦~
获取keystore指纹信息
与获取默认的deubg.keystore文件指纹信息类似,我们在终端中键入以下命令:
keytool -v -list -keystore test.keystore -alias test -keypass android -storepass android
即可获取到我们生成的keystore指纹信息,有的同学已经看出来了,只要将上述命令中的几个参数替换下,即可查看任意keystore的指纹信息:
keytool -v -list -keystore {FILENAME.keystore} -alias {ALIAS} -keypass {KEYPASSWD} -storepass {STOREPASSWD}
{FILENAME.keystore}
为keystore文件名{ALIAS}
为keystore的别名{KEYPASSWD}
为keystore的密钥口令{STOREPASSWD}
为keystore的密钥库口令
应用keystore
前面我们忙活了大半天生成了keystore文件,并查看其指纹信息。但是如果我们不使用到我们的项目中,毕竟还是不会对我们的项目生效的~我们还需要在Gradle脚本中对其进行配置,我们的项目才会应用其keystore文件。
其中我们有两种较为普遍的方式在项目中配置我们的keystore文件,第一种比较简单粗暴,直接在gradle构建脚本中写入keystore信息,第二种则将keystore信息配置在一个单独的配置文件中,在gradle构建时动态读取。
签名信息写入Gradle脚本
在Android Stduio中打开主moudle的build.gradle
文件,在其中的android
闭包中键入如下内容:
signingConfigs {release {keyAlias 'test'keyPassword 'android'storeFile file('./keystore/test.keystore')storePassword 'android'}}
其中声明的release闭包中包含了keyAlias
、keyPassword
、storeFile
、storePassword
四个Property。其中含义分别为:
keyAlias是
keystore的alias
keyPassword是
keystore的密钥口令storeFile是
keystore的文件存放路径,可以为相对或者绝对路径,此处使用的为相对路径storePassword是
keystore的密钥库口令
以上的Gradle DSL将会作用于我们的项目的Release版本,当我们在终端中个输入:
gradlew assembleRelease
项目将会使用我们上面定义的test.keystore密钥库文件签名打包项目为Release发布版。
同样,如果我们不想使用默认的deubg.keystore签名项目的Debug版本,我们亦可以重新生成一个KeyStore文件或者使用Release版本的签名该文件,放入debug闭包中即可:
signingConfigs {release {keyAlias 'test'keyPassword 'android'storeFile file('./keystore/test.keystore')storePassword 'android'}debug {keyAlias 'test'keyPassword 'android'storeFile file('./keystore/test.keystore')storePassword 'android'}}
签名信息写入配置文件
细心的同学可能发现了,虽然上面的把签名信息写入gradle脚本中比较方便省事,但是却在密钥文件的密钥密码泄露问题,任何能够看到此Moudle的build.gradle脚本的人都可以拿到keystore文件及其对应的密钥口令,可能会导致一些安全风险。因此在一些开源项目或者比较敏感的项目中,可能会存在类似的gradle配置:
在主moudle的build.gradle脚本的android闭包中:
applicationVariants.all { if (project.hasProperty('keyAlias') && project.hasProperty('storeFile') &&project.hasProperty('storePassword') &&project.hasProperty('keyPassword')) {android.signingConfigs.release.keyAlias = keyAliasandroid.signingConfigs.release.storeFile = file(storeFile)android.signingConfigs.release.storePassword = storePasswordandroid.signingConfigs.release.keyPassword = keyPassword
} else {android.buildTypes.release.signingConfig = null
}
}
其中Variants
翻译中文为变种
,applicationVariants.all
属性含义为app plugin
下所有的Variant
的配置信息,可以将其看作为一个总览,可以方便的访问所有对象。
相关延伸阅读Gradle Plugin User Guide,我们在其中通过project.hasProperty
读取项目中的配置,并将其动态的赋值给signingConfigs.release
下的相关属性。
然后我们通过在gradle.properties
或者其它项目中能够被gradle的文件中定义以上属性并赋值即可:
storeFile=./keystore/test.keystore
storePassword=android
keyAlias=test
keyPassword=android
这样我们在项目团队协作时,将gradle.properties
文件忽略即可。
Android 查看apk keystore文件签名信息相关推荐
- android向apk的META-INF(签名信息)中添加渠道信息
作者:燕歆波 导读:在没有源码的情况下,为了避免重新签名,直接在签名信息中添加渠道信息; 准备好两个文件:一个空文件"channel_fhxs"没有后缀名,还有一个.prepert ...
- Android 对apk进行重签名和查看签名(window 和mac)及生成签名
生成签名文件:其实是有很多工具可以做到,这里不过是想用命令来生成 其命令如下:生成的签名默认在c盘根目录下 keytool -genkey -alias aaaa.keystore -keyalg R ...
- android 查看apk是否签名,查看 apk 签名
查看 apk 签名 1.通过apktool工具解压当前apk(比如:demo.apk),解压后,会生成CERT.RSA文件 **** apktool d demo.apk 备注:通过这种方式解压出来的 ...
- Android 生成签名文件、配置签名信息、打包
AndroidStudio生成签名文件.配置签名信息.打包 开发完一款Application之后,需要对其进行打包,才可以发布工用户使用(release).而Android Studio就具备了打包的 ...
- Android应用apk的程序签名详解
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1009/423.html 编辑推荐:稀土掘金,这是一个高质量的技术干货分享社区, ...
- Android的apk安装时签名相同冲突解决
如果两个应用程序, 包名相同, 但是签名不同, 就无法覆盖安装 签名是为了保护开发者的利益. 开发时直接在模拟器上运行时用的是debug.keystore; 调试签名. 正式签名 1. 有效期比较长, ...
- pe文件签名信息检测技术
[摘要] 签名信息中包含有很多有用的信息,可以辅助对二进制软件进行安全检测.读者可以从本博客中了解到pe文件中签名信息是如何组织的,如何用python代码从pe文件中获取内嵌的签名信息等知识. **什 ...
- android 读取资源中的文件下载,android – 从APK扩展文件中读取内容(来自obb文件)...
我已经实现了APK扩展文件下载服务,全部来自 http://developer.android.com/google/play/expansion-files.html 我可以下载APK扩展文件,我可 ...
- 查看 KeyStore 文件详细信息命令
1.进入本机安装的 jdk 或 jre 下的 bin 目录,按住 shift 键,鼠标右键打开命令行 2.keytool -list -v -keystore C:\Users\Desktop\bro ...
最新文章
- swift语言的Block
- 码栈开发手册(三)---编码方式开发(高级课程①)
- 会员系统中需要验证用户的邮箱是否真实存在
- C# .NET 使用 NPOI 生成 .xlsx 格式 Excel
- 整洁架构设计分析--架构设计的本质是什么?
- 规则执行管理平台中远程和服务管理的学习1
- Facebook悄悄参加星际AI大赛,然后输了 | 中国团队夺得第四
- Matlab期货量化交易特征选取,【策略分享】Matlab量化交易策略源码分享
- Codeforces Round #467 (Div. 1): B. Sleepy Game(BFS+有向图判环)
- JFinal实现原理
- 有朋自远方来——阿里软件专家作客武汉博文
- 阿里云原生专家禹杨杨:详解容器的发展、周边生态和落地实践
- 访问其他计算机被拒绝,对端口com1的访问被拒绝的解决方案
- Esp8266 进阶之路33【大神篇】如何优雅地像乐鑫原厂封装esp8266底层寄存器的逻辑思维,做成自己的静态库库文件,让第三方人使用?
- 网速是什么意思?带宽是什么意思?1M网速的下载速度应是多少?[转.baidu]
- html5图片无限循环播放,原生js实现无限循环轮播图效果
- 大邑移动团支部学校联谊活动
- Python实现点阵字体读取与转换
- Asus Eee Pc,看起来很不错
- 安装dlib的方法(亲测有效)
热门文章
- 机器人公敌过获奖没有_《机械公敌》观后感(学生作业)
- 毕业设计选题推荐基于美容院商城服务微信小程序系统
- 微信小程序java node python理发店美容店预约系统
- [乐意黎原创] 怪异的php 语法, 求解!
- PMD (别向报信者开火)
- java对sha1的解密_java 加密解密算法MD5/SHA1,DSA
- 基于高德地图的足迹 APP原型
- 法语初级学习笔记-03-疑问句
- git push代码到远程仓库,报错解决:fatal: unable to access ‘https://github.com/.......‘: OpenSSL SSL_read: Connec
- 爱错过了,就不在了!