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

debug模式

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

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

例如我的debug.keystore就在C:\Users\Administrator\.android\debug.keystore。

 

release模式

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

Variants-Build Variant-debug/release

android studio设置签名 android studio 默认签名_签名

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


android studio设置签名 android studio 默认签名_签名_02


android studio设置签名 android studio 默认签名_android studio设置签名_03

就细分成四种模式:


android studio设置签名 android studio 默认签名_Android_04

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

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

 

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

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


android studio设置签名 android studio 默认签名_签名_05

已经创建过keystore选Choose existing···)


android studio设置签名 android studio 默认签名_签名文件_06

第三步:填写相关信息

设置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


android studio设置签名 android studio 默认签名_签名_07

 

第四步:输入key、keystore密码


android studio设置签名 android studio 默认签名_签名文件_08

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


android studio设置签名 android studio 默认签名_android_09

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

 

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

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

2.release模式配置keystore

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

android studio设置签名 android studio 默认签名_签名文件_10

使得签名生效需配置Build Types


android studio设置签名 android studio 默认签名_Android_11

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


android studio设置签名 android studio 默认签名_android_12



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 }



android studio设置签名 android studio 默认签名_android_12


 

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

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


android studio设置签名 android studio 默认签名_android studio设置签名_14

android studio设置签名 android studio 默认签名_签名_15

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

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


android studio设置签名 android studio 默认签名_Android_16

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


android {}之上新增代码



android studio设置签名 android studio 默认签名_签名_17

  View Code

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


1


2


3


4


5


6


7


8


signingConfigs {         

                    release {         

                    keyAlias keystoreAlias         

                    keyPassword keystoreAliasPSW         

                    storeFile keyfile         

                    storePassword keystorePSW         

                    }         

                    }



  

设置后Signing中keystore值无需关心


android studio设置签名 android studio 默认签名_Android_18

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


android studio设置签名 android studio 默认签名_android_12


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             applicationVariants.all { variant ->
14                 variant.outputs.each { output ->
15                     def outputFile = output.outputFile
16                     if (outputFile != null && outputFile.name.endsWith('.apk')) {
17                         // 输出apk名称为ruijie_v1.0_wandoujia.apk
18                         def fileName = "ruijie_v${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk"
19                         output.outputFile = new File(outputFile.parent, fileName)
20                     }
21                 }
22             }
23 }
24     }


android studio设置签名 android studio 默认签名_android_12


到此,前面配置完成。

 

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

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

keytool -list -v -keystore xxx.jks

android studio设置签名 android studio 默认签名_签名_21