关于签名文件的知识总结

Posted zhangmiao14

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于签名文件的知识总结相关的知识,希望对你有一定的参考价值。

关于签名文件的知识总结

问题描述

当应用要发布release版本时,如果没有签名文件是不能安装到设备上的,所以在打包release版本的apk之前,要添加签名文件。

生成签名文件的方法

第一种生成签名文件的方法(使用android Studio生成签名文件)

按照Build->Generate Signed APK打开生成签名文件的窗口。

技术分享图片
技术分享图片

  • Key store path 存放路径 如果没有点击下面的Create new store按钮,如果有,则点击Choose Existing store按钮。
  • key store password 密码
  • Key alias 别名
  • Key password 密码
点击Create new之后

点击Create New Store按钮之后,会打开一个New Key Store窗口:

技术分享图片
技术分享图片

  • Key store path 存放位置。点击后面的…按钮选择存放的位置
  • Password 密码
  • Confirm 确认密码
  • Alias 别名
  • Password 密码
  • Confirm 确认密码
  • Validity 有效期
  • First and Last Name 姓名
  • Organizational Unit 组织单位
  • Origanization 组织
  • City or Locality 城市或地方
  • State or Province 州或省
  • Country Code 国家代号

填写完之后点击OK按钮,返回到Generate Singed Apk窗口,窗口中的内容已经全部填充

技术分享图片
技术分享图片

点击Generate Singed Apk窗口的Choose existing store按钮

点击Choose existing store按钮之后,在弹出的文件选择框中选择已有签名文件即可。填写完ey store password、Key alias、Key password点击Next按钮即可。

点击Generate Singed Apk窗口的Next按钮

点击Generate Singed Apk窗口的Next按钮之后,界面显示如下:

技术分享图片

技术分享图片
这个界面我们只需要选择Signature Version。

  • V1(Jar Signature) 通过ZIP条目进行验证,APK签署后可进行修改-可以移动甚至重新压缩文件。
  • V2(Full APK Signature) 验证压缩文件的所有字节,而不是单个ZIP条目,因此,在签名后无法再更改(包括 zipalign)。

勾选不同的结果:

  • 只勾选V1签名并不会影响什么,但是在7.0上不会使用更安全的验证方式。
  • 只勾选V2签名7.0以下会直接安装完显示未安装,7.0以上则使用V2的方式验证。
  • 同时勾选V1和V2则所有机型都没有问题。

最后点击Finish按钮之后,签名文件就生成了。

第二种生成签名文件的方法(keytool)

使用命令生成签名文件。
代码运行过程如图:

技术分享图片
技术分享图片
输入keytool -genkey -alias test.keystore -keyalg RSA -validity 10000 -keystore test.keystore
其中 test.keystore表示签名文件的文件名;10000表示App的有效期;RSA代表认证机构。
按回车之后就会让你输入各种信息,输入这些信息之后再按回车,签名文件就生成好了,你在哪个目录下运行的指令,签名文件就在哪个目录下。

安全管理签名文件和签名密码

不安全的做法

在使用Android Studio进行release版的apk签名的时候,往往都是将签名文件keystore放在项目中,密码写在build.gradle中,keystore和密码就随着代码上传到了git仓库中了,这样往往很不安全,因为这样被人获取。
修改之前的app中的build.gradle签名配置:

android {

   compileSdkVersion 23
   buildToolsVersion "24.0.2"

    signingConfigs {
        release {
            keyAlias ‘abc‘
            keyPassword ‘123456‘
            storeFile file("${projectDir}/keystore.key")
            storePassword ‘123456‘
        }
    }


    buildTypes {
        release {
            minifyEnabled true
            zipAlignEnabled true
            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘
            buildConfigField "boolean", "ENV_SETTING", "true"
            buildConfigField "boolean", "RELEASED_TEST", "false"
            resValue "string", "app_name", "应用名称"
        }
    }
}

安全的做法

1.在project下新建一个”keystore.properties”文件,将keystore的绝对路径和密码、别名等信息配置好。

keystore.properties

keystore=F:\\keystore.key
storePassword=123456
keyAlias=rbsoft
keyPassword=123456
2.修改build.gradle中的配置签名信息
apply plugin: ‘com.android.application‘

def keystorePropertiesFile = rootProject.file("keystore.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

android {

   compileSdkVersion 23
   buildToolsVersion "24.0.2"

   signingConfigs {
        release {
            keyAlias keystoreProperties[‘keyAlias‘]
            keyPassword keystoreProperties[‘keyPassword‘]
            storeFile file("${projectDir}/keystore.key")
            storePassword keystoreProperties[‘storePassword‘]
        }
    }

    buildTypes {
        release {
            minifyEnabled true
            zipAlignEnabled true
            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘
            buildConfigField "boolean", "ENV_SETTING", "true"
            buildConfigField "boolean", "RELEASED_TEST", "false"
            resValue "string", "app_name", "应用名称"
        }
    }
3.忽略keystore.properties

将keystore.properties添加到忽略中,这样就不上传keystore.properties文件到git仓库,使得签名的铭感信息与上传到git仓库隔离开,这样签名信息就安全了。
.gitignore

...
/sign.properties

总结

这篇文章主要说的是关于签名文件的,应用在打包的时候就需要生成一个签名文件,也要注意对签名文件的安全管理。












以上是关于关于签名文件的知识总结的主要内容,如果未能解决你的问题,请参考以下文章

Android签名文件jks中的sha1值是怎么来的

Android签名文件jks中的sha1值是怎么来的

线程学习知识点总结

关于如何构建自己的只是体系

关于 iOS 代码签名策略 - 当我们在没有代码签名的情况下归档项目并稍后使用配置文件将其导出时会发生啥?

iOS包重签名技术知识