如何声明一个对所有模块可见的常量' build.gradle文件?

时间:2015-06-11 01:04:11

标签: android gradle android-gradle

我有一个包含多个模块的项目 - 库和应用程序。每当新版Android出现时,我都需要为所有模块升级targetSdk,compileSdk,buildToolsVersion等。一个常数可以帮助完成这项繁琐的工作!

如何定义所有模块的build.gradle可见的项目级常量?

3 个答案:

答案 0 :(得分:8)

我选择做类似的事情的方法是创建一个属性文件,然后只读取所有我的全局变量。您可以使用java语法执行此操作:

Properties props = new Properties()
props.load(new FileInputStream("/path/file.properties"))

更流行的语法就是你所喜欢的:

Properties props = new Properties()
File propsFile = new File('/usr/local/etc/test.properties')
props.load(propsFile.newDataInputStream())

这样,你可以在所有模块中复制代码,但至少你的问题已经解决了。

第二个选项是使用ExtraPropertiesExtension我个人从未使用它,但根据问题Android gradle build: how to set global variables的回答,它似乎做你想要的。

<强>更新

如果要使用ExtraPropertiesExtension,请在<project base>/build.gradle添加:

中执行此操作
allprojects {
    repositories {
        jcenter()
    }
    //THIS IS WHAT YOU ARE ADDING
    project.ext {
        myprop = "HELLO WORLD";
        myversion = 5
    }
}

然后在同步之后,在每个模块的build.gradle文件中,您可以像这样使用它:

System.out.println(project.ext.myprop + " " + project.ext.myversion)

答案 1 :(得分:3)

对于Android Studio用户

您可以在文件“gradle.properties”中定义常量,并在模块的gradle文件中使用它们。

gradle.properties

ANDROID_BUILD_MIN_SDK_VERSION = 16
ANDROID_BUILD_TARGET_SDK_VERSION= 20
ANDROID_BUILD_TOOLS_VERSION=20.0.0
ANDROID_BUILD_SDK_VERSION=20
ANDROID_BUILD_COMPILE_SDK_VERSION=21

模块的build.gradle文件

android {
    compileSdkVersion project.ANDROID_BUILD_COMPILE_SDK_VERSION=21
    buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION

    defaultConfig {
        applicationId "com.abc.def"
        minSdkVersion project.ANDROID_BUILD_MIN_SDK_VERSION
        targetSdkVersion project.ANDROID_BUILD_TARGET_SDK_VERSION
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

答案 2 :(得分:0)

对于Android项目,Android docs建议使用aggregate(. ~ Description, data = D, FUN = function(x) c(mn = mean(x), sd = sd(x))) Description X24386.mn X24386.sd 1 A 102.855533 44.775766 2 B 76.088250 3.233297 3 C 80.674950 1.844912 。  在您的顶级build.gradle中(取自Configure project-wide properties

rootProject.ext

然后,在子模块中,您像这样引用这些变量:

buildscript {...}
allprojects {...}

// This block encapsulates custom properties and makes them available to all
// modules in the project.
ext {
    // The following are only a few examples of the types of properties you can define.
    compileSdkVersion = 26
    // You can also use this to specify versions for dependencies. Having consistent
    // versions between modules can avoid behavior conflicts.
    supportLibVersion = "27.1.1"
    ...
}
...