Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Android Studio在gradle中使用系统环境变量的正确方法_Android_Gradle_Android Studio_Android Gradle Plugin - Fatal编程技术网

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

使用Android Studio在gradle中使用系统环境变量的正确方法,android,gradle,android-studio,android-gradle-plugin,Android,Gradle,Android Studio,Android Gradle Plugin,我正在使用Android Studio在Ubuntu 14.04系统上构建我的项目 我在build.gradle文件中编写了以下内容,以避免在git repo中硬编码storeFile、storePassword、keyAlias和keyPassword: signingConfigs { debug { storeFile file(System.getenv("KEYSTORE")) storePassword System.getenv("KEYSTORE_PASSWO

我正在使用Android Studio在Ubuntu 14.04系统上构建我的项目

我在build.gradle文件中编写了以下内容,以避免在git repo中硬编码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同步错误会导致以下错误:
错误:(49,0)path和baseDir都不能为null或空字符串。path='null'basedir='./pathto/TMessagesProj'

My.bashrc包含:
source~/.gradlerc
和My~/.gradlerc包含以下内容:

export KEYSTORE="/home/myname/keystore/mykey"
export KEYSTORE_PASSWORD='mypass'
export KEY_ALIAS='mykey'
export KEY_PASSWORD='keypass'
我已经确认shell正确导入了这些变量。但是我不确定为什么Android Studio中的构建环境没有接收到它


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

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

我也喜欢在环境变量中包含密钥库信息,而不是将其放在项目中。你的代码看起来不错,但我在文件路径上也遇到了同样的问题。我通过将该值转换为字符串,然后将其传递到
文件()


希望这有帮助。

看看这篇帖子:@joel-g-mathew,请接受你认为适用于你的用例的答案。你太棒了!这是我在build.gradle中找到的解决环境变量问题的最简单的解决方案,使用android studio添加上述修复程序后,现在我有android studio抱怨调试apk没有签名。“错误:当前所选变体的apk(…apk)未签名。请为此变量指定签名配置)。它会将我带到“运行/调试配置”窗口。生成错误已消失,但现在,由于此错误,我无法从Android studio运行该应用程序。@SayoojValsan您可能不一定希望/需要此配置用于示例中显示的
调试
签名配置,Gradle通常配置了正确的默认调试密钥库,在示例中,您应该将
debug
release
交换,然后您只需要在构建版本时提供环境变量就可以访问Play Store。这在本地运行得很好,但我们在Gradle不支持的CI管道中遇到了一些问题试图将绝对路径解析为相对路径,但我们从未完全解决过它,而是使用类似于
storeFilePath String.valueOf(System.getenv(“KEYSTORE”);storeFile file(storeFilePath”);absolutePath
的方法可能已经解决了它。答案很好,效果很好!但是有人能找出为什么我们需要String.valueOf()?方法getenv()回报率很高。
signingConfigs {
 debug {
    storeFile file(String.valueOf(System.getenv("KEYSTORE")))
    storePassword System.getenv("KEYSTORE_PASSWORD")
    keyAlias System.getenv("KEY_ALIAS")
    keyPassword System.getenv("KEY_PASSWORD")        
 }