首页 文章

使用Android Studio在gradle中使用系统环境变量的正确方法

提问于
浏览
16

我正在使用Android Studio在Ubuntu 14.04系统上构建我的项目 .

我在build.gradle文件中写了以下内容,以避免在我的git仓库中硬编码storeFile,storePassword,keyAlias和keyPassword:

signingConfigs {
 debug {

    storeFile file(System.getenv("KEYSTORE"))
    storePassword System.getenv("KEYSTORE_PASSWORD")
    keyAlias System.getenv("KEY_ALIAS")
    keyPassword System.getenv("KEY_PASSWORD")        
 }

但是使用以下内容同步错误: Error:(49, 0) Neither path nor baseDir may be null or empty string. path='null' basedir='./pathto/TMessagesProj'

我的.bashrc包含: source ~/.gradlerc 和我的〜/ .gradlerc包含以下内容:

export KEYSTORE="/home/myname/keystore/mykey"
export KEYSTORE_PASSWORD='mypass'
export KEY_ALIAS='mykey'
export KEY_PASSWORD='keypass'

我已经确认这些变量是由shell正确导入的 . 但是我不确定它为什么没有被Android Studio中的构建环境接收 .

在gradle中使用环境变量的正确方法是什么?

2 回答

  • 6

    我也喜欢将我的密钥库信息放在我的环境变量上,而不是将其放在项目中 . 您的代码似乎很好,但我遇到了与文件路径相同的问题 . 我通过将该值转换为字符串,然后将其传递给 file() 来解决它:

    signingConfigs {
     debug {
        storeFile file(String.valueOf(System.getenv("KEYSTORE")))
        storePassword System.getenv("KEYSTORE_PASSWORD")
        keyAlias System.getenv("KEY_ALIAS")
        keyPassword System.getenv("KEY_PASSWORD")        
     }
    

    希望这可以帮助 .

  • 9

    在源文件夹中创建 gradle.properties 文件(与 build.gradle 一起)以仅应用于当前项目,或在 ~/.gradle/gradle.properties 中应用以在内容中应用系统范围:

    keystore=/home/myname/keystore/mykey
    keystore_password=mypass
    key_alias=mykey
    key_password=keypass
    

    现在用以下内容更新build.gradle文件:

    debug {
      storeFile file("${keystore}")
      storePassword "${keystore_password}"
      keyAlias "${key_alias}"
      keyPassword "${key_password}"
    }
    

    (可选)您可以使用 -P 选项从命令行传递参数 . 例如, ./gradlew assemble -Pkey_password=keypass .

相关问题