zoukankan      html  css  js  c++  java
  • Android Studio的两种模式及签名配置

    我们使用Android Studio 运行我们的app,无非两种模式:debug和release模式。

    debug模式

    debug模式使用一个默认的debug.keystore进行签名。

    这个默认签名(keystore)是不需要密码的,它的默认位置在C:Users<用户名>.Androiddebug.keystore,如果不存在Android studio会自动创建它。

    例如我的debug.keystore就在C:UsersAdministrator.androiddebug.keystore。

    release模式

    在我们正式发布项目的时候是不能使用debug.keystore的。开发过程中我们也可以使用发布模式运行。可以通过如下设置:

    BuildVariants-Build Variant-debug/release

    如果项目需要细分开发dev和生产pro版本,每个版本中都包含debug和release模式,可以这么设置:

    就细分成四种模式:

    release模式需要配置签名才能运行,这时就需要一个keystore

    如果没有就需要创建,已经创建过keystore请跳过此步骤

    1.创建keystore,并生成我们的apk(打包)

     第一步: Build --->> Generate Signed APK

    第二步:Create New···(已经创建过keystore选Choose existing···)

    第三步:填写相关信息

    设置keystore路径、密码,设置key:别名、密码、有效期,证书等

    Key store path:存放路径

    Key

      Alias:别名

      Validity(years):有效期(一般默认25年)

      Certificate:证书

        First and Last Name:姓名

        Organization Unit:组织单位

        Organization:组织

        City or Locality:城市或地区

        State or Province:州或省

        Country Code(XX):国家代码(XX),中国:86

    第四步:输入key、keystore密码

    第五步:选择发布app的路径,默认即可 选择release方式发布

    OK,发布成功,可以到 刚才设置的目标文件夹下面找到发布的apk

    那对一些人来说,这样也太麻烦了,每次都得输入相关信息,还得进行选择,那么有更简单快捷的方法吗?答案是有的。

    我们可以在项目的app目录下的build.gradle中进行签名的配置。 

    2.release模式配置keystore

    Project structure-signing,输入已创建的keystore信息

    使得签名生效需配置Build Types

    点击OK即可,然后查看对应build.gradle的配置文件应该是这样的。当然了,你也可以通过直接在build.gradle里面写下面这段。

     1 signingConfigs {
     2         release {
     3             keyAlias 'androiddebugkey'
     4             keyPassword 'android'
     5             storeFile file('C:/Users/ssc/.android/debug.keystore')
     6             storePassword 'android'
     7         }
     8     }
     9 
    10     ·········
    11 
    12 buildTypes {
    13         release {
    //是否混淆
    14 minifyEnabled false
    //是否移除无用资源 15 zipAlignEnabled true
    //混淆的配置文件

    16 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 17 signingConfig signingConfigs.release 18 } 19 }

    上述的配置虽然配置简单,但是存在不安全性,假如你的项目是开源的,你把签名文件的配置密码之类的信息用明文写在build.gradle里面,那是不是很不安全呢?

    可以将签名文件的配置密码之类的信息直接写在local.properties下,因为在Git版本控制的项目中,我们可以看到我们项目project模式根目录下有一个.gitignore的文件,里面的配置大概如下所示

    我们可以看到/local.properties,意思就是说local.properties默认是不添加到版本控制里面的,因为local.properties存储的是我们环境资源的一些相关信息,如sdk的路径。故我们可以在local.properties下配置签名信息而不用担心密钥外泄。对于开源项目来说,是非常好的。

    在local.properties下直接添加相关信息

    在build.gradle里,为了不用明文显示,我们首先要获得key的相关配置,所以我们可以在app的build.gradle里

    android {}之上新增代码
     1 def keystoreFilepath = ''
     2 def keystorePSW = ''
     3 def keystoreAlias = ''
     4 def keystoreAliasPSW = ''
     5 // default keystore file, PLZ config file path in local.properties
     6 def keyfile = file('s.keystore.temp')
     7 
     8 Properties properties = new Properties()
     9 // local.properties file in the root director
    10 properties.load(project.rootProject.file('local.properties').newDataInputStream())
    11 keystoreFilepath = properties.getProperty("keystore.path")
    12 
    13 if (keystoreFilepath) {
    14     keystorePSW = properties.getProperty("keystore.password")
    15     keystoreAlias = properties.getProperty("keystore.alias")
    16     keystoreAliasPSW = properties.getProperty("keystore.alias_password")
    17     keyfile = file(keystoreFilepath)
    18 }
    View Code

    app/build.gradle下的signingConfigs可以改为:

     signingConfigs {
            release {
                keyAlias keystoreAlias
                keyPassword keystoreAliasPSW
                storeFile keyfile
                storePassword keystorePSW
            }
        }
    

      

    设置后Signing中keystore值无需关心

    相应的,buildTypes也可以配置成这样

     1 buildTypes {
     2         release {
     3             minifyEnabled false
     4             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
     5 //            signingConfig signingConfigs.release
     6             //签名文件存在,则签名
     7             if (keyfile.exists()) {
     8                 println("WITH -> buildTypes -> release: using jks key")
     9                 signingConfig signingConfigs.release
    10             } else {
    11                 println("WITH -> buildTypes -> release: using default key")
    12             }
    13             23       }
    24     }

    到此,前面配置完成。

     本文为博主原创文章,请尊重版权,未经博主允许不得转载,转载请注明出处:http://www.cnblogs.com/details-666/p/keystore.html

    附:查询keystore的相关信息,如查看sha1的值;可以在运行窗口,定位到keystore所在的路径,执行cd C:Usersssc.android

    执行这条语句后就能显示Key的所有信息(以android默认keystore为例)

    keytool -list -v -keystore xxx.jks

     

     

  • 相关阅读:
    Axel linux下多线程下载工具
    使用Scala编写Spark程序求基站下移动用户停留时长TopN
    编写Spark的WordCount程序并提交到集群运行[含scala和java两个版本]
    使用Eclipse编译运行MapReduce程序 Hadoop2.6.0_Ubuntu/CentOS
    Eclipse上Hadoop插件中Run On Hadoop原理[转]
    apache官方中文hadoop说明文档地址
    如何在Windows下面运行hadoop的MapReduce程序
    通过web界面查看hadoop集群运行日志的地址
    linux命令-查看当前目录下所有文件的大小:“ll -h”
    BZOJ3979 : [WF2012]infiltration
  • 原文地址:https://www.cnblogs.com/details-666/p/keystore.html
Copyright © 2011-2022 走看看