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

时间:2015-06-05 15:53:36

标签: 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'
        }
    }
}

问题在于: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'
}

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

1 个答案:

答案 0 :(得分:3)

  1. 申请自:是行包含&lt;&gt;你无法传递参数。
  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'
            }
        }
    }
    
  4. 然后在你的build.gradle应用程序中:

    apply plugin: 'com.android.application'
    apply from: '../includes/myinclude.gradle'
    

    然后在你的libs build.gradle:

    apply plugin: 'com.android.library'
    apply from: '../includes/myinclude.gradle'
    

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