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

我正在使用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") } 

但是gradle sync错误出现以下情况: Error:(49, 0) Neither path nor baseDir may be null or empty string. path='null' basedir='./pathto/TMessagesProj' Error:(49, 0) Neither path nor baseDir may be null or empty string. path='null' basedir='./pathto/TMessagesProj'

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

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

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

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

  • Graverse buildConfigField boolean的默认值用于各种风格
  • APKpath未指定为模块“示例 - 示例”
  • Gradle:如何在控制台中显示androidTest结果?
  • 无法parsingconfiguration的所有依赖:'classpath'
  • Android gradle build:运行assembleDebug会调用项目依赖项的发布任务
  • 允许在Jenkins上构build不稳定的Android Gradle
  • 如何在Android Studio的类路径中配置库的顺序?
  • Android gradle项目构建非常缓慢
  • 我也喜欢在我的环境variables上获取密钥库信息,而不是将其放在项目中。 您的代码似乎很好,但我遇到了与文件路径相同的问题。 我通过将该值转换为字符串,然后将其传递给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") } 

    希望这可以帮助。

    在源文件夹(与build.gradle一起)中创建gradle.properties文件以仅应用于当前项目或在~/.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