Android技术

gradle中隐藏Keystore密码

2016-04-29  本文已影响2689人  DevWang

该博客是对gradle整理汇总这篇文章的补充

1、一般写法

通常签名的配置方法为:

android {
    signingConfigs {
        config_release {
            keyAlias 'releaseKey'
            keyPassword '123456'
            storePassword '123456'
            storeFile file('key/releaseKey.jks')
        }
    }
}

2、改良写法:

把签名信息(主要是密码)写在gradle中是不安全的,我们可以把这些签名信息添加到gradle.properties:

RELEASE_KEY_PASSWORD = 123456
RELEASE_KEY_ALIAS = releaseKey
RELEASE_STORE_PASSWORD = 123456
RELEASE_STORE_FILE = key/releaseKey.jks

然后在build.gradle中引用即可:

android {
    signingConfigs {
        config_release {
            storeFile file(RELEASE_STORE_FILE)
            keyAlias RELEASE_KEY_ALIAS
            storePassword RELEASE_KEY_PASSWORD
            keyPassword RELEASE_STORE_PASSWORD
        }
    }
}

我们也可以将签名信息添加到local.properties中,然后在build.gradle中读取.

3、更安全写法:

签名密码的私密性是最关键的,所以我们要是能把它改成每次打包时手动输入密码才是最安全的:

android {
    signingConfigs {
        config_release {
            storeFile file(RELEASE_STORE_FILE)
            keyAlias RELEASE_KEY_ALIAS
            storePassword System.console().readLine("\\\\nKeystore password:")
            keyPassword System.console().readLine("\\\\nKey password:")
        }
    }
}

这样在执行 打包命令时,就会被要求输入密码.

4、遇到的问题及解决

问题描述:
设置apk签名时从console中读取keyAlias以及密码,使用”system.console().readLine”方法,在编译时总是出现问题:

使用命令行编译的时候没有问题,但是当使用Android studio命令编译的时候,会报这个错.

解决方法:

步骤1:去除优化gradle设置的./gradle/gradle.properties中设置damon为true的这行语句:

org.gradle.daemon=true

步骤2:加上判断console是否为空的语句:

if (System.console() != null)

这之后再从命令行执行,读取手动输入的密码.

#5、最终脚本

最终,gradle脚本中的相关部分长这样:

android {
    signingConfigs {
        config_release {
            storeFile file(RELEASE_STORE_FILE)
            keyAlias RELEASE_KEY_ALIAS
            def sPassword = null
            def kPassword = null
            if (System.console() != null)
                sPassword = System.console().readLine("\\\\nEnter store password ")
            if (System.console() != null)
                kPassword = System.console().readLine("\\\\nEnter key password ")
            keyPassword kPassword
            storePassword sPassword
        }
    }
}

ps:此种用法在命令行中执行没问题,但是用gradle自带命令执行报错,提示找不到keyPassword,这也是我之前推荐大家使用命令行编译、打包的原因!

至此,文章结束,希望此文能帮助到你,如果对此文有不同见解,欢迎直接评论!

参考文案:
Android 使用Android Studio + Gradle 或 命令行 进行apk签名打包
Android Studio 在Gradle中隐藏Keystore密码

上一篇下一篇

猜你喜欢

热点阅读