是否有机会在全局gradle中保留全局变量,其值可以在应用程序模块中更新并在库模块中使用

nbnkbykc  于 2023-03-23  发布在  其他
关注(0)|答案(1)|浏览(102)

我在Android Studio中创建了多模块项目。它有3个应用程序模块和5个库模块。
我想在库模块之一的常量变量DB_VERSION_CODE。该值应根据当前运行的应用程序模块更新。目录结构是

|-> apps
|    -> Application 1
|       - build.gradle
|    -> Application 2
|       - build.gradle
|    -> Application 3
|       - build.gradle
|  
|-> modules
|    -> Lib Module 1
|       - build.gradle
|    -> Lib Module 2
|       - build.gradle
|    -> Lib Module 3
|       - build.gradle
|    -> Lib Module 4
|       - build.gradle
| 
| - build.gradle (global)
| - versions.gradle (global)

在全局build.gradle文件中,我正在导入versions. gradle。

版本.gradle:

ext {
   dbVersionCode = -1 //OVERRIDE IN APP GRADLE
}

在应用程序模块的gradle文件中,我正在尝试更新它。

应用1 - build.gradle

android {
     ....

     defaultConfig {
         //Updating Configuration
         rootProject.ext.dbVersionCode = 2001
         ....
     }
     ....
}

应用2 - build.gradle

android {
     ....

     defaultConfig {
         //Updating Configuration
         rootProject.ext.dbVersionCode = 2002
         ....
     }
     ....
}

现在,我正尝试在其中一个库模块中使用相同的字段,如下所示

库模块2 - build.gradle

android {
     ....

     defaultConfig {
         //Updating Configuration
          buildConfigField 'int', 'DB_VERSION_CODE', "${rootProject.ext.dbVersionCode}"
         ....
     }
     ....
}

问题是:

当我尝试运行Application 2时,这工作正常,但当我运行Application 1时,BuildConfig中的值2001没有更新。

  • 想着:*

Gradle是简单的考虑最后一个项目的所有时间。这是工作只有当我评论其他应用程序模块在settings.gradle
请建议我任何其他方法来实现相同的或解决方案,如果我错过了任何小。
先谢了。

2guxujil

2guxujil1#

我终于找到了问题的答案。
问题是,当我尝试在应用程序上运行所有模块时,Gradle脚本正在运行,因为该值在最后一个应用程序模块中被覆盖。因此该值始终相同。
这可以通过使用需要在gradle.properties中提及的标志来避免

org.gradle.configureondemand=true

这样,只有选定的模块及其依赖模块的脚本才会被执行。

相关问题