Mac 查看Android apk keystore文件签名信息(包括debug.keystore和release.keystore)

Mac 查看Android apk keystore文件签名信息

 Android 应用开发的时候会经常使用到第三方SDK,例如地图、推送、支付以及分享等。而这些第三方服务SDK为了应用不被滥用都会有签名验证机制。我们通过上传Android应用的签名来在服务端配置以验证应用的合法性。本文将讲述下在Android Studio中常用的签名操作。

1.查看debug.keystore文件签名信息

debug.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(debug.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:44
         SHA1: 01:DF:58:7D:04:3E:76:B5:92:98:37:0E:DD:70:61:01:70:F5:C9:8E
         SHA256: 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文件了。

2.查看release.keystore文件签名信息

(1)如果你的release.keystore文件在你的项目目录下

1)在项目上打开终端(如下图一、下图二和下图三)

2)在终端输入(rxjava2_and_retrofit2_release.keystore 就是你项目的keystore 文件名,如下图一)

keytool -list -v -keystore rxjava2_and_retrofit2_release.keystore

3)输入密码(如下图一和下图二),回车,然后就看到release.keystore 文件签名信息了。

 

(2)如果你的release.keystore文件不在你的项目目录下

1)直接打开终端(如下图一和下图二)

 

2)先查看一下release.keystore文件目录(如下图一、下图二和下图三),选中文件目录复制一下。

 

3)在终端输入(rxjava2_and_retrofit2_release.keystore 就是你项目的keystore 文件名,这里的/Users/erwinnakashima/AndroidStudioProjects_primary/RxJava2AndRetrofit2/rxjava2_and_retrofit2_release.keystore 是刚才查看的文件目录和rxjava2_and_retrofit2_release.keystore 拼接起来的),回车(如下图一)。

keytool -list -v -keystore /Users/erwinnakashima/AndroidStudioProjects_primary/RxJava2AndRetrofit2/rxjava2_and_retrofit2_release.keystore

 

4)输入密码(如下图一和下图二),回车,然后就看到release.keystore 文件签名信息了

现在我们就可以查看到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闭包中包含了keyAliaskeyPasswordstoreFilestorePassword四个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 = keyAlias
  android.signingConfigs.release.storeFile = file(storeFile)
  android.signingConfigs.release.storePassword = storePassword
  android.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文件忽略即可。

如对此有疑问,请联系qq1164688204。

推荐Android开源项目

项目功能介绍:RxJava2和Retrofit2项目,添加自动管理token功能,添加RxJava2生命周期管理,使用App架构设计是MVP模式和MVVM模式,同时使用组件化,部分代码使用Kotlin,此项目持续维护中。

项目地址:https://gitee.com/urasaki/RxJava2AndRetrofit2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值