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

慈云数据 1年前 (2024-04-08) 技术支持 57 0

title: Android 开发学习第二天

使用 Kotlin 和 Groovy 构建配置的一些细微差别
(图片来源网络,侵删)

search: 2024-03-10

tags:

使用 Kotlin 和 Groovy 构建配置的一些细微差别
(图片来源网络,侵删)
  • “#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 的前缀,很简单,这个就是引用了一个 BOM (Bill 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() {
                  // 函数体
              }
              

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

微信扫一扫加客服

微信扫一扫加客服