gradle中隐藏Keystore密码

该博客是对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密码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载请注明原作者,如果你觉得这篇文章对你有帮助或启发,不用请我喝咖啡:D 1.添加releaseConfig 2....
    GingerBot阅读 11,669评论 8 12
  • Gradle是什么? Android Studio 基于 Gradle 构建系统,并通过 Android Grad...
    CP9阅读 4,976评论 0 3
  • gradle学习笔记(一) 概念 Gradle本身是基于Groovy脚本语言进行构建的,并通过Domain Spe...
    lycknight阅读 3,712评论 0 0
  • 在 Android Studio 构建的项目中,基于 Gradle 进行项目的构建,同时使用 Android DS...
    Ant_way阅读 12,126评论 0 16
  • 什么叫投资呢? 计划完成某一件事情来达到什么目的,这就是投资。 什么叫赌博呢? 不在乎后路,只追求短期收益,期待一...
    货币逻辑阅读 3,003评论 0 0