zoukankan      html  css  js  c++  java
  • 关于签名文件的知识总结

    关于签名文件的知识总结

    问题描述

    当应用要发布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
    

    总结

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

  • 相关阅读:
    SpringBoot之OAuth2.0学习之客户端快速上手
    SpringBoot之oauth2.0学习之服务端配置快速上手
    基于Docker+Prometheus+Grafana监控SpringBoot健康信息
    SpringBoot+kafka+ELK分布式日志收集
    springmvc的异步处理
    WebFlux基础之响应式编程
    Webflux快速入门
    深入理解Spring的ImportSelector接口
    深入理解Spring的异步机制
    SpringSecurity学习之自定义过滤器
  • 原文地址:https://www.cnblogs.com/zhangmiao14/p/9308825.html
Copyright © 2011-2022 走看看