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

时间:2014-05-22 22:57:29

标签: android gradle android-gradle

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

$ echo $RELEASE_PASSWORD

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

我最初在发布 buildType中设置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
    }
  }
}

6 个答案:

答案 0 :(得分:15)

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

task printJavaHome{
     println System.getenv("JAVA_HOME") 
}

然后与gradle同步。

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

并输入:

gradlew -q printJavaHome

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

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

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

我所经历和分享的想法可能对某些人有用。

答案 1 :(得分:13)

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

Sign APK without putting keystore info in build.gradle

答案 2 :(得分:12)

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

从终端运行它

答案 3 :(得分:1)

对我来说(使用Windows)只需重启Android Studio 即可。

答案 4 :(得分:0)

需要关闭并重新启动Android Studio,以识别新更改或添加的环境变量。

由于某种原因,我认为“ Invalidate Cache and restart”操作不会获取新的环境变量。我已经做过几次了,但我认为执行该操作并没有获得新的价值。这听起来让我难以置信,所以也许我有一些错字,我对观察到的结果感到困惑。但我确实检查了多次拼写,因为这是显而易见的原因。没有进行任何更改的问题是,我在完全关闭android studio之后读取了环境变量,而不是执行了Invalidate Cache和restart操作。  我执行Invalidate Cache并重新启动操作的原因是因为我正在进行多个Android Studio会话,这似乎是关闭所有会话并重新启动它们的简单方法。

答案 5 :(得分:0)

添加新的env变量后,我使IDE(Android Studio 4.0)缓存无效。您可以在文件菜单中找到此选项。

文件>使缓存无效/重新启动...