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

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

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

$ echo $RELEASE_PASSWORD

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

我最初在发布buildType中设置了signingConfig signingConfigs.release,并且一切正常,但是我需要针对不同产品口味的不同签名配置。 如果我对密码进行硬编码,则它的工作原理与假定的一样。 当我尝试从环境变量中读取密码时,事情只会变得不妙。

这是某种范围问题吗?

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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
    }
  }
}

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

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

然后与gradle同步。

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

并输入:

1
gradlew -q printJavaHome

如果您设置了它,它将显示您的Java主目录路径,否则它将显示null

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

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

这就是我经历并想到的共享,可能对某人有用。


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


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

在不将密钥库信息放入build.gradle的情况下签署APK


对我而言(使用Windows)仅重启Android Studio就足够了。


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

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