繁体   English   中英

如何在根 gradle.build 脚本中指定通用 gradle 属性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM