我有大量的gradle模块用于构建我的android应用程序和库。我的应用程序被分解为多个java& C ++库。每个模块可能是一个java库,也可能是一个APK项目。对于代表APK的每个模块,我有一个build.gradle
,它指定了控制如何构建它们的各种productFlavors
部分。例如:
flavorDimensions "mode"
productFlavors {
arm {
dimension "mode"
externalNativeBuild {
ndk { abiFilters "armeabi-v7a" }
}
}
x86 {
dimension "mode"
externalNativeBuild {
ndk { abiFilters "x86" }
}
}
full {
dimension "mode"
externalNativeBuild {
ndk { abiFilters "x86", "armeabi-v7a" }
}
}
}
我要避免的是在每个代表APK输出的叶build.gradle
中复制上述配置。如何在根级别存储产品风格,并以某种方式将那些传递给leave build.gradle
文件,这样我就不需要复制它们了?
答案 0 :(得分:2)
支持库的功能非常相似,您可以see their method here(特别是the SupportLibraryPlugin
)。
在较高级别,策略是在buildSrc
目录中创建一个Gradle插件,您可以将其应用于每个项目。此插件将应用常用配置。
您的插件可能如下所示: 的 [项目] /buildSrc/src/main/groovy/com/example/ConfigurationPlugin.groovy 强>
class ConfigurationPlugin implements Plugin<Project> {
@Override
public void apply(Project project) {
LibraryExtension library = project.extensions.findByType(LibraryExtension.class);
library.flavorDimensions "mode"
library.productFlavors {
arm {
dimension "mode"
externalNativeBuild {
ndk { abiFilters "armeabi-v7a" }
}
}
x86 {
dimension "mode"
externalNativeBuild {
ndk { abiFilters "x86" }
}
}
full {
dimension "mode"
externalNativeBuild {
ndk { abiFilters "x86", "armeabi-v7a" }
}
}
}
}
}
<强> [项目] /builSrc/build.gradle 强>
apply plugin: 'groovy'
repositories {
google()
}
dependencies {
compile 'com.android.tools.build:gradle:3.0.0-beta7'
}
图书馆模块 build.gradle :
apply plugin: 'com.android.library'
apply plugin: ConfigurationPlugin
android {
// ...
}
答案 1 :(得分:0)
您可以使用':project-name'
在项目中引用另一个Gradle项目,例如: compile ':pluginproject'
。您还需要更新settings.gradle以包含其他项目。当需要应用插件时,将构建项目。