使用 Kotlin 和 Groovy 构建配置的一些细微差别

news/2024/4/27 22:50:51/文章来源:https://blog.csdn.net/weixin_62636014/article/details/137127207

title: Android 开发学习第二天
search: 2024-03-10
tags:

  • “#Android开发”

使用 Kotlin 和 Groovy 构建配置的一些细微差别

Kotlin引入依赖格式

文章目录

  • 使用 Kotlin 和 Groovy 构建配置的一些细微差别
    • Kotlin引入依赖格式
    • Kotlin 的引入格式
    • Android批量导入Jar
    • Android图片加速工具
    • 签名配置
    • Lint 静态代码分析
    • Android资源路径重定义

dependencies {  implementation("androidx.core:core-ktx:1.10.1")  implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.1")  implementation("androidx.activity:activity-compose:1.7.0")  implementation(platform("androidx.compose:compose-bom:2023.08.00"))  implementation("androidx.compose.ui:ui")  implementation("androidx.compose.ui:ui-graphics")  implementation("androidx.compose.ui:ui-tooling-preview")  implementation("androidx.compose.material3:material3")  testImplementation("junit:junit:4.13.2")  androidTestImplementation("androidx.test.ext:junit:1.1.5")  androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")  androidTestImplementation(platform("androidx.compose:compose-bom:2023.08.00"))  androidTestImplementation("androidx.compose.ui:ui-test-junit4")  debugImplementation("androidx.compose.ui:ui-tooling")  debugImplementation("androidx.compose.ui:ui-test-manifest")  
}

可以看到,这里面有几种引用配置

  1. implementation
  2. testImplementation
  3. androidTestImplementation
  4. debugImplementation

几个分别用来指定依赖库在不同构建配置下的引用范围,能够实现更加精细化的依赖粒度操控

  1. implementation: 这是主要的依赖配置,表示该依赖在应用的主要代码中可用。这包括应用的正式发布版本和所有构建类型(release 和 debug)。

  2. testImplementation: 这是用于测试代码的依赖配置,表示该依赖仅在执行测试时可用。这些依赖通常包含测试框架和工具。

  3. androidTestImplementation: 这是用于Android测试的依赖配置,表示该依赖仅在执行Android设备上的仪器化测试时可用。

  4. debugImplementation: 这是特定于调试构建类型的依赖配置,表示该依赖仅在调试版本的应用中可用。这通常用于引入调试工具和辅助库。

用得好其实就是避免不用的依赖在编译的时候被引用,从而提高效率。

Kotlin 的引入格式

还要注意,Kotlin 的引用依赖标准格式如下

implementation("XXXXXXXXXXXXXXXXXXXXXXX")

以及有时候你可以看到有 platform 的前缀,很简单,这个就是引用了一个 BOMBill of Materials)或者说是引入了一个平台,不是单独引入一个依赖,而是一系列依赖,这样更加方便进行一个整体依赖的引入,从而减少潜在的兼容性和版本冲突问题。

implementation(platform("androidx.compose:compose-bom:2023.08.00"))

Android批量导入Jar

implementation fileTree(dir: 'libs', include: ['*.jar'])

fileTree(dir: 'libs', include: ['*.jar']): 这一行代码使用 fileTree 函数,该函数创建一个代表文件树的对象。在这里,它指定了一个目录 'libs',并包含了该目录下所有后缀为 '.jar' 的 JAR 文件。这表示将该目录下所有的 JAR 文件作为依赖项添加到项目中。

这种方式对于添加目录中的多个 JAR 文件很方便,因为它避免了手动列举每个 JAR 文件的繁琐工作。通常情况下,你可以将第三方库的 JAR 文件放置在项目的 libs 目录下,然后使用这种方式添加它们作为项目的依赖项。

implementation 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

一般来说是单引号的,同时没有括号

但是和括号是可选的,如果方法没有参数,可以省略括号
一般来讲,上下两种方法等价

Android图片加速工具

implementation ('androidx.core:core-ktx:1.9.0')

在我阅读到的项目发现了一个很神奇的配置,我以为是什么新奇的东西,后面自己去研究了一下,这个是专门为了来解决 Android 远程拿去图片,让任何形式的图片列表的滚动尽可能变得更加平滑,更快。

中文官方文档位于 https://muyangmin.github.io/glide-docs-cn/

annotationProcessor 'com.github.bumptech.glide:compiler:4.13.2'

一些神奇的 Android 配置

签名配置

signingConfigs {  release {  storeFile rootProject.file("signingkey.jks")  storePassword System.getenv("KEY_STORE_PASSWORD")  keyAlias System.getenv("ALIAS")  keyPassword System.getenv("KEY_PASSWORD")  }  
}

配置应用程序的签名信息,应用与 release 版本的应用程序需要配置签名
storeFile rootProject.file("signingkey.jks") 这个是指定签名密钥存储文件的路径,这个指的是根目录下的 signingkey.jks 文件,这个文件通常包含应用程序签名所需的密钥和证书。

storePassword System.getenv("KEY_STORE_PASSWORD"): 这里使用了环境变量中存储的密钥库密码。密钥库密码用于访问存储在密钥库中的密钥和证书。

keyAlias System.getenv("ALIAS"): 这一行使用环境变量中存储的密钥别名。密钥别名是密钥库中标识特定密钥的名称。

keyPassword System.getenv("KEY_PASSWORD"): 这里使用了环境变量中存储的密钥密码。密钥密码用于访问特定密钥。

Lint 静态代码分析

android {  lint {  baseline = file("lint-baseline.xml")  }  
}  lintOptions {  checkReleaseBuilds false  abortOnError false  
}

这个代码块指定了 Lint 工具的配置,具体来说:

  • baseline = file("lint-baseline.xml"): 这一行设置了 Lint 的基准文件,用于记录已知的问题,以免在每次运行 Lint 时都报告这些已知问题。这通常是一个 XML 文件,其中包含以前的 Lint 分析结果。

  • checkReleaseBuilds false: 这一行禁用了在 release 构建中运行 Lint 检查。通常,在 release 构建时可能会关闭某些 Lint 检查,以便在发布应用程序之前不受到这些检查的干扰。

  • abortOnError false: 这一行禁用了在发现 Lint 错误时终止构建过程。如果设置为 true,Lint 错误将导致构建过中止,而设置为 false 将允许构建过程继续进行,即使有 Lint 错误存在。

Android资源路径重定义

sourceSets {  main {  res.srcDirs =  [  'src/main/res/layout/page',  'src/main/res/layout/item',  'src/main/res/layout',  'src/main/res'  ]  }  
}

这个定义的好处

  • sourceSets: 这是 Gradle 配置块,用于定义项目的源集。

  • main: 这是默认的主要源集,其中包含主要的源代码和资源文件。

  • res.srcDirs: 这一行指定了 res 目录的路径。在 Android 项目中,res 目录通常包含了资源文件,如布局文件、图像和其他与用户界面相关的资源。在这里,指定了一组目录的路径,这些目录将被视为 res 目录,其中包括了页面布局 (src/main/res/layout/page)、条目布局 (src/main/res/layout/item)、一般布局 (src/main/res/layout) 和通常的 res 目录 (src/main/res)。

通过这样的配置,可以将不同类型的资源文件组织到不同的子目录中,以便更好地管理项目的结构。这在大型项目中很有用,因为它允许你将相关的资源文件放在一起,提高了项目的可维护性。

##Kotlin返回非空字符串

fun releaseTime(): String? { // 函数体 }
  • fun: 这个关键字表示你正在定义一个函数。
  • releaseTime(): 这是函数的名称,即 “releaseTime”。
  • (): String?: 这部分表示函数没有参数(空括号),并且返回一个可空的 String 类型。String? 表示这个函数可以返回一个字符串,也可以返回 null。
  • 如果变成这个模样就是 fun releaseTime(): String { // 函数体 } 就表明返回的是一个 非空的字符串。
fun doSomething() {// 函数体
}

这个是没有返回值的函数,类似于 voidKotlin 中可以省略 : Unit 部分,在默认情况下函数没有明确返回类型的时候,它被认为是返回 Unit.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1027222.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

贪心算法--最大数

个人主页:Lei宝啊 愿所有美好如期而遇 本题链接https://leetcode.cn/problems/largest-number/description/ class Solution { public:bool static compare(int a, int b){return (to_string(a) to_string(b)) > (to_string(b) to_string(a));}bool operato…

MySQL创建表:练习题

练习题: 创建一个名为"students"的数据库,并切换到该数据库。 在"students"数据库中创建一个名为"grades"的表,包含以下字段: id: 整数类型 name: 字符串类型,学生姓名 subject: 字符串…

最小可行产品需要最小可行架构——可持续架构(三)

前言 最小可行产品(MVP)的概念可以帮助团队专注于尽快交付他们认为对客户最有价值的东西,以便在投入大量时间和资源之前迅速、廉价地评估产品的市场规模。MVP不仅需要考虑产品的市场可行性,还需要考虑其技术可行性,以…

计算机专业学习单片机有什么意义吗?

玩单片机跟玩计算机区别还是很大的, 单片机有众多的种类,每一种又可能有很多个系列.可以说单片机就是为了专款专用而生的.这样来达到产品成本的降低,这就是现在身边的很多的电子产品价格一降再降的原因之一.在开始前我有一些资料,是我根据网友给的问题精心整理了一…

安装paddle detection心得

一、安装PaddlePaddle conda create -n mypaddle python3.8 conda activate mypaddle python -m pip install paddlepaddle-gpu2.6.0 -i https://mirror.baidu.com/pypi/simple 请确保您的PaddlePaddle安装成功并且版本不低于需求版本。使用以下命令进行验证。 这是CUDA1…

SpringBoot项目启动成功,但是调用接口直接报NOT FOUND 404

问题描述 SpringBoot项目启动成功,但是调用接口直接报NOT FOUND 404 解决办法 启动类中ComponentScan(basePackages {“com.afclab”})中的扫包路径和项目路径不一样,导致扫不到Controller等组件,修改成和项目路径一样就可以解决&#xf…

8、鸿蒙学习-HAR

HAR(Harmony Archive)是静态共享包,可以包含代码、C库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP,不能独立安装运行在设备上。只能作为应用模块的依赖项被引用。 一、创建…

206基于matlab的无人机航迹规划(UAV track plannin)

基于matlab的无人机航迹规划(UAV track plannin)。输入输出参数包括 横滚、俯仰、航向角(单位:度);横滚速率、俯仰速率、航向角速率(单位:度/秒);飞机运动速度——X右翼、…

小美的平衡矩阵(前缀和例题)

2024美团秋招,被这一题给难住了 美团校招笔试真题_Java工程师、C工程师_牛客网 题目: 解答: 这道题的关键点就是要计算出以某一点为矩阵右下角时,1的个数 我一开始是想着遍历,以某一点为起点(矩阵左上角&a…

Github万星项目lobe-chat,连接GPT4GPTs,平替chatgpt-plus

简介 Lobe Chat - 一个开源、高性能的聊天机器人框架,支持语音合成、多模态和可扩展的函数调用插件系统。支持一键免费部署您的私人 ChatGPT/LLM Web 应用程序。 项目地址: GitHub - lobehub/lobe-chat: 🤯 Lobe Chat - an open-source, mo…

稀碎从零算法笔记Day32-LeetCode:每日温度

算是引出“单调栈”这种数据结构,后面会用这个思想处理下接雨水问题 前言:单调栈模式匹配——题目中提到“求第一个最大/最小的元素” 题型:栈、单调栈、数组 链接:739. 每日温度 - 力扣(LeetCode) 来源…

Eclipse+Java+Swing实现斗地主游戏

一. 视频演示效果 java斗地主源码演示 ​ 二.项目结构 代码十分简洁,只有简单的7个类,实现了人机对战 素材为若干的gif图片 三.项目实现 启动类为Main类,继承之JFrame,JFrame 是 Java Swing 库中的一个类,用于创建窗…

深度学习500问——Chapter05: 卷积神经网络(CNN)(1)

文章目录 5.1 卷积神经网络的组成层 5.1.1 输入层 5.1.2 卷积层 5.1.3 激活层 5.1.4 池化层 5.1.5 全连接层 5.2 卷积在图像中有什么直观作用 5.3 卷积层有哪些基本参数 5.4 卷积核有什么类型 5.5 二维卷积与三维卷积有什么区别 卷积神经网络是一种用来处理局部和整体相关性的计…

Unity图集编辑器

图集编辑器 欢迎使用图集编辑器新的改变编辑器图片 欢迎使用图集编辑器 Unity图集操作很是费劲 无法批量删除和添加图集中的图片 新的改变 自己写了一个图集编辑器 客: 支持批量删除 左键点击图片代表选中 右键点击图标定位到资产支持批量添加 选中图片拖拽到编…

基于Spring boot + Vue协同过滤算法的电影推荐系统

末尾获取源码作者介绍:大家好,我是墨韵,本人4年开发经验,专注定制项目开发 更多项目:CSDN主页YAML墨韵 学如逆水行舟,不进则退。学习如赶路,不能慢一步。 目录 一、项目简介 二、开发技术与环…

iOS开发进阶(十一):ViewController 控制器详解

文章目录 一、前言二、UIViewController三、UINavigationController四、UITabBarController五、UIPageViewController六、拓展阅读 一、前言 iOS 界面开发最重要的首属ViewController和View,ViewController是View的控制器,也就是一般的页面,…

蛋糕店怎么弄一个微信小程序_开启蛋糕店新篇章

微信小程序,开启蛋糕店新篇章——甜蜜触手可及 在这个数字化、智能化的时代,微信小程序以其便捷、高效的特点,成为了众多商家与消费者之间的桥梁。对于蛋糕店而言,拥有一个专属的微信小程序,不仅可以提升品牌形象&…

HTTP状态 405 - 方法不允许

方法有问题。 用Post发的请求&#xff0c;然后用Put接收的。 大家也可以看看是不是有这种问题 <body><h1>HTTP状态 405 - 方法不允许</h1><hr class"line" /><p><b>类型</b> 状态报告</p><p><b>消息…

Gitlab CI---could not read username for xxx: no such device or address

0 Preface/Foreword 项目开发中&#xff0c;经常会使用第三方的算法或者功能&#xff0c;那么就需要把对应的repo以子模块的方式添加到当前repo中。 添加命令&#xff1a; git submodule add <URL> 1 问题表现 子模块添加成功&#xff0c;但是GitLab CI阶段&#xff…

2024最新版克魔助手抓包教程(9) - 克魔助手 IOS 数据抓包

引言 在移动应用程序的开发中&#xff0c;了解应用程序的网络通信是至关重要的。数据抓包是一种很好的方法&#xff0c;可以让我们分析应用程序的网络请求和响应&#xff0c;了解应用程序的网络操作情况。克魔助手是一款非常强大的抓包工具&#xff0c;可以帮助我们在 Android …