Gradle:如何指定库的两个源集并在项目中添加依赖项
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gradle:如何指定库的两个源集并在项目中添加依赖项相关的知识,希望对你有一定的参考价值。
我尝试指定gradle库的两个不同的源集,并在项目中添加源集特定的依赖项。
我的想法是做这样的事情:
库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'
}
我试着理解文档。但我不知道如何做到这一点......
这不是sourceSets问题的直接答案。但您可能根本不需要使用sourceSets功能。
如果您只是希望您的应用程序在自定义安卓库中包含一部分资源,则可以使用应用程序build.gradle中的配置块来实现。 (实际上,库根本不需要'main'和'exclude_fr_it'sourceSets的特殊配置块。)
这是可能的,因为'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'
}
}
}
}
我已经使用特定源规范的mavenLocal分发实现了这一点。我有一个库项目,有一些我想省略的java.awt代码,所以我可以将项目作为依赖项包含在android项目中(不支持java.awt)
在您的图书馆中,您将拥有以下内容:
apply plugin: 'java'
apply plugin: 'java-library'
apply plugin: 'maven-publish'
sourceSets {
main {
java {
srcDirs = [ 'src' ]
}
}
// android source set excludes portion of source that
// references java.awt
android {
java {
srcDirs = [ 'src' ]
excludes = ['**/skunkworks/**', '**/awt/**']
}
}
}
// this task compiles sources defined by custom sourceSet 'android'
task androidJar(type: Jar) {
from sourceSets.find {'android'}.output
}
publishing {
publications {
myLibrary(MavenPublication) {
groupId = 'foo.bar'
artifactId = 'mylib-android'
version = '1.0'
artifact androidJar
}
}
}
然后使用tasks-> publishing-> publishToMavenLocal目标将自定义jar编译到〜/ .m2 / repository。
现在在android项目中我引用如下:
repositories {
mavenLocal()
}
dependencies {
implementation 'foo.bar:mylib-android:1.0'
}
以上是关于Gradle:如何指定库的两个源集并在项目中添加依赖项的主要内容,如果未能解决你的问题,请参考以下文章
如何在 android gradle.kts 中定义自定义源集?
将 sqldelight 的“未解决的参考:NativeSqliteDriver”添加到 ios 源集
如何比较两个二进制文件或文件集并在 Python 中显示它们之间的差异?