制作企业网站的一般流程/关键词优化seo公司
目录
时间轴
常用术语
脚本文件命名
转换语法
为方法调用添加圆括号
为分配调用添加 =
转换字符串
重命名文件扩展名
将 def 替换为 val 或 var
为布尔值属性添加 is 前缀
转换列表和映射
配置 build 类型
从 buildscript 迁移到插件块
查找插件 ID
执行重构
转换 plugins 块
其他
已知问题
如何报告问题
更多资源
Android Gradle 插件 4.0 支持在 Gradle build 配置中使用 Kotlin,以替代 Groovy(Gradle 配置文件中通常使用的编程语言)。
在编写 Gradle 脚本方面,Kotlin 比 Groovy 更优,因为 Kotlin 更易于阅读,并且提供了更好的编译时检查和 IDE 支持。
虽然与 Groovy 相比,Kotlin 目前在 Android Studio 的代码编辑器中提供了更好的集成,但使用 Kotlin 的 build 往往比使用 Groovy 的 build 慢,因此在决定是否迁移时,请考虑 build 性能。
本页介绍了有关将 Android 应用的 Gradle build 文件从 Groovy 转换为 Kotlin 的基本信息。如需查看更全面的迁移指南,请参阅 Gradle 的官方文档。
时间轴
注意 :从 Android Studio Giraffe 开始,Kotlin 是 build 配置的默认语言。如果您使用 AGP 8.1 和 Kotlin DSL 进行 build 配置,建议您使用 Gradle 8.1 以获得最佳体验。
从 Android Studio Giraffe 开始,新项目将默认使用 Kotlin DSL (build.gradle.kts
) 进行 build 配置。与 Groovy DSL (build.gradle
) 相比,这种方法具有语法突出显示、代码补全和声明导航等功能,可提供更好的修改体验。如需了解详情,请参阅 Gradle Kotlin DSL Primer。
常用术语
Kotlin DSL:主要是指 Android Gradle 插件 Kotlin DSL,有时也指底层 Gradle Kotlin DSL。
在本迁移指南中,“Kotlin”和“Kotlin DSL”可以互换使用。同样,“Groovy”和“Groovy DSL”可互换使用。
脚本文件命名
脚本文件扩展名取决于编写 build 文件所用的语言:
- 用 Groovy 编写的 Gradle build 文件使用
.gradle
文件扩展名。 - 用 Kotlin 编写的 Gradle build 文件使用
.gradle.kts
文件扩展名。
转换语法
Groovy 和 Kotlin 的语法之间存在一些普遍差异,因此您需要在 build 脚本中应用以下更改。
为方法调用添加圆括号
提示:首先,在更改文件扩展名之前,最好先在 Groovy 代码中添加圆括号。这样可以更轻松地转换为 Kotlin。
Groovy 允许您在方法调用中省略圆括号,而 Kotlin 则要求使用圆括号。如需迁移配置,请为这些类型的方法调用添加圆括号。以下代码展示了如何在 Groovy 中配置设置:
compileSdkVersion 30
以下是使用 Kotlin 编写的相同代码:
compileSdkVersion(30)
为分配调用添加 =
提示:在更改文件扩展名之前,请在 Groovy 代码中添加 =
。这样可以更轻松地转换为 Kotlin。
Groovy DSL 允许您在分配属性时省略赋值运算符 =
,而 Kotlin 则需要使用它。以下代码展示了如何在 Groovy 中分配属性:
java {sourceCompatibility JavaVersion.VERSION_17targetCompatibility JavaVersion.VERSION_17
}
以下代码展示了如何在 Kotlin 中分配属性:
java {sourceCompatibility = JavaVersion.VERSION_17targetCompatibility = JavaVersion.VERSION_17
}
转换字符串
以下是 Groovy 和 Kotlin 在字符串方面的差异:
- 用于定义字符串的双引号:虽然 Groovy 允许使用单引号来定义字符串,但 Kotlin 要求使用双引号。
-
基于句点表达式的字符串插值:在 Groovy 中,对于句点表达式的字符串插值,您可以仅使用“
$
”前缀,但 Kotlin 要求您用大括号将句点表达式括起来。例如,在 Groovy 中,您可以使用如以下代码段所示的$project.rootDir
:myRootDirectory = "$project.rootDir/tools/proguard-rules-debug.pro"
不过,在 Kotlin 中,上述代码会针对
project
(而非project.rootDir
)调用toString()
。如需获取根目录的值,请使用大括号括住${project.rootDir}
表达式:myRootDirectory = "${project.rootDir}/tools/proguard-rules-debug.pro"
如需了解详情,请参阅 Kotlin 文档中的字符串模板。
重命名文件扩展名
请在迁移每个 build 文件的内容时将 .kts
添加到其文件扩展名后。例如,选择一个 build 文件(如 settings.gradle
文件)。将该文件重命名为 settings.gradle.kts
,然后将其内容转换为 Kotlin 代码。请确保您的项目在迁移每个 build 文件之后仍然可以编译。
请先迁移最小的文件以便积累经验,然后再继续。项目中可以混合使用 Kotlin 和 Groovy build 文件,因此请花些时间仔细进行迁移。
将 def
替换为 val
或 var
将 def
替换为 val
或 var
,这是在 Kotlin 中定义变量的方式。以下是 Groovy 中的变量声明:
def building64Bit = false
以下是使用 Kotlin 编写的相同代码:
val building64Bit = false
为布尔值属性添加 is
前缀
Groovy 会根据属性名称使用属性推导逻辑。对于布尔值属性 foo
,其推导的方法可以是 getFoo
、setFoo
或 isFoo
。因此,在转换为 Kotlin 后,您需要为 Kotlin 不支持的推导方法更改属性名称。例如,对于 buildTypes
DSL 布尔值元素,您需要为它们添加 is
前缀。以下代码展示了如何在 Groovy 中设置布尔值属性:
android {buildTypes {release {minifyEnabled trueshrinkResources true...}debug {debuggable true...}...
以下是 Kotlin 中的相同代码:请注意,这些属性带有 is
前缀。
android {buildTypes {getByName("release") {isMinifyEnabled = trueisShrinkResources = true...}getByName("debug") {isDebuggable = true...}...
转换列表和映射
Groovy 和 Kotlin 中的列表和映射使用不同的语法进行定义。Groovy 使用 []
,而 Kotlin 使用 listOf
或 mapOf
显式调用集合创建方法。迁移时,请务必将 []
替换为 listOf
或 mapOf
。
以下是 Groovy(相对于 Kotlin)定义列表的方法:
jvmOptions += ["-Xms4000m", "-Xmx4000m", "-XX:+HeapDumpOnOutOfMemoryError</code>"]
以下是使用 Kotlin 编写的相同代码:
jvmOptions += listOf("-Xms4000m", "-Xmx4000m", "-XX:+HeapDumpOnOutOfMemoryError")
以下是 Groovy(相对于 Kotlin)定义映射的方法:
def myMap = [key1: 'value1', key2: 'value2']
以下是使用 Kotlin 编写的相同代码:
val myMap = mapOf("key1" to "value1", "key2" to "value2")
配置 build 类型
在 Kotlin DSL 中,只有调试和发布 build 类型是隐式提供的。所有其他自定义 build 类型都必须手动创建。
在 Groovy 中,您无需先创建就可以使用调试、发布和某些其他 build 类型。以下代码段展示了 Groovy 中具有 debug
、release
和 benchmark build 类型的配置。
buildTypes {debug {...}release {...}benchmark {...}
}
如需在 Kotlin 中创建等效配置,您必须显式创建 benchmark
build 类型。
buildTypes {debug {...}release {...}register("benchmark") {...}
}
从 buildscript 迁移到插件块
如果您的 build 使用 buildscript {} 代码块向项目添加插件,您应重构为改用 plugins {} 代码块。plugins {}
代码块可让您更轻松地应用插件,并且与版本目录非常兼容。
此外,如果您在 build 文件中使用 plugins {}
代码块,即使构建失败,Android Studio 也会知道上下文。此上下文有助于修复 Kotlin DSL 文件,因为它允许 Studio IDE 执行代码补全并提供其他实用建议。
查找插件 ID
虽然 buildscript {}
代码块使用插件的 Maven 坐标(例如 com.android.tools.build:gradle:7.4.0
)将插件添加到 build 类路径,但 plugins {}
代码块会改用插件 ID。
对于大多数插件,插件 ID 是使用 apply plugin
应用它们时使用的字符串。例如,以下插件 ID 是 Android Gradle 插件的一部分:
com.android.application
com.android.library
com.android.lint
com.android.test
您可以在 Google Maven 制品库中找到完整的插件列表。
Kotlin 插件可由多个插件 ID 引用。我们建议您使用命名空间型插件 ID,并根据下表将其从简写形式重构为命名空间型插件 ID:
简写插件 ID | 命名空间型插件 ID |
---|---|
kotlin | org.jetbrains.kotlin.jvm |
kotlin-android | org.jetbrains.kotlin.android |
kotlin-kapt | org.jetbrains.kotlin.kapt |
kotlin-parcelize | org.jetbrains.kotlin.plugin.parcelize |
您还可以在 Gradle 插件门户、Maven Central Repository 和 Google Maven 制品库中搜索插件。 如需详细了解插件 ID 的工作原理,请参阅开发自定义 Gradle 插件。
执行重构
知道所用插件的 ID 后,请执行以下步骤:
-
如果您仍有用于存放在
buildscript {}
代码块中声明的插件的代码库,请改为将其移至 settings.gradle 文件。 -
将插件添加到顶级
build.gradle
文件的plugins {}
代码块中。您需要在此处指定插件的 ID 和版本。如果不需要将该插件应用到根项目,请使用apply false
。 -
从顶级
build.gradle.kts
文件中移除classpath
条目。 -
将插件添加到模块级
build.gradle
文件的plugins {}
代码块中,即可应用插件。您只需在此处指定插件的 ID,因为相应版本继承自根项目。 -
从模块级
build.gradle
文件中移除插件的apply plugin
调用。
例如,此设置使用 buildscript {}
代码块:
// Top-level build.gradle file
buildscript {repositories {google()mavenCentral()gradlePluginPortal()}dependencies {classpath("com.android.tools.build:gradle:7.4.0")classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0")...}
}// Module-level build.gradle file
apply(plugin: "com.android.application")
apply(plugin: "kotlin-android")
以下是使用 plugins {}
代码块的等效设置:
// Top-level build.gradle file
plugins {id 'com.android.application' version '7.4.0' apply falseid 'org.jetbrains.kotlin.android' version '1.8.0' apply false...
}// Module-level build.gradle file
plugins {id 'com.android.application'id 'org.jetbrains.kotlin.android'...
}// settings.gradle
pluginManagement {repositories {google()mavenCentral()gradlePluginPortal()}
}
转换 plugins 块
在 Groovy 和 Kotlin 中,从 plugins {}
块应用插件类似。以下代码展示了当您使用版本目录时如何在 Groovy 中应用插件:
// Top-level build.gradle file
plugins {alias libs.plugins.android.application apply false...
}// Module-level build.gradle file
plugins {alias libs.plugins.android.application...
}
以下代码展示了如何在 Kotlin 中执行相同的操作:
// Top-level build.gradle.kts file
plugins {alias(libs.plugins.android.application) apply false...
}// Module-level build.gradle.kts file
plugins {alias(libs.plugins.android.application)...
}
以下代码展示了当您不使用版本目录时如何在 Groovy 中应用插件:
// Top-level build.gradle file
plugins {id 'com.android.application' version '7.3.0' apply false...
}// Module-level build.gradle file
plugins {id 'com.android.application'...
}
以下代码展示了如何在 Kotlin 中执行相同的操作:
// Top-level build.gradle.kts file
plugins {id("com.android.application") version "7.3.0" apply false...
}// Module-level build.gradle.kts file
plugins {id("com.android.application")...
}
如需详细了解 plugins {}
代码块,请参阅 Gradle 文档中的应用插件。
其他
如需了解 Kotlin 实现其他功能的代码示例,请参阅以下文档页面:
- 如果您有 ProGuard 配置,请参阅启用缩减、混淆和优化。
- 如果您有
signingConfig {}
块,请参阅从 build 文件中移除签名信息。 - 如果您使用项目全局属性,请参阅配置项目全局属性。
注意:虽然 Gradle 可让您在模块级别定义项目全局属性,但您应避免这样做,因为这样会导致共享这些属性的模块耦合。模块耦合使得以后将模块作为独立项目导出更加困难,并妨碍 Gradle 利用并行项目执行加快多模块 build。
已知问题
目前,一个已知问题是采用 Kotlin 的构建速度可能比使用 Groovy 慢。
如何报告问题
如需了解如何提供对问题进行分类所需的信息,请参阅构建工具和 Gradle bug 详细信息。然后,使用 Google 公开问题跟踪器来提交 bug。
更多资源
如需查看使用 Kotlin 编写的 Gradle build 文件的可运行示例,请参阅 GitHub 上的 Now In Android 示例应用。
翻译
搜索
复制
相关文章:

将 build.gradle 配置从 Groovy 迁移到 Kotlin
目录 时间轴 常用术语 脚本文件命名 转换语法 为方法调用添加圆括号 为分配调用添加 转换字符串 重命名文件扩展名 将 def 替换为 val 或 var 为布尔值属性添加 is 前缀 转换列表和映射 配置 build 类型 从 buildscript 迁移到插件块 查找插件 ID 执行重构 转…...

5G(NR) NTN 卫星组网架构
5G(NR) NTN 卫星组网架构 参考 3GPP TR 38.821 5G NTN 技术适用于高轨、低轨等多种星座部署场景,是实现星地网络融合发展的可行技术路线。5G NTN 网络分为用户段、空间段和地面段三部分。其中用户段由各种用户终端组成,包括手持、便携站、嵌入式终端、车…...

WEB安全-文件上传漏洞
1 需求 2 接口 3 MIME类型 在Web开发中,MIME(Multipurpose Internet Mail Extensions)类型用于标识和表示文档的格式。这些类型在HTTP请求和响应头中扮演着重要的角色,告诉浏览器如何解释和处理接收到的资源12。 以下是一些Web开发…...

Python函数 之 函数基础
print() 在控制台输出 input() 获取控制台输⼊的内容 type() 获取变量的数据类型 len() 获取容器的⻓度 (元素的个数) range() ⽣成⼀个序列[0, n) 以上都是我们学过的函数,函数可以实现⼀个特定的功能。我们将学习⾃⼰如何定义函数, 实现特定的功能。 1.函数是什么…...

昇思25天学习打卡营第11天|SSD目标检测
SSD网络 目标检测问题可以分为以下两个问题:1)分类:所有类别的概率;2)定位: 4个值(中心位置x,y,宽w,高h) Single Shot MultiBox Detector,SSD:单阶段的目标检测算法,通过卷积神经网络进行特征…...

MySQL篇五:基本查询
文章目录 前言1. Create1.1 单行数据 全列插入1.2 多行数据 指定列插入1.3 插入否则更新1.4 替换 2. Retrieve2.1 SELECT 列2.1.1 全列查询2.1.2 指定列查询2.1.3 查询字段为表达式2.1.4 为查询结果指定别名2.1.5 结果去重 2.2 WHERE 条件2.2.1 练习 2.3 结果排序2.3.1 练习 …...

FreeBSD@ThinkPad x250因电池耗尽关机后无法启动的问题存档
好几次碰到电池耗尽FreeBSD关机,再启动,网络通了之后到了该出Xwindows窗体的时候,屏幕灭掉,网络不通,只有风扇在响,启动失败。关键是长按开关键后再次开机,还是启动失败。 偶尔有时候重启到单人…...

pdfplumber vs PyMuPDF:PDF文本、图像和表格识别的比较
pdfplumber vs PyMuPDF:PDF文本、图像和表格识别的比较 1. 文本提取pdfplumberPyMuPDF 2. 图像提取pdfplumberPyMuPDF 3. 表格提取pdfplumberPyMuPDF 总结 在处理PDF文件时,提取文本、图像和表格是常见的需求。本文将比较两个流行的Python PDF处理库:pdfplumber和PyMuPDF(fitz)…...

深入Django系列
Django简介与环境搭建 引言 在这个系列的第一天,我们将从Django的基本概念开始,逐步引导你搭建一个Django开发环境,并运行你的第一个Django项目。 Django简介 Django是一个开源的Web框架,它鼓励快速开发和干净、实用的设计。D…...

【Python】找Excel重复行
【背景】 找重复行虽然可以通过Excel实现,但是当数据量巨大时光是找结果就很费时间,所以考虑用Python实现。 【代码】 import pandas as pd# 读取Excel文件 file_path = your excel file path df = pd.read_excel(file_path)# 查找重复行 # 这里假设要检查所有列的重复项 …...

重读AI金典算法模型-GPT系列
2023年对于AI来说,可以算是一个里程碑式的年份,随着OpenAI的chatGPT的大火,遍地的生成式AI应用应运而生。在这些上层应用大放异彩的时候,我们需要了解一些底层的算法模型,并从中窥探出为什么时代选择了OpenAI的chatGPT…...

仙人掌中的SNMP检测不到服务器
登录有问题的服务器1.检测snmp localhost:~ # ps -ef|grep snmp root 55180 1 0 08:37 ? 00:00:08 /usr/sbin/snmpd -r -A -LF n /var/log/net-snmpd.log -p /var/run/snmpd.pid root 58436 53989 0 09:44 pts/0 00:00:00 grep --colorauto snmp2.检测…...
git只列出本地分支
git只列出本地分支 git branch --list git强制删除本地分支 git branch -D_error: the branch dlx-test is not fully merged. -CSDN博客文章浏览阅读648次。git branch -d 可以通过: git branch 查看所有本地分支及其名字,然后删除特定分支。git删除远程remote分支…...

算力狂飙|WAIC 2024上的服务器
7月7日,2024世界人工智能大会暨人工智能全球治理高级别会议(WAIC 2024)在上海落下帷幕。这场备受瞩目的AI盛宴与热辣夏日碰撞,吸引了全球科技、产业及学术界的广泛关注,线下参观人数突破30万人次,线上流量突…...

uniapp app端跳转第三方app(高德地图/百度地图为例)
1.先写一个picker选择器 <picker change"bindPickerChange" :value"index" :range"array"><view class"uni-input">{{array[index] || 打开第三方app }}</view></picker> 2.在data中定义好高德地图/百度地图…...

阿里云RDS云数据库库表恢复操作
最近数据库中数据被人误删了,记录一下恢复操作方便以后发生时进行恢复. 1.打开控制台,进入云数据库实例. 2.进入实例后 ,点击右侧的备份恢复,然后看一下备份时间点,中间这边都是阿里云自动备份的备份集,基本都是7天一备…...

来一场栈的大模拟(主要是单调栈)
一.栈模拟 二.单调栈求最大矩形面积 通常,直方图用于表示离散分布,例如,文本中字符的频率。 现在,请你计算在公共基线处对齐的直方图中最大矩形的面积。 图例右图显示了所描绘直方图的最大对齐矩形。 输入格式 输入包含几个测…...

13 - matlab m_map地学绘图工具基础函数 - 介绍创建管理颜色映射的函数m_colmap和轮廓图绘制颜色条的函数m_contfbar
13 - matlab m_map地学绘图工具基础函数 - 介绍创建管理颜色映射的函数m_colmap和轮廓图绘制颜色条的函数m_contfbar 0. 引言1. 关于m_colmap2. 关于m_contfbar3. 结语 0. 引言 本篇介绍下m_map中用于创建和管理颜色映射函数(m_colmap)和 为轮廓图绘制颜…...

PTA - 编写函数计算圆面积
题目描述: 1.要求编写函数getCircleArea(r)计算给定半径r的圆面积,函数返回圆的面积。 2.要求编写函数get_rList(n) 输入n个值放入列表并将列表返回 函数接口定义: getCircleArea(r); get_rList(n); 传入的参数r表示圆的半径,…...

Golang | Leetcode Golang题解之第218题天际线问题
题目: 题解: type pair struct{ right, height int } type hp []pairfunc (h hp) Len() int { return len(h) } func (h hp) Less(i, j int) bool { return h[i].height > h[j].height } func (h hp) Swap(i, j int) { h[i], h[j]…...

【Mars3d】osgb倾斜摄影模型加载慢卡顿的优化方案参考
倾斜摄影模型文件一共6个多g,一个村子十几间房, 服务器配置:8c16g 100M 答: 目前可以对 3dtiles 模型有下面 3 方法来入手: 数据处理层面,比如数据处理工具的选择、和选择的工具本身的一些优化参数的设…...

认识同源策略
同源策略是一种浏览器安全机制,用于限制一个源的文档或脚本如何与另一个源的资源进行交互。源由协议(如HTTP或HTTPS)、域名和端口号组成。如果两个URL的协议、域名和端口都相同,则它们具有相同的源。 同源策略主要影响以下几个方…...

ADOQuery 查询MSSQL存储过程一个莫名其妙的错误;
在 SSMS 中执行完成正常的的存储过程。 也能正常的返回想要的数据,,然后通过 ADO 查询时,总是提法 某 字段不存在的问题; 此问题困扰了一天。 例如(当然,实际数据结构比下面举例的复杂)&…...

变阻器的分类
变阻器作为用于调节电路中电阻值的电子元件,在电子电路中具有广泛的应用。根据不同的工作原理和结构形式,变阻器可以分为多种类型。以下是对变阻器分类的详细阐述: 一、按工作原理分类 电位器是一种通过滑动端位置调节电阻值的变阻器&#x…...

微服务节流阀:Eureka中服务限流策略的精妙实现
微服务节流阀:Eureka中服务限流策略的精妙实现 引言 在微服务架构中,服务的稳定性和可靠性至关重要。限流策略作为保障服务稳定性的一种手段,通过控制服务的访问速率,可以有效避免服务过载和故障扩散。Eureka作为Netflix开源的服…...

Keras实战之图像分类识别
文章目录 整体流程数据加载与预处理搭建网络模型优化网络模型学习率Drop-out操作权重初始化方法对比正则化加载模型进行测试 实战:利用Keras框架搭建神经网络模型实现基本图像分类识别,使用自己的数据集进行训练测试。 问:为什么选择Keras&am…...

Celery,一个实时处理的 Python 分布式系统
大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。 一个简单的库,也许能够开启我们的智慧之门, 一个普通的方法,也许能在危急时刻挽救我们于水深火热, 一个新颖的思维方式,也许能…...

源码编译安装 LAMP
源码编译安装 LAMP Apache 网站服务基础Apache 简介安装 httpd 服务器 httpd 服务器的基本配置Web 站点的部署过程httpd.conf 配置文件 构建虚拟 Web 主机基于域名的虚拟主机基于IP 地址、基于端口的虚拟主机 MySQL 的编译安装构建 PHP 运行环境安装PHP软件包设置 LAMP 组件环境…...

PostgreSQL的pg_filedump工具
PostgreSQL的pg_filedump工具 基础信息 OS版本:Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本:16.2 pg软件目录:/home/pg16/soft pg数据目录:/home/pg16/data 端口:5777pg_filedump 是一个工具&#x…...

Java语言+后端+前端Vue,ElementUI 数字化产科管理平台 产科电子病历系统源码
Java语言后端前端Vue,ElementUI 数字化产科管理平台 产科电子病历系统源码 Java开发的数字化产科管理系统,已在多家医院实施,支持直接部署。系统涵盖孕产全程,包括门诊、住院、统计和移动服务,整合高危管理、智能提醒、档案追踪等…...