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

Som*_*ent 7 android gradle android-gradle-plugin

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

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

Ali*_*Ali 9

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

Properties props = new Properties()
props.load(new FileInputStream("/path/file.properties"))
Run Code Online (Sandbox Code Playgroud)

一个更像常规的语法是你更喜欢的:

Properties props = new Properties()
File propsFile = new File('/usr/local/etc/test.properties')
props.load(propsFile.newDataInputStream())
Run Code Online (Sandbox Code Playgroud)

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

第二个选项是使用ExtraPropertiesExtension我个人从未使用它但是根据Android gradle构建问题的响应:如何设置全局变量它似乎做你想要的.

UPDATE

如果要ExtraPropertiesExtension在您的<project base>/build.gradle添加中使用,请执行此操作:

allprojects {
    repositories {
        jcenter()
    }
    //THIS IS WHAT YOU ARE ADDING
    project.ext {
        myprop = "HELLO WORLD";
        myversion = 5
    }
}
Run Code Online (Sandbox Code Playgroud)

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

System.out.println(project.ext.myprop + " " + project.ext.myversion)
Run Code Online (Sandbox Code Playgroud)


zdd*_*zdd 5

对于 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
Run Code Online (Sandbox Code Playgroud)

模块的 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'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我用 android gradle 1.2.3 和 gradle 2.4 测试了这种方法。但是,我收到错误:错误:原因:无法找到目标 22:&lt;a href="install.android.platform"&gt;安装缺少的平台和同步项目&lt;/a&gt;。我猜这是因为 gradle 将常量解析为字符串,而它应该是整数。 (2认同)
  • @Some Noob Student 尝试对值调用 `toInteger()`。所以`project.MY_VARIABLE.toInteger()`。 (2认同)