android - 如何根据构建变体使用 gradle 编译不同依赖模块的依赖项?

标签 android gradle android-gradle-plugin

我有一个具有模块依赖性的 Android 应用程序。这个模块本身有一个 jar 库作为依赖项,它有两个变体,每个都与主应用程序的构建变体相关。当我在主应用程序中切换构建变体时,我设法自动选择了模块的构建变体,它选择了正确的 jar,但这没有反射(reflect)在代码中,在构建变体特定代码中找不到来自 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')
}

模块-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?

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

最佳答案

经过一番修修补补,我发现了一些端倪。首先,我的两个 jar 同名,在不同的文件夹中。在将 jar 重命名为也具有不同的名称后,gradle 设法在构建变体切换后选择正确的 jar,前提是完成了额外的“与 gradle 文件同步项目”。所以现在它不是立竿见影的,但最终它会起作用。

关于android - 如何根据构建变体使用 gradle 编译不同依赖模块的依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43389776/

相关文章:

android - 如何在通过 Jenkins 构建 apk 时动态设置 buildConfigField 参数

android - 在媒体播放器中重复播放音频

android - Gradle 找不到 'lint' 作为自定义任务的依赖项

intellij-idea - 为什么 Gradle 将我的模块路径从相对更改为绝对?

gradle - 使用 Gradle 任务处理 Asciidoc

java - 使用 Gradle AspectJ 将生产方面编织到测试类中

android - gradle 同步失败,在 android studio 3.3.1 中读取示例 hello world 应用程序的超时错误

android - 在 Android 的 ListView 上将 Action 模式显示为 LongClick

java - 为 Android 应用程序抓取此 HTML 的最佳方法是什么?

android - 如何从 iOS/Android 应用程序中运行 Vue.js?