我在Android Studio中创建了一个新项目,并将gradle buildscript转换为使用kotlin dsl,如下所示:
build.gradle.kts(项目)
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath("com.android.tools.build:gradle:4.1.1")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.10")
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
tasks.register("clean", Delete::class) {
delete(rootProject.buildDir)
}
build.gradle.kts(app)
plugins {
id("com.android.application")
kotlin("android")
}
android {
compileSdkVersion(30)
buildToolsVersion = "30.0.2"
defaultConfig {
applicationId = "com.myproject"
minSdkVersion(16)
targetSdkVersion(30)
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
named("release").configure {
isMinifyEnabled = false
proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}
dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib:1.4.10")
implementation( "androidx.core:core-ktx:1.3.2")
implementation( "androidx.appcompat:appcompat:1.2.0")
implementation( "com.google.android.material:material:1.2.1")
implementation( "androidx.constraintlayout:constraintlayout:2.0.4")
testImplementation( "junit:junit:4.+")
androidTestImplementation( "androidx.test.ext:junit:1.1.2")
androidTestImplementation( "androidx.test.espresso:espresso-core:3.3.0")
}
最后,build.gradle.kts(BuildSrc)
import org.gradle.kotlin.dsl.`kotlin-dsl`
plugins {
`kotlin-dsl`
}
repositories {
jcenter()
}
dependencies {
implementation(kotlin("script-runtime"))
}
这可以正常工作,并且项目可以按预期构建。
现在我想将其中一些硬编码的版本号和名称提取到常量中。例如,我想将这一行:implementation(“org.jetbrains.kotlin:kotlin-stdlib:1.4.10
”) 更改为:implementation(“org.jetbrains.kotlin:${ProjectConfig.KOTLIN_VERSION}”)
因此,我在buildSrc/src/main/java/ProjectConfig创建了一个新文件。kt
,如下所示:
object ProjectConfig {
const val KOTLIN_VERSION:String = "1.4.10"
}
但是当我试图从我的gradle脚本中引用这个对象并进行gradle同步时,我会得到以下错误:
E:E:\ projects \ my project \ build . grad le . kts:11:58:未解析的引用:ProjectConfig
定义可以从我的所有build.gradle文件中引用的对象的正确方法是什么?
以下是我在根build.gradle.kts中发现的关于类可用性的信息:
在根级别:
在“buildscript”块中:
这是用Gradle 7确定的。
主要内容:Gradle如何使用Groovy,Groovy的JDK方法,以下是纠正/补充内容:Gradle构建脚本文件用来处理两件事情:一个是项目和另一个的任务。每个生成表示一个或多个项目。一个项目表示一个JAR库或Web应用程序,也可能表示由其他项目产生的JAR文件组装的ZIP。简单地说,一个项目是由不同的任务组成。一个任务是指构建执行的一块工作。任务可能是编译一些类,创建一个,产生的或发布一些归档文件库。 注:Gradle使用Groovy语言编写脚本。 Gradle提供了一个域特定语言
问题内容: 我有一个时髦的脚本去推广代码。长话短说,我知道该脚本中的某个时间点是否成功。如果不成功,我想使构建失败。有什么办法使构建失败? 例: 在“执行Groovy脚本”插件中。您可以编写代码。 其中,“ checkPromote”根据促销的状态返回true或false值。 问题答案: 我认为,中止程序的最优雅方法是声明。
Gradle 是以 Groovy 语言为基础, 基于DSL (领域特定语言) 语法的自动化构建工具,但是它增加了一些额外的特性,这使得Gradle更加的容易去阐释构建. 一个构建脚本能够包含任何Groovy语言的元素 ( Any language element except for statement labels ), 每个构建脚本都使用UTF-8编码.
我知道这是一个专门用于Gradle构建脚本的DSL,但是我在哪里可以找到它,如何解析/使用它呢? 谢谢!
本文向大家介绍gradle 分析构建,包括了gradle 分析构建的使用技巧和注意事项,需要的朋友参考一下 示例 在开始调整Gradle构建的性能之前,您应该建立基准并确定构建的哪些部分花费最多的时间。为此,您可以通过将--profile参数添加到Gradle命令来对构建进行概要分析: 构建完成后,您将在下./build/reports/profile/看到构建的HTML配置文件报告,如下所示:
Gradle 的构建脚本展示了 Groovy 的所有能力. 作为开胃菜, 来看看这个: 例子 6.4. 在 Gradle 任务里使用 Groovy build.gradle task upper << { String someString = 'mY_nAmE' println "Original: " + someString println "Upper case: