Jetpack 实战Kotlin(三)sunflower 分析Kotlin版本注入

Jetpack 实战目录:

Jetpack 实战Java(一)写Java版的sunflower 分析Java版本

Jetpack 实战Java(二)写Java版的sunflower 分析Java版本

Hilt入门思想,DI框架撇一眼

回顾Java 版本

Navigation & Navigation UI
Nagvigation 三要素:
① Navigation Graph
② Navigation Controller
③ Navigation HostFragment
项目整体结构:
DataBinding+DrawLayout+NavHostFragment+NavigationView

Kotlin Sunflower 结构

项目整体结构:
DataBinding+NavHostFragment+NavigationView
Navigation Graph的布局文件,大体相似
navigation->fragment 并列通过Navigation Controller 通过NavHostFragment展示(包含 action argument等)
nav_garden.xml



    

        
    

    

        
        
    

    
        
    


2021-04-05 11.26.56.png

首页的HomeViewPagerFragment 维护ViewPager2 包含两个界面
① GardenFragment->fragment_graden.xml
② PlantListFragment-> fragment_plant_list.xml
业务逻辑简单:GardenFragment 花园,在PlantListFragment植物列表选取一个植物,添加到个人的花园,两个页面都是列表的形态展示。右上角有排序小功能

GardenFragment PlantListFragment
2021-04-05 11.40.09.png
截屏2021-04-05 11.40.22.png

两个版本UI稍微不同,核心用到的知识点,和逻辑是一样的。
都是两个列表,在一个总的列表选择自己喜欢的植物,加入到个人的花园列表,和很多应用逻辑,变换一下思路,是一样的。
点击列表页都是进入详情。相应的有一些数据和展示。

技术点

还是遵循这个架构图


2021-01-28 21.38.17.png

由简单到深入:老规矩分两篇,第一篇整体理解,第二篇深入知识点分析。
① Navigation 技术,Java 两篇技术已经基本阐述清楚
② ktx 协程处理相关,下一篇整理分析
③ ViewPager2 使用
④ gson配合解析数据
⑤ 基本使用viewmodel,livedata等基础套件
⑥ jetpack paging 分页库
⑦ jetpack room 存储库,CoroutineWorker 配合
⑧ 单元测试espresso ,junit
⑨ jetpack DI 框架Hilt + Dagger2
这个官网练手项目,对整个架构,用比较老的一句话形容“麻雀虽小,五脏俱全”下篇,继续分享。

从gradle几个关键配置,回顾jetpack的使用配置

关于lib库,和常用配置,就不多说了,我们看几个关键特殊相关的配置。

hilt 依赖注入插件配置

app:gradle

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'dagger.hilt.android.plugin'
apply plugin: 'androidx.navigation.safeargs.kotlin'

android {
...
    defaultConfig {
       ...
        testInstrumentationRunner "com.google.samples.apps.sunflower.utilities.MainTestRunner"
        ...
        vectorDrawables.useSupportLibrary true

        // Consult the README on instructions for setting up Unsplash API key
        buildConfigField("String", "UNSPLASH_ACCESS_KEY", "\"" + getUnsplashAccess() + "\"")
        javaCompileOptions {
            annotationProcessorOptions {
                arguments["dagger.hilt.disableModulesHaveInstallInCheck"] = "true"
            }
        }
    }
    buildTypes {
        release {
            ...
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        // work-runtime-ktx 2.1.0 and above now requires Java 8
        jvmTarget = "1.8"

        // Enable Coroutines and Flow APIs
        freeCompilerArgs += "-Xopt-in=kotlinx.coroutines.ExperimentalCoroutinesApi"
        freeCompilerArgs += "-Xopt-in=kotlinx.coroutines.FlowPreview"
    }
}

① hilt 的配置和Navigation传递参数的插件配置:
注意gradle中插件声明中,最后两行,一个是hilt的plugin,还有一个和Navigation 传值的插件。整体顺序前三行,注意不要改变。
这还不够。
在project:gradle,还需要配置hilt的依赖和对应Navigationsafe-args的插件配置(最后两行)

dependencies {
        classpath "com.android.tools.build:gradle:$gradleVersion"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigationVersion"
        classpath "com.google.dagger:hilt-android-gradle-plugin:$hiltVersion"
    }

② 由于项目用到unsplash 的api,所以需要到上面获取api key ,如何获取,搜索引擎自己查找。
在gradle.properties 配置key
buildConfigField-----getUnsplashAccess 方法中动态获取

③ annotationProcessorOptions 配置apt kotlin check 开关
支持kt 协程的Flow api

你可能感兴趣的:(Jetpack 实战Kotlin(三)sunflower 分析Kotlin版本注入)