如何使用gradle为所有模块定义常见的android属性

 Fmyu的守护天使 发布于 2023-02-12 16:52

我在AndroidStudio中创建了一个带有几个模块的简单项目.每个模块的gradle脚本包含以下代码:

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.1"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 18
    }
}

如何将此代码移动到主build.gradle脚本(项目的脚本)?此代码适用于所有子模块.

5 个回答
  • 在最顶层的build.gradle中定义它似乎工作

    subprojects {
        afterEvaluate {project ->
            if (project.hasProperty("android")) {
                android {
                    compileSdkVersion 22
                    buildToolsVersion '22.0.1'
                }
            }
        }
    }
    

    2023-02-12 16:55 回答
  • 在main项目的build.gradle中,您应该编写类似下一个内容:

    project.extensions.add("buildToolsVersion", "19.0.3")
    

    在子项目中,您可以使用此扩展:

    buildToolsVersion rootProject.buildToolsVersion
    

    您可以在此处找到更多信息

    2023-02-12 16:55 回答
  • 这适用于Android Studio 0.8.9.使用默认的gradle包装器1.12-all.

    应用程序是Lite和Pro使用的库,其中Lite/Pro是我正在制作的应用程序的两种不同风格.我想在所有模块之间共享配置.全局配置位于根gradle.build文件中,所有子项目/模块都可以读取这些属性.

    我的项目结构是:

    Project/
     gradle.build
     settings.gradle
     App/
      gradle.build
     Lite/
      gradle.build
     Pro/
      gradle.build
    

    在Project/gradle.build中我添加了一个子项目配置:

    subprojects {
        ext.global_compileSdkVersion = 19
        ext.global_buildToolsVersion = "20.0.0"
        ...
    }
    

    ext.[var name]添加可在子项目中读取的变量.我添加了前缀"global_",因此更容易看到我的属性.(另请注意,我使用等号将值赋给变量)

    在每个子项目/模块中,gradle文件如下所示:

    android {
        compileSdkVersion global_compileSdkVersion
        buildToolsVersion global_buildToolsVersion
        ...
    }
    

    注意!

    Android Studio IDE似乎不知道子项目中的"ext",但gradle会这样做.所以它在查看gradle文件时显示为警告,但构建仍然有效.因为它不知道"ext",它似乎也不知道你添加的变量,所以这些也将在IDE中作为警告加下划线.但它的工作原理:)

    2023-02-12 16:55 回答
  • 您可以build.gradle在项目的根目录(即包含所有模块的文件夹)中创建一个,并使用它来配置rootProject.

    例如,如果你有:

    MyApp
      - Module1/
          - build.gradle
      - Module2/
          - build.gradle
      - settings.gradle
    

    您可以在旁边添加build.gradle settings.gradle.

    在上面的示例中,您实际上有3个Gradle项目:Module1,Module2rootProject.

    所以在这里build.gradle,你可以这样做:

    // use the ext object to add any properties to the project
    project.ext {
       compileSdkVersion = 18
    }
    

    然后在您的模块中,您可以:

    android {
        // here we reference the root project with the "rootProject" object.
        compileSdkVersion rootProject.ext.compileSdkVersion
    }
    

    2023-02-12 16:56 回答
  • 嗯有趣的是,我找不到解决方案,因为我应该在Android Studio中使用它.但是我在这里只提供了这个解决方案,因此在Android Studio编辑器中没有任何警告并且有效.

    在每个人的root build.gradle中定义:

    buildscript {
        ext {
            projectAppCompatVersion = 'com.android.support:appcompat-v7:23.3.0'
            projectSupportVersion = 'com.android.support:support-v4:23.3.0'
            projectCompileSdkVersion = 23
            projectMinSdkVersion = 22      // 15 android 4.0.3 for release
            projectTargetSdkVersion = 23   //23 requires permission requests , 22 for release
            projectBuildToolsVersion = "24.0.0rc2"
        }
     }
    

    并在没有警告的情况下访问:

    compileSdkVersion project.properties.projectCompileSdkVersion
    buildToolsVersion project.properties.projectBuildToolsVersion
    

    但代码完成和变量解析不能像我期望的android studio那样工作.

    2023-02-12 16:58 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有