如何在Gradle构建文件中使用环境变量?

时间:2017-04-30 12:33:27

标签: android gradle

比如说我的机器上有一个文件夹,它位于D:\ AndroidLibraries,同事有相同的文件夹,但是在C:\ Users \ Jim \ AndroidLibraires。

我们都在android studio中使用android项目,我们都想使用该库中的库(jar和aar)。

在这些问题中,我们看到我们可以将项目依赖项定义为对其在硬盘上的位置的引用(除非我们理解错误):

Is it possible to declare git repository as dependency in android gradle?

Reuse modules in Android Studio

现在的问题是,我们如何使用环境变量抽象文件系统路径?例如:

project( ':security' ).projectDir = 
    new File(settingsDir, '%android_libraries_root%\security' )

2 个答案:

答案 0 :(得分:2)

System,getenv(“变量名称”)在gradle中工作以获取路径。我从this获得了参考 所以这应该得到包含jar和aar文件的文件夹的实际路径

答案 1 :(得分:0)

对于更便携/长期的解决方案,您可以使用本地' flatdir'存储库,如讨论https://docs.gradle.org/current/userguide/dependency_management.html#sec:flat_dir_resolverHow to add local .jar file dependency to build.gradle file?

例如:

final String androidLibs = System.getenv('android_libraries_root') ?: "${System.getProperty('user.home')}/AndroidLibraries"
// TODO: Might want to warn/error out if the folder is not present
repositories {
  flatDir {
    dirs "${androidLibs}/security"
  }
}

基本上,在这个例子中,它假定默认值将在用户主目录下,当没有定义ENV变量时,这可能适用于你,也可能不适合你。

然后你可以声明实际的依赖关系,例如

compile 'com.android.support:multidex:1.0.1' 

flatDir存储库只需要在其下直接安装版本化文件,即%android_libraries_root%\ security \ multidex-1.0.1.jar。换句话说,它忽略了“组织”。段。

当然,如果你的env变量没有定义和/或默认不起作用,它将无法解决依赖关系,所以你可能想要添加一些代码来至少警告用户flatDir repo无法找到安全库。

好的,所以这比直接引用文件要多一些工作,但是这样开始的一个好处是,您可以稍后切换到共享或公共repo而不更改您的依赖声明(您只需要添加(或替换flatDir repo)可以从中检索android库的repo声明。