Gradle:将参数传递给`apply from:<file>`

Den*_*ich 9 android gradle

我想将一些常见的样板gradle脚本代码放入共享.gradle文件中.然后,我可以使用apply from:语句重用它.

问题是是否可以将参数传递给应用脚本?例如,我想重复使用以下锅炉板:

apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'org.robolectric'

configurations {
    apt
}

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion

    defaultConfig {
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode rootProject.ext.versionCode
        versionName rootProject.ext.versionName
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题出在这里:apply plugin: 'com.android.application'.我想将这个代码重用于应用程序项目或android库项目.所以我需要一些参数来决定应用哪个插件:

// assuming <isApplicationProject> - is a script parameter
if (isApplicationProject) {
    apply plugin: 'com.android.application'
} else {
    apply plugin: 'com.android.library'
}
Run Code Online (Sandbox Code Playgroud)

当然,我可以在这种特殊情况下定义一些项目级属性,但我想知道是否可以在脚本调用时传递参数

cod*_*ber 7

  1. apply from: 是行 include<> 您不能传递参数。
  2. 但是它确实在相同的上下文中运行,因此在同一个项目上运行,因此您可以执行以下操作:ext.isUsingApp=true; apply from: 'xxx'
  3. 如果这是唯一的区别,我建议您执行以下操作:
    myinclude.gradle:

    apply plugin: 'com.neenbedankt.android-apt'
    apply plugin: 'org.robolectric'
    
    configurations {
        apt
    }
    
    android {
        compileSdkVersion rootProject.ext.compileSdkVersion
        buildToolsVersion rootProject.ext.buildToolsVersion
    
        defaultConfig {
            minSdkVersion rootProject.ext.minSdkVersion
            targetSdkVersion rootProject.ext.targetSdkVersion
            versionCode rootProject.ext.versionCode
            versionName rootProject.ext.versionName
        }
        buildTypes {
            release {
                minifyEnabled true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

然后在你的 build.gradle 应用程序中:

apply plugin: 'com.android.application'
apply from: '../includes/myinclude.gradle'
Run Code Online (Sandbox Code Playgroud)

然后在你的库 build.gradle 中:

apply plugin: 'com.android.library'
apply from: '../includes/myinclude.gradle'
Run Code Online (Sandbox Code Playgroud)

对于简单的布尔值,无需创建参数。