使用 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.

相关推荐
CYRUS_STUDIO12 小时前
利用 Linux 信号机制(SIGTRAP)实现 Android 下的反调试
android·安全·逆向
CYRUS_STUDIO13 小时前
Android 反调试攻防实战:多重检测手段解析与内核级绕过方案
android·操作系统·逆向
黄林晴17 小时前
如何判断手机是否是纯血鸿蒙系统
android
火柴就是我17 小时前
flutter 之真手势冲突处理
android·flutter
法的空间17 小时前
Flutter JsonToDart 支持 JsonSchema
android·flutter·ios
循环不息优化不止17 小时前
深入解析安卓 Handle 机制
android
恋猫de小郭17 小时前
Android 将强制应用使用主题图标,你怎么看?
android·前端·flutter
jctech18 小时前
这才是2025年的插件化!ComboLite 2.0:为Compose开发者带来极致“爽”感
android·开源
用户20187928316718 小时前
为何Handler的postDelayed不适合精准定时任务?
android
侃侃_天下18 小时前
最终的信号类
开发语言·c++·算法