Android gradle build System.getEnv("RELEASE_PASSWORD")返回null

HMC*_*tch 27 android gradle android-gradle-plugin

我遇到的问题是System.getenv()为环境变量返回null.我的密码存储在RELEASE_PASSWORD环境变量中.当我做:

$ echo $RELEASE_PASSWORD

它打印出正确的值,所以我知道变量已设置.

我最初signingConfig signingConfigs.release发布版本中设置了类型,一切都运行正常,但我需要不同的签名配置,以适应不同的产品风格.如果我对密码进行硬编码,它的工作原理就像它想象的那样.当我尝试从环境变量中读取密码时,事情就变得很糟糕.

这是某种范围问题吗?

这就是我目前所拥有的build.gradle.

android {

  ...

  signingConfigs {
    release {
      storeFile ...;
      keyAlias ...;
      storePassword System.getenv("RELEASE_PASSWORD");
      keyPassword System.getenv("RELEASE_PASSWORD");
    }

    unsigned {
      keyAlias "";
      storePassword "";
      keyPassword "";
    }
  }

  buildTypes {
    debug {
      versionNameSuffix = "-DEBUG"
    }

    release {
    }
  }

  flavorGroups "storeFront"

  productFlavors {
    def googleVariable = signingConfigs.release
    def amazonVariable = signingConfigs.unsigned

    google {
        flavorGroup "storeFront"
        signingConfig googleVariable
    }

    amazon {
        flavorGroup "storeFront"
        signingConfig amazonVariable
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

The*_*uto 15

对于Windows用户,如果创建新的环境变量,则需要重新启动PC.我不知道Windows有什么问题,但这就是它的工作原理.我尝试的是,在我的gradle脚本中,我写了一个任务来打印我的JAVA_HOME变量路径,如下所示:

task printJavaHome{
     println System.getenv("JAVA_HOME") 
}
Run Code Online (Sandbox Code Playgroud)

然后与gradle同步.

然后在Studio中打开终端窗口.

并输入:

gradlew -q printJavaHome
Run Code Online (Sandbox Code Playgroud)

这将显示您的java主路径,如果您设置它否则它将打印null.

在执行上述命令之前,请确保终端指向项目的根目录.

现在尝试设置一个新的环境变量并加载它,并尝试按照上面提到的步骤打印它.如果您使用的是Windows,则会看到null.但是当你重新启动PC并再次执行命令时,它将返回你的环境变量的实际值.

这就是我所经历和分享的想法,可能对某些人有用.


Xav*_*gau 14

您可以从命令行运行Android Studio以获取传递到IDE的环境变量.在Mac OS中,您可以通过运行从终端运行它/Applications/Android\ Studio.app/Contents/MacOS/studio


Sco*_*rta 13

Android Studio不会将环境变量传递给Gradle,因此您尝试执行的操作将无法在IDE中运行.如果您想要一种避免在构建文件中保留密钥库密码的方法,这里是一个代码的答案,用于将其保存在单独的文件中:

签名APK,而不在build.gradle中放置密钥库信息

  • @Scott,你知道为什么Android Studio没有将环境变量传递给Gradle吗?或者解决这个问题? (7认同)
  • 不再(永远?)真实.你只是没有得到你认为应该成为的env vars.从类似问题(OS X)中查看这些答案http://stackoverflow.com/a/30128305/1650674(Linux)http://stackoverflow.com/a/27795843 (3认同)
  • 我认为这改变了。对我而言(使用Windows)仅重启Android Studio就足够了。 (2认同)