此处将为大家介绍关于buildTypes不能应用于groovy.lang.Closure的详细内容,并且为您解答有关build不可用的相关问题,此外,我们还将为您介绍关于Androidgradle:所
此处将为大家介绍关于buildTypes 不能应用于 groovy.lang.Closure的详细内容,并且为您解答有关build不可用的相关问题,此外,我们还将为您介绍关于Android gradle:所有buildTypes都在同一时间执行、android – Gradle插件3.0.0 beta 4:“buildTypeMatching已被删除.使用buildTypes..fallbacks“、android – 有没有办法从root build.gradle文件共享buildTypes和signingConfigs?、Android 不同 flavor 及不同 buildType 配置不同的 buildConfigField的有用信息。
本文目录一览:- buildTypes 不能应用于 groovy.lang.Closure(build不可用)
- Android gradle:所有buildTypes都在同一时间执行
- android – Gradle插件3.0.0 beta 4:“buildTypeMatching已被删除.使用buildTypes..fallbacks“
- android – 有没有办法从root build.gradle文件共享buildTypes和signingConfigs?
- Android 不同 flavor 及不同 buildType 配置不同的 buildConfigField
buildTypes 不能应用于 groovy.lang.Closure(build不可用)
我在我的项目 gradle 文件中收到此警告:
警告:(16, 5) ‘buildTypes’ 不能应用于
‘(groovy.lang.Closure)’
我的 buildTypes 部分是:
buildTypes { debug { debuggable true } release { minifyEnabled true proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-project.txt'' } }
我目前正在使用 Android Studio 1.1.0、compileSdkVersion 22、buildToolsVersion 22.0.0 和
targetSdkVersion 22。我尝试退回到 21,但仍然收到警告。
是什么导致了这个警告以及它是如何解决的?
答案1
小编典典对我来说,应用上述解决方案并没有解决问题。相反,我必须转到 Android Studio 中的设置并选择“使用 gradle wrapper”:
在 Android Studio 中选择: File\Settings\Build, Execution, Deployment\Build
tools\Gradle
(Mac 用户: Android Studio\Preferences…\Build, Execution, Deployment\Build
tools\Gradle )
标记: 使用默认的 gradle 包装器(默认)
这删除了构建文件中的所有“不能应用于”(groovy.lang.Closure)警告。
Android gradle:所有buildTypes都在同一时间执行
我有一个android gradle项目,并且我试图为它配置buildTypes.这是我的build.gradle的一部分:
android {
...
buildTypes {
debug {
println("inside debug...")
}
release {
println("inside release...")
}
}
...
}
当从终端运行assembleDebug任务时,输出为:
inside debug...
inside release...
为什么要打印释放块?当我执行assembleDebug任务时只打印调试块,而当执行assembleRelease任务时只打印释放块,该怎么办?
我对android和gradle都是新手,所以任何帮助都会很棒.
解决方法:
简单的答案是:它们不是.
Gradle(这是一种简化)分为两个阶段工作:配置和执行.在配置阶段,将评估整个脚本-这就是为什么您添加的println语句确实出现在输出中的原因.
要验证发布和调试任务是否都运行,请添加以下代码:
assembleDebug << {
println 'debug run'
}
assembleRelease << {
println 'release run'
}
与<<添加了一个动作,它将在任务运行时执行.操作在执行阶段运行.
android – Gradle插件3.0.0 beta 4:“buildTypeMatching已被删除.使用buildTypes..fallbacks“
更新到Gradle插件3.0.0 beta 4后,我们的构建失败并显示以下消息:
buildTypeMatching has been removed. Use buildTypes.<name>.fallbacks
我们的库有发布和调试buildTypes,但我们的app有两个额外的buildTypes:’releaseWithLogs’和’debugMinified’.
我们的应用程序Gradle文件的片段:
android {
// ...
buildTypeMatching 'releaseWithLogs', 'release'
buildTypeMatching 'debugMinified', 'debug'
buildTypes {
debug {
// ...
}
debugMinified {
// ...
}
release {
// ...
}
releaseWithLogs {
// ...
}
}
}
解决方法:
经过一番调查后,发现了以下公告:Android Studio 3.0 Beta 4 is now available.在那里,它提到:
You Now provide fallbacks for missing build types and flavors using
matchingFallbacks
(which replacesbuildTypeMatching
andproductFlavorMatching
). You also provide the default selection and fallbacks for missing dimensions usingmissingDimensionStrategy
(which replacesflavorSelection
).
所以,我们以前的应用build.gradle转换为:
android {
// ...
//buildTypeMatching 'releaseWithLogs', 'release' // remove this
//buildTypeMatching 'debugMinified', 'debug' // remove this
buildTypes {
debug {
// ...
}
debugMinified {
// ...
matchingFallbacks = ['debug'] // instead use this
}
release {
// ...
}
releaseWithLogs {
// ...
matchingFallbacks = ['release'] // instead use this
}
}
}
请注意,我们不是说buildType releaseWithLogs也会与release(buildTypeMatching’releaseWithLogs’,’release’)匹配,而是指定buildType本身内部的匹配.对于debugMinified匹配调试也是如此.另请注意,在发布和调试buildTypes中不需要包含它,因为它们已经匹配.
android – 有没有办法从root build.gradle文件共享buildTypes和signingConfigs?
build.gradle (root) --->build.gradle (Base project) ---> build.gradle (Version 1) ---> V1 Flavor 1 ---> V1 Flavor 2 ---> build.gradle (Version 2) ---> V2 Flavor 1 ---> V2 Flavor 2 ---> build.gradle (Version 3,no flavors)
主要问题是在调试和发布版本之间切换时,我的所有build.gradle文件中都有重复的buildTypes和signingConfigs.我在所有build.gradle文件中都有这个:
signingConfigs { debug { storeFile debug.keystore } release { storeFile -REMOVED- storePassword -REMOVED- keyAlias -REMOVED- keyPassword -REMOVED- } } buildTypes { debug { minifyEnabled false signingConfig signingConfigs.debug } release { minifyEnabled true proguardFiles ''proguard-project.txt'' signingConfig signingConfigs.release } }
这样做的两个主要问题是我需要在Android Studio的Build Variants部分中手动切换基础项目,版本1项目和应用程序项目,而不是仅在应用程序上选择调试或发布项目.如果我试图构建V1 Flavor 1,我必须在该应用程序上选择版本1,以及Build Variants中的基础项目来构建它.
有没有办法让我的库项目的build.gradle文件继承buildType和signingConfig,只需要选择我正在构建的应用程序的构建类型,而不是更改库构建类型?当选择发布时,库项目仍然需要通过proguard运行.
解决方法
buildscript { // Buildscript items here } allprojects { repositories { // Maven repos,jcenter,etc go here } // Common build attributes for every build type ext.ANDROID = { project -> project.android { compileSdkVersion ''Google Inc.:Google Apis:22'' buildToolsversion ''22.0.1'' defaultConfig { targetSdkVersion 22 minSdkVersion 10 } signingConfigs { release { storeFile STORE_FILE storePassword STORE_PASSWORD } } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile(''proguard-android.txt'') signingConfig signingConfigs.release } } } } // Common flavor attributes ext.ANDROID_PRODUCT_FLAVORS = { project -> android { productFlavors { // Flavor configs in here } } } } project('':library1'') { apply plugin: ''com.android.library'' dependencies { // Library dependencies here } // Only need to include the base ''android'' items for this library project.ANDROID(project) } // App with no flavors project('':app1'') { apply plugin: ''com.android.application'' dependencies { compile project('':library1'') } // Only need to include the base ''android'' items for this app project.ANDROID(project) } // App with many types of flavors project('':app2'') { apply plugin: ''com.android.application'' dependencies { compile project('':library1'') } // Need to include the base ''android'' items AND ''product_flavors'' items for this app project.ANDROID(project) project.ANDROID_PRODUCT_FLAVORS(project) }
Android 不同 flavor 及不同 buildType 配置不同的 buildConfigField

项目中有这个需求:
不同变体 flavor 对应的不同 buildType 要配置不同的 buildConfigField 字段。
如 A 变体的 debug 和 release 中分别设置不同的应用名称,或者设置不同的接口地址等等。
我们在 flavor 中默认配置 debug 下的 buildConfigField,在 applicationVariants.all 中对应做 release 的处理,当 buildVariant 选了 debug/release 时就会根据配置去设置不同的字段了。
//以下配置都在build.gradle android {}内
//版本变体配置
productFlavors {
A {
applicationId "com.example.a"
buildConfigField ''String'', ''APP_TITLE'', ''"应用A Debug"''
}
B {
applicationId "com.example.b"
buildConfigField ''String'', ''APP_TITLE'', ''"应用B Debug"''
}
}
buildTypes {
release {
...
}
debug {
...
}
}
...
//修改打包名称、字段
android.applicationVariants.all { variant ->
variant.outputs.all { output ->
def buildTypeName = ""
def flavorName = variant.flavorName.capitalize()
if (variant.buildType.name == "release") {
buildTypeName = "Release"
} else {
buildTypeName = "Debug"
}
if (flavorName == "A" && buildTypeName == "Release") {
variant.buildConfigField "String", "APP_TITLE", ''"应用A Release"''
}
output.outputFileName = "${flavorName}_${buildTypeName}.apk"
}
}
今天关于buildTypes 不能应用于 groovy.lang.Closure和build不可用的分享就到这里,希望大家有所收获,若想了解更多关于Android gradle:所有buildTypes都在同一时间执行、android – Gradle插件3.0.0 beta 4:“buildTypeMatching已被删除.使用buildTypes..fallbacks“、android – 有没有办法从root build.gradle文件共享buildTypes和signingConfigs?、Android 不同 flavor 及不同 buildType 配置不同的 buildConfigField等相关知识,可以在本站进行查询。
本文标签: