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

问题描述 投票:0回答:7

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

$ echo $RELEASE_PASSWORD

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

我最初在

release
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
    }
  }
}
android gradle android-gradle-plugin
7个回答
18
投票

您可以从命令行运行 Android Studio 以获取传递到 IDE 的环境变量。在 Mac OS 中,您可以通过运行

/Applications/Android\ Studio.app/Contents/MacOS/studio

从终端运行它

17
投票

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

JAVA_HOME
变量路径,如下所示:

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

然后与gradle同步。

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

并输入:

gradlew -q printJavaHome

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

null

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

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

这是我的经历和想法分享,可能对某人有用。


16
投票

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

签署APK而不将密钥库信息放入build.gradle


3
投票

对于我(使用 Windows)来说,只需 重新启动 Android Studio 就足够了。


2
投票

Android studio 需要关闭并重新启动才能识别新更改或添加的环境变量。

出于某种原因,我认为“使缓存无效并重新启动”操作不会获取新的环境变量。我已经这样做了几次,但我认为我没有通过该操作获得新的值。这对我来说听起来很难相信,所以也许我有一些拼写错误,并且我对我所观察到的内容感到困惑;但我确实多次检查了拼写,因为这是明显的原因。在不进行任何更改的情况下,在完全关闭 android studio 后,我读取环境变量的问题就消失了,而不是执行无效缓存并重新启动操作。 我执行无效缓存并重新启动操作的原因是因为我有多个 Android Studio 会话正在进行,这似乎是关闭所有会话并重新启动它们的简单方法。


0
投票

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

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


0
投票

您必须将环境插入到 local.properties 文件中

username="myusername"
password="mypassword"
© www.soinside.com 2019 - 2024. All rights reserved.