我尝试指定gradle库的两个不同的源集,并在项目中添加特定于源集的依赖项。

android - Gradle:如何指定两个库资源集并在项目中添加依赖项-LMLPHP

这个想法是做这样的事情:

库build.gradle文件:

apply plugin: 'com.android.library'

android {
   ...
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'

            java {
                srcDir 'src'
            }
            res {
                srcDir 'res'
            }
        }

        exclude_fr_it{
            manifest.srcFile 'AndroidManifest.xml'

            java {
                srcDir 'src'
            }
            res {
                srcDir 'res'
                exclude 'res/values/values-fr'
                exclude 'res/values/values-it'
            }
        }
    }
...
}
...

在项目A中,我想包含主要的源集:
dependencies {
    compile project(':explore_layout')
}

在项目B中,我想包括使用sourceset exclude_fr_it的版本。
dependencies {
    compile project(':explore_layout') library 'exclude_fr_it'
}

我试图了解文档。但我不知道该怎么办...

Question 1

Doc

Question 2

最佳答案

这不是sourceSets问题的直接答案。但是您可能根本不需要使用sourceSets功能。

如果您只是想让您的应用程序在自定义android库中包含一部分资源,则可以在应用程序的build.gradle中使用配置块来实现。 (实际上,该库完全不需要“main”和“exclude_fr_it” sourceSet的那些特殊配置块。)

由于'resConfigs'属性,这是可能的。

特别是,假设您的库具有三种语言的资源配置:“en”,“fr”和“it”。

然后,在项目A(包括库中的所有语言)中,只需在build.gradle中使用它:

dependencies {
    compile project(':explore_layout')
}

但是,在项目B中,您要排除自定义库的'fr'和'it'资源,您可以在配置闭包中使用'resConfigs'属性,以仅包括以下资源的子集:
dependencies {
    compile project(':explore_layout') {
        android {
            defaultConfig {
                resConfigs 'en'
            }
        }
    }
}

10-06 02:21