如何使用gradle为所有模块定义常见的android属性
我用一些模块在AndroidStudio中创build一个简单的项目。 每个模块的gradle脚本包含以下代码:
android { compileSdkVersion 18 buildToolsVersion "18.1.1" defaultConfig { minSdkVersion 7 targetSdkVersion 18 } }
如何将此代码移动到主build.gradle脚本(项目的脚本)? 这个代码对于所有的子模块是通用的。
您可以在项目的根目录(即包含所有模块的文件夹)创build一个build.gradle
,并使用它来configurationrootProject。
例如,如果你有:
MyApp - Module1/ - build.gradle - Module2/ - build.gradle - settings.gradle
你可以在settings.gradle旁边添加一个build.gradle。
在上面的例子中,你实际上有3个Gradle项目: Module1 , Module2和rootProject 。
所以在这个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 }
在最上面的build.gradle中定义这个似乎是可行的
subprojects { afterEvaluate {project -> if (project.hasProperty("android")) { android { compileSdkVersion 22 buildToolsVersion '22.0.1' } } } }
这适用于Android Studio 0.8.9。 使用默认的gradle wrapper 1.12-all。
App是Lite和Pro使用的库,Lite / Pro是我正在制作的两个不同风格的应用程序。 我想分享所有模块之间的configuration。 全局configuration位于根gradle.build文件中,所有子项目/模块都可以读取这些属性。
我的项目结构是:
Project/ gradle.build settings.gradle App/ gradle.build Lite/ gradle.build Pro/ gradle.build
在项目/ gradle.build我已经添加了一个子项目configuration:
subprojects { ext.global_compileSdkVersion = 19 ext.global_buildToolsVersion = "20.0.0" ... }
ext。[var name]添加了可以在子项目中读取的variables。 我已经添加了前缀“global_”,以便更容易看到我的属性。 (另外请注意,我正在使用等号将值赋给variables)
在每个子项目/模块中,gradle文件如下所示:
android { compileSdkVersion global_compileSdkVersion buildToolsVersion global_buildToolsVersion ... }
注意!
Android Studio IDE似乎并不知道子项目中的“ext”,但是gradle确实如此。 因此,在查看gradle文件时显示为警告,但构build仍然可用。 因为它不知道“ext”,所以它似乎并不知道你添加的可变参数,所以这些在IDE中也会被强调为警告。 但它的作品:)
嗯有趣的是,我没有find解决scheme,因为我在Android Studio中应该这样做。 但只有这里我提出的解决scheme工作,所以在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
但代码完成和variables分辨率不工作,因为我期望android工作室。
在主项目的build.gradle中,你应该写下类似的东西:
project.extensions.add("buildToolsVersion", "19.0.3")
在子项目中,您可以使用以下扩展名:
buildToolsVersion rootProject.buildToolsVersion
更多信息你可以在这里find
为您的项目创build一个自定义属性。 设置一个属性使用:
project.ext.compileSdkVersion = 21
设置多个属性使用:
project.ext { compileSdkVersion = 21 buildToolsVersion = "21.0.1" targetSdkVersion = 21 }
如果顶级构build不是Android构build,只需从顶层构build引用“android”闭包不起作用。 “android”方法在评估之后才可用。 最初,我有一个工作的解决scheme,基于设置后评估但不能再工作(Android Studio 0.6.0):
Android任务已经创build。 调用android.applicationVariants,android.libraryVariants或android.testVariants时会发生这种情况。 一旦调用这些方法,就不可能继续configuration模型。
在更新的Android Studio中有一种更简单的方法。 您在顶部项目层次结构中有一个名为“gradle.properties”的文件。 只需在那里定义你的参数:
common_parameter='I am common"
并在模块的gradle文件(build.gradle)中使用它:
module_parameter = common_parameter
而已。