前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手把手教你搭建android模块化项目框架(一)选择篇

手把手教你搭建android模块化项目框架(一)选择篇

原创
作者头像
支离破碎_superLee
发布2023-09-01 13:58:03
4370
发布2023-09-01 13:58:03
举报

本系列旨在帮助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入口处,这样就可以在其他模块引用了。文件如下图

新建 BMP 图像.png
新建 BMP 图像.png

插入代码

代码语言: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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 经典框架选取
相关产品与服务
事件总线
腾讯云事件总线(EventBridge)是一款安全,稳定,高效的云上事件连接器,作为流数据和事件的自动收集、处理、分发管道,通过可视化的配置,实现事件源(例如:Kafka,审计,数据库等)和目标对象(例如:CLS,SCF等)的快速连接,当前 EventBridge 已接入 100+ 云上服务,助力分布式事件驱动架构的快速构建。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com