本系列旨在帮助android新人搭建属于自己的项目框架。由于篇幅较长,本人时间有限,因此更新系列可能周期较长。
本篇搭建框架适用于中大型项目。
经典框架选取
- 总模式:mvvm-databinding
- 图片加载:glide
- 事件总线:kotlin.flow或eventbus,本篇选用kotlin.flow撸出自己的事件总线
- 线程调度:kotlin.CoroutineScope
- 网络请求:retrofit kotlin.flow
- 权限请求:后续文章教大家撸出自己的权限工具
- 数据库:room
- 分页库:paging
- 下载工具:aira or okdownload
- json解析:Gson
- 图片压缩:luban
- 模块化路由:arouter or WMRouter ,本篇为了让大家更加理解模块化路由工作方式,因此会使用path简单封装一个自己的router。
- 动画等:lottie or svga or pag不过本篇不教大家如何使用该框架功能。因为单一的工具并非框架重点功能。
- 其他:core-ktx,lifecycle,androidx系列库等。
- 依赖注入:hilt(可选),依赖注入是否需要使用,取决于预估的项目规格大小,本篇抛砖引玉,会带入一点hilt的使用,不过并非重点,可酌情选取使用。
- 基础存储:mmkv(可选),由于room有一定的性能问题,所以性能优化后的部分常用键值对可以选用mmkv使用。
- bug采集:bugly 本篇不接入,正式项目可选取合适自己的采集工具。
- 埋点采集:同上。 上述基本描写了目前大多数项目使用的三方及jetpack框架,后续可能补充其他选择。如:lifecycle等,不过由于是一方库,所以不过多描述。
下面开始引入:
创建android项目这一步不多说,但是为了引入项目的一致性,我们创建deps.gradle文件,将项目中所有引入的库都放在该文件下,避免各个模块引入的库版本不一致。
代码语言:text复制rootProject.ext.compileSdkVersion = 33
rootProject.ext.targetSdkVersion = 33
rootProject.ext.minSdkVersion = 21
rootProject.ext.GLIDE_VERSION = "4.13.2"
rootProject.ext.lifecycle_version = "2.5.1"
rootProject.ext.roomVersion = '2.5.2'
rootProject.ext.deps = [
/////////////////////////// Android官方库 //////////////////////////////////////////////////
// android
androidCoreKtx : 'androidx.core:core-ktx:1.9.0',
androidAnnotations : 'androidx.annotation:annotation:1.6.0',
androidAppCompat : 'androidx.appcompat:appcompat:1.6.1',
androidFragmentKtx : 'androidx.fragment:fragment-ktx:1.5.5',
androidActivityKtx : "androidx.activity:activity-ktx:1.6.1",
androidLifecycleViewModel : "androidx.lifecycle:lifecycle-viewmodel-ktx:$rootProject.ext.lifecycle_version",
androidLifecycleRuntime : "androidx.lifecycle:lifecycle-runtime-ktx:$rootProject.ext.lifecycle_version",
// widget
androidCardView : 'androidx.cardview:cardview:1.0.0',
androidRecyclerView : 'androidx.recyclerview:recyclerview:1.2.1',
androidPercent : 'androidx.percentlayout:percentlayout:1.0.0',
androidGridLayout : 'androidx.gridlayout:gridlayout:1.0.0',
androidConstraintLayout : 'androidx.constraintlayout:constraintlayout:2.0.4',
androidPalette : 'androidx.palette:palette-ktx:1.0.0',
androidSwipe : 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0',
androidDesignLibrary : 'com.google.android.material:material:1.4.0',
androidFlexbox : "com.google.android.flexbox:flexbox:3.0.0",
// emoji2
emoji2 : "androidx.emoji2:emoji2:1.1.0",
emoji2_views : "androidx.emoji2:emoji2-views:1.1.0",
emoji2_helper : "androidx.emoji2:emoji2-views-helper:1.1.0",
/////////////////////////// 第三方开源库 ///////////////////////////////////////////////////
// di 依赖注入
dagger : "com.google.dagger:dagger:2.44.2",
daggerCompiler : "com.google.dagger:dagger-compiler:2.44.2",
// http
okhttp : "com.squareup.okhttp3:okhttp:3.12.13",
okio : "com.squareup.okio:okio:1.17.4",
okhttpLoggingInterceptor: "com.squareup.okhttp3:logging-interceptor:3.12.13",
networkConnectionClass : "com.facebook.network.connectionclass:connectionclass:1.0.1",
retrofit2AdapterRxJava : "com.squareup.retrofit2:adapter-rxjava2:2.6.4",
retrofit : "com.squareup.retrofit2:retrofit:2.6.4",
converter_gson : "com.squareup.retrofit2:converter-gson:2.6.4",
//json
gson : "com.google.code.gson:gson:2.8.0",
// glide
glide : "com.github.bumptech.glide:glide:$rootProject.ext.GLIDE_VERSION",
glideCompiler : "com.github.bumptech.glide:compiler:$rootProject.ext.GLIDE_VERSION",
// kv store
tencentMmkv : "com.tencent:mmkv-static:1.2.16",
]
由于是粘贴至其他项目的,版本可能不是最新的。
然后将该文件引入至gradle入口处,这样就可以在其他模块引用了。文件如下图
插入代码
代码语言:text复制plugins {
id 'com.android.application' version '8.1.0' apply false
id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
}
//引入该文件
apply from: "$rootDir/deps.gradle"
至此,就可以在其他模块中引入了,例如app.gradle中引入
代码语言:text复制dependencies {
implementation rootProject.ext.deps.androidCoreKtx
implementation rootProject.ext.deps.androidAppCompat
implementation rootProject.ext.deps.androidDesignLibrary
}
本篇至此就结束了,至于gradle的更高级配置会在后续逐步说明。
项目地址
项目持续更新,每个步骤请查询tag