前言
-
记录并整理EasyWallet 小钱包开发过程
-
在项目中使用到:
- Composing build + plugin 实现依赖库统一管理
- Jetpack Compose
- Hilt 依赖注入
- Kotlin/Kotlin flow/Coroutine
- Ktor 实现网络请求
- Room 实现本地存储
-
本项目地址:EasyWallet-Compose
gradle 脚本管理
- 创建新的模块作为Composing build,并在
build.gradle.kts
中加入如下代码实现plugin配置
gradlePlugin {
plugins {
create("VersionPlugin") {
id = "version-plugin" // change the name you like
implementationClass = "com.easy.version.DependencyVersionPlugin" // change package to what you done
}
}
}
-
在
src.main.kotlin
目录下Plugin实现类实现接口Plugin<Project>
,这个plugin 的apply 方法会在任何你使用这个plugin的module 执行 -
统一管理Configs。 (这里我为了区分feature模块和app模块,所以加了ignore list)
- 首先我们在每个模块都需要的plugin,写一个Project的扩展函数
private fun Project.applyPlugin() {
apply(plugin = "com.android.library")
apply(plugin = "kotlin-android")
apply(plugin = "kotlin-kapt")
apply(plugin = "kotlin-parcelize")
}
然后在apply方法中使用
target.beforeEvaluate { applyPlugin() }
这里注意要加上beforeEvaluate,在执行前apply plugin
- 配置 android 块
增加扩展方法 LibraryExtension.moduleConfig(isCore: Boolean)
(isCore这里算是我项目的特殊支持,为了实现buildConfigField的)
@Suppress("UnstableApiUsage")
private fun LibraryExtension.moduleConfig(isCore: Boolean) {
compileSdk = BuildConfig.compileSdkVersion
defaultConfig {
minSdk = BuildConfig.minSdkVersion
targetSdk = BuildConfig.targetSdkVersion
}
buildTypes {
...
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
buildFeatures.also {
it.compose = true
}
composeOptions {
kotlinCompilerExtensionVersion = Compose.version
}
...
}
- 最后在root project中增加
subprojects {
apply(plugin = "version-plugin")
}
给每个模块都应用上plugin,当然也可以单独在module上直接应用
- 以上配置完成后,你会看到模块的 gradle 脚本基本就很少了, 如下
import com.easy.version.*
dependencies {
implementation(project(":core"))
implementation(project(":core-ui"))
implementation(com.easy.version.dependencies.Other.sqlcipher)
roomDependencies()
composeUI()
hiltDependencies()
unitTestDependencies()
androidTestDependencies()
}
后记
业务功能分析