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


title: Android 开发学习第二天

search: 2024-03-10

tags:

  • "#Android开发"

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

Kotlin引入依赖格式

文章目录

Kotlin 复制代码
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 的引用依赖标准格式如下

Kotlin 复制代码
implementation("XXXXXXXXXXXXXXXXXXXXXXX")

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

Kotlin 复制代码
implementation(platform("androidx.compose:compose-bom:2023.08.00"))

Android批量导入Jar

groovy 复制代码
implementation fileTree(dir: 'libs', include: ['*.jar'])

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

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

groovy 复制代码
implementation 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

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

但是和括号是可选的,如果方法没有参数,可以省略括号

一般来讲,上下两种方法等价

Android图片加速工具

groovy 复制代码
implementation ('androidx.core:core-ktx:1.9.0')

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

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

groovy 复制代码
annotationProcessor 'com.github.bumptech.glide:compiler:4.13.2'

一些神奇的 Android 配置

签名配置

groovy 复制代码
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 静态代码分析

groovy 复制代码
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资源路径重定义

groovy 复制代码
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返回非空字符串

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

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

相关推荐
上海_彭彭19 分钟前
【提效工具开发】Python功能模块执行和 SQL 执行 需求整理
开发语言·python·sql·测试工具·element
3345543228 分钟前
element动态表头合并表格
开发语言·javascript·ecmascript
沈询-阿里32 分钟前
java-智能识别车牌号_基于spring ai和开源国产大模型_qwen vl
java·开发语言
AaVictory.38 分钟前
Android 开发 Java中 list实现 按照时间格式 yyyy-MM-dd HH:mm 顺序
android·java·list
残月只会敲键盘1 小时前
面相小白的php反序列化漏洞原理剖析
开发语言·php
ac-er88881 小时前
PHP弱类型安全问题
开发语言·安全·php
ac-er88881 小时前
PHP网络爬虫常见的反爬策略
开发语言·爬虫·php
爱吃喵的鲤鱼1 小时前
linux进程的状态之环境变量
linux·运维·服务器·开发语言·c++
DARLING Zero two♡1 小时前
关于我、重生到500年前凭借C语言改变世界科技vlog.16——万字详解指针概念及技巧
c语言·开发语言·科技
Gu Gu Study1 小时前
【用Java学习数据结构系列】泛型上界与通配符上界
java·开发语言