应用的包名

包名(ApplicationId)是在一台设备上的唯一标识,相同包名的应用在一台设备上只能安装一个。

应用的签名

签名是由签名应用的keystore文件决定,与包名无关,一个签名文件可以签名多个应用,并且生成的签名都是同一个。所有的应用程序都必须有签名,Android系统不能安装一个没有签名的应用程序。

签名的获取

  1. 获取APP的签名,可以通过第三方工具(微信开放平台提供的签名生成工具)安装到手机上,通过输入应用的包名来获取该应用的签名。
  2. 通过命令行获取keystore文件的签名,通过以下命令就可以获取到签名文件的详细信息
keytool -list -v -keystore 签名文件名称.keystore

包含 MD5SHA1SHA256信息,MD5就是所需的应用签名,需要将 MD5 信息去掉分号并转成小写使用。

Debug签名

一个项目默认的签名是 Debug 签名,签名文件位于 C:\Users\Admin\.android\ 目录下的 debug.keystore 文件,该签名不包含任何公司和组织信息。具体 Debug 签名文件的详细信息如下:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

Alias name: androiddebugkey
Creation date: 28-六月-20
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: C=US, O=Android, CN=Android Debug
Issuer: C=US, O=Android, CN=Android Debug
Serial number: 1
Valid from: Sun Jun 28 10:22:57 CST 2020 until: Tue Jun 21 10:22:57 CST 2050
Certificate fingerprints:
         MD5:  37:8A:38:7F:CF:39:10:24:06:CA:D7:55:0E:73:CA:F1
         SHA1: BA:6A:B5:42:94:9A:DD:76:FE:37:A6:F1:03:A1:73:C3:D4:3C:5D:CF
         SHA256: 3D:F3:13:9E:E8:27:54:0E:AB:0C:17:27:B6:ED:0B:12:1E:C9:85:1E:4D:1C:71:16:A3:F0:C6:0D:3B:E1:7A:60
         Signature algorithm name: SHA1withRSA
         Version: 1

仅用来调试打包时签名应用使用。

Release签名

Release 签名文件相当于开发者的"身份证",当我们发布一个 APP 时就需要给这个 APP 签个名,防止被别人盗用。

使用 Release 签名,主要有以下几点:

  • 开发者可能使用相同的包名来混淆已经安装的应用,而签名可以保证不同的包不被替换
  • Release 签名可以保证信息传输的完整性,签名对于包中的每个文件进行处理,以确保内容不被替换,防止交易中的抵赖发生
  • 应用市场对应用的要求

创建一个 Release 签名文件需要以下信息:

Alias: 别名
Validity(years): 有效期(默认25年)
Certificate:
  First and Last Name: 姓名
  Organizational Unit: 组织单位
  Organization: 组织
  City or Locality: 城市或地区
  State or Province: 州或省
  Country Code(XX): 国家代码

有了这些信息很容易在IDE中创建签名文件。

在Debug模式下使用Release签名文件

由于应用内接入的第三方平台有应用的签名校验,常常需要在 Debug 模式下的应用使用 Release 签名以保证第三方平台的功能正常使用,这就需要我们修改项目主模块下的 build.gradle 文件来实现。
android 节点下添加以下信息:

android {
    ...
    signingConfigs {
       release {
           //存放签名key的本地路径
            storeFile file { "xx.jks" }
            //签名密码
            storePassword "xxxx"
            //别名
            keyAlias "xxxx"
            //别名密码
            keyPassword "xxxxx"
        }
    }
    ...
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
            ...
        }
         //添加以下配置在Debug模式下使用Release签名
        debug {
            signingConfig signingConfigs.release
            ...
        }
    }
    ...
}

通过以上配置就可以在Debug模式下打出使用Release签名的包。

包名和签名在第三方平台的使用

APP 应用接入第三方平台时常常需要提供应用的 包名签名SHA1 等信息。

以百度地图开放平台为例,它就需要开发者提供应用的发布版 SHA1 值和应用的包名信息,如果两个不同包名的 APP 使用的是同一个签名文件签名,那么除了包名不同我们提供的发布版 SHA1 值应该是一致的。

如果觉得我的文章对你有用,请随意赞赏