[英]How to specify common gradle properties in root gradle.build script
我有大量的 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
中复制上述配置。 如何在根级别存储产品风味,并以某种方式将这些风味传递到离开build.gradle
文件,以便我不需要复制它们?
支持库做了一些非常相似的事情,你可以在这里看到他们的方法(特别是SupportLibraryPlugin
)。
在高层次上,策略是在您的buildSrc
目录中创建一个 Gradle 插件, buildSrc
其应用于您的每个项目。 此插件将应用通用配置。
您的插件可能如下所示: [project]/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 {
// ...
}
您可以使用':project-name'
引用项目中的另一个 Gradle 项目,例如compile ':pluginproject'
。 您还需要更新 settings.gradle 以包含其他项目。 该项目将在需要应用插件时构建。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.