Android 图书馆多个模块
Android library multiple modules
我正在 android 上构建一个库,它由一个大核心和几个模块组成(我们将它们命名为 A、B、C、D 和 E)
这些模块有时需要另一个库,有时需要在生成的清单中添加内容。
我希望能够使用任意数量的模块构建我的核心。
我首先创建了非常有用但对我来说有点受限的口味。如果我想为每种情况创造一种风味,那就意味着要创造很多!
编辑:一个 gradle 文件来解释我想做什么。
apply plugin: 'com.android.library'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
flavorDimensions "libA", "libB", "libC", "libD", "libF"
defaultConfig {
minSdkVersion 10
targetSdkVersion 21
versionCode 11
versionName "3.1.0"
}
productFlavors {
A {
flavorDimension "libA"
}
B {
flavorDimension "libB"
}
C {
flavorDimension "libC"
}
D {
flavorDimension "libD"
}
E {
flavorDimension "libB"
}
F {
flavorDimension "libF"
}
}
sourceSets {
A {
java {
srcDirs = ['src/A']
}
}
B {
java {
srcDirs = ['src/B']
}
}
C {
java {
srcDirs = ['src/C']
}
}
D {
java {
srcDirs = ['src/D']
}
}
E {
java {
srcDirs = ['src/E']
}
}
F {
java {
srcDirs = ['src/F']
}
}
}
}
dependencies {
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.google.android.gms:play-services:6.5.87'
androidTestCompile 'org.mockito:mockito-core:1.10.19'
androidTestCompile 'com.google.dexmaker:dexmaker:1.0'
androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.0'
ACompile files('libs/A-2.1.0.jar')
BCompile files('libs/B-4.1.0.jar')
CCompile files('libs/C-5.1.0.jar')
DCompile files('libs/D-1.01.jar')
// same library as B, but different version
ECompile files('libs/B-5.2.2.jar')
// F nothing
}
我希望能够制作的是:
A.aar
B.aar
C.aar
D.aar
E.aar
F.aar
A+B.aar
A+C.aar
A+D.aar
A+E.aar
A+F.aar
A+B+C.aar
A+B+D.aar
A+B+F.aar (since B and E are not
compatible)
A+C+D.aar
A+C+E.aar
等等等等等...
当我尝试使用此 gradle 文件并启动 "gradlew assembleRelease" 时,我只获得:
A+B+C+D+F.aar 和 A+C+D+E+F.aar
要修改什么才能获得我正在寻找的结果?
有没有更简单的方法来进行这样的构建?
创建多个独立的 android 库模块并使用自定义 gradle 脚本来提取和使用必要的模块
我正在 android 上构建一个库,它由一个大核心和几个模块组成(我们将它们命名为 A、B、C、D 和 E)
这些模块有时需要另一个库,有时需要在生成的清单中添加内容。
我希望能够使用任意数量的模块构建我的核心。
我首先创建了非常有用但对我来说有点受限的口味。如果我想为每种情况创造一种风味,那就意味着要创造很多!
编辑:一个 gradle 文件来解释我想做什么。
apply plugin: 'com.android.library'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
flavorDimensions "libA", "libB", "libC", "libD", "libF"
defaultConfig {
minSdkVersion 10
targetSdkVersion 21
versionCode 11
versionName "3.1.0"
}
productFlavors {
A {
flavorDimension "libA"
}
B {
flavorDimension "libB"
}
C {
flavorDimension "libC"
}
D {
flavorDimension "libD"
}
E {
flavorDimension "libB"
}
F {
flavorDimension "libF"
}
}
sourceSets {
A {
java {
srcDirs = ['src/A']
}
}
B {
java {
srcDirs = ['src/B']
}
}
C {
java {
srcDirs = ['src/C']
}
}
D {
java {
srcDirs = ['src/D']
}
}
E {
java {
srcDirs = ['src/E']
}
}
F {
java {
srcDirs = ['src/F']
}
}
}
}
dependencies {
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.google.android.gms:play-services:6.5.87'
androidTestCompile 'org.mockito:mockito-core:1.10.19'
androidTestCompile 'com.google.dexmaker:dexmaker:1.0'
androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.0'
ACompile files('libs/A-2.1.0.jar')
BCompile files('libs/B-4.1.0.jar')
CCompile files('libs/C-5.1.0.jar')
DCompile files('libs/D-1.01.jar')
// same library as B, but different version
ECompile files('libs/B-5.2.2.jar')
// F nothing
}
我希望能够制作的是:
A.aar
B.aar
C.aar
D.aar
E.aar
F.aar
A+B.aar
A+C.aar
A+D.aar
A+E.aar
A+F.aar
A+B+C.aar
A+B+D.aar
A+B+F.aar (since B and E are not compatible)
A+C+D.aar
A+C+E.aar
等等等等等...
当我尝试使用此 gradle 文件并启动 "gradlew assembleRelease" 时,我只获得: A+B+C+D+F.aar 和 A+C+D+E+F.aar
要修改什么才能获得我正在寻找的结果?
有没有更简单的方法来进行这样的构建?
创建多个独立的 android 库模块并使用自定义 gradle 脚本来提取和使用必要的模块