首页 > 解决方案 > 使用 gradle 导入模块时使用模块的 packackingOptions

问题描述

我想将模块 A 包含到模块 B 中。模块 A 的 build.gradle 包含需要执行的 packackingOptions。这些 packackingOptions 在我构建模块 A 时执行。它们在我构建模块 B 时不执行,它导入模块 A。

在将模块 A 导入模块 B 时,如何确保模块 A 的 build.gradle 中的 packackingOptions 也被执行?

模块 B 的 build.gradle 如下所示:

dependencies {
  implementation project(':A')
}

模块 A 的 build.gradle 如下所示:

android {
 packagingOptions {
        pickFirst 'assets/**'
    }
}

标签: androidgradleimportmodule

解决方案


我设置项目结构如下:

buildscript-test-app
         |
         |
buildscript-test-lib
 |             \------------------------\
 |                                      |
buildscript-test-lib-sub-a    buildscript-test-lib-sub-b

两者都lib-sub-*包含assets/foo.txt不同的内容。

build.gradlebuildscript-test-lib

应用插件:'com.android.library'

android {
    // omitted default config stuff

    packagingOptions {
        pickFirst 'assets/**'
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation project(':buildscript-test-lib-sub-a')
    implementation project(':buildscript-test-lib-sub-b')
}

build.gradlebuildscript-test-app

apply plugin: 'com.android.application'

android {
    // omitted default config stuff
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation project(':buildscript-test-lib')
}

Gradle 总是从中选择文件,buildscript-test-lib-sub-a而不管依赖项的顺序如何(可能是因为字母顺序)。

如果这不起作用,您的构建脚本中的其他内容一定是错误的。如果它不起作用,您能否提供有关build.gradle您的应用程序模块和库模块的更多详细信息?

也许你正在你的应用程序中覆盖pickFirsts。如果是这种情况,你应该而不是pickFirsts = [somevalue]pickFirst += 'foo'pickFirst = 'foo'


推荐阅读