如何使用gradle编译基于构建变体的不同依赖模块的依赖项?

时间:2017-04-13 10:26:41

标签: android gradle android-gradle

我有一个Android应用程序,它具有模块依赖性。该模块本身有一个jar库作为依赖项,它有两个变体,每个变体都相对于主应用程序的构建变体。当我在主应用程序中切换构建变体时,我设法自动选择模块的构建变体,它选择了正确的jar,但是这没有反映在代码中,其中jar中的特定类没有找到构建变体特定代码。

这里是主应用和依赖模块的build.gradle文件中的相关代码:

主应用 - build.gradle

buildTypes {
    type1 {initWith(debug)}
    type2 {initWith(debug)}
}

productFlavors {
    live{}
    test{}
}

dependencies {
    type1Compile project(path: ':module', configuration: 'one')
    type2Compile project(path: ':module', configuration: 'two')
}

module - build.gradle

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    useLibrary 'org.apache.http.legacy'
    publishNonDefault true

defaultConfig {
    minSdkVersion 14
    targetSdkVersion 22
}

buildTypes {
    release {
        minifyEnabled = false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 
            'proguard-rules.pro'
    }
    one {initWith(release)}
    two {initWith(release)}
}
}

dependencies {
    oneCompile files('libs/versionOne/mylib.jar')
    twoCompile files('libs/versionTwo/mylib.jar')
}

因此,当我构建testType1变体时,Android Studio会自动选择one变体,并且使用干净的构建一切顺利。但是,如果我切换到testType2,虽然选择了模块two变体,但编辑器会突出显示缺少的类和方法。

当我在应用程序的构建变体之间切换时,如何让gradle选择正确的jar?

一些注意事项: 该模块需要库,因为它使用了两个版本之间通用的几个类。 我知道这可能看起来像糟糕的项目设计,但它是一个由不同的人在不同的时间建立的应用程序,我现在必须开发它"按原样#34;。

1 个答案:

答案 0 :(得分:0)

经过一些修补,我发现了一些线索。首先,我的两个同名的罐子,在不同的文件夹中。重命名罐子后也有不同的名称,gradle设法在构建变量切换后选择正确的一个,前提是另外一个带有gradle文件的" Sync项目"已经完成了。所以现在它不是直接的,但最终它正在发挥作用。