Android Studio Gradle - settings.gradle

时间:2015-07-29 11:33:06

标签: android properties gradle settings local

我正在尝试实施一个流程,这样当其他人需要处理项目时,它就不会影响我的版本控制。

目前我有一个库模块从另一个项目添加到当前项目中。这是我通过settings.gradle文件完成的,如下所示:

include ':MainModule', ':ExternalModule'
project(':ExternalModule').projectDir = new File('C:\\Projects\\AnotherProject\\libraryModule')

我的问题是,如果我这样做,我会影响所有其他开发项目的开发人员,每次有人推送到存储库时,这个文件都会被更改。我想避免这种情况。

我正在考虑在local.properties中添加外部库模块的路径,该路径未被推送到存储库并由每个开发人员处理。我做了这样的事情:

include ':MainModule', ':ExternalModule'
project(':ExternalModule').projectDir = new File(getExternalModuleDir())

def getExternalModuleDir() {
    Properties properties = new Properties()
    properties.load(project.rootProject.file('local.properties').newDataInputStream())
    def externalModuleDir = properties.getProperty('module.dir', null)
    if (externalModuleDir == null)
        throw new GradleException("Module location not found. Define location with module.dir in the local.properties file!")

    return externalModuleDir 
}

但是我收到以下错误:

  

无法找到属性'项目'关于设置' AwesomeProject'。

我认为这是因为settings.gradle无法访问local.properties(或者在local.properties之前调用了settings.gradle,我真的不确定确切的流程)。

我做错了什么?我想要实现的流程是正确的吗?做这样的事的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

我最终找到了解决问题的简单方法。我不知道这是最好的解决方案还是优雅的解决方案,但这就是我实现我想要的方式:

def getExternalModuleDir() {
    Properties properties = new Properties()
    properties.load(new File(rootDir.absolutePath + "/local.properties").newDataInputStream())
    def externalModuleDir = properties.getProperty('module.dir', null)
    if (externalModuleDir == null) {
        throw new GradleException(
                ""Module location not found. Define location with module.dir in the local.properties file!")
    }
    return externalModuleDir 
}

local.properties 文件中,我设置了我的属性 module.dir

module.dir=C:\\Projects\\AnotherProject\\libraryModule

唯一的限制是 local.properties 文件应始终位于与 settings.gradle 文件相同的文件夹中(通常是这样)。