如何在root gradle.build脚本中指定公共gradle属性

时间:2017-10-09 14:46:34

标签: android gradle

我有大量的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文件,这样我就不需要复制它们了?

2 个答案:

答案 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以包含其他项目。当需要应用插件时,将构建项目。