关于签名文件的知识总结

关于签名文件的知识总结

问题描述

当应用要发布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(keystoreProperties['keystore'])
            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

总结

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

posted on 2018-07-14 10:53  zhangmiao14  阅读(3117)  评论(0编辑  收藏  举报