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

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

作者: 支离破碎_SuperLee | 来源:发表于2023-08-23 16:16 被阅读0次

    本系列旨在帮助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文件,将项目中所有引入的库都放在该文件下,避免各个模块引入的库版本不一致。

    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

    插入代码

    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中引入

    dependencies {
        implementation rootProject.ext.deps.androidCoreKtx
        implementation rootProject.ext.deps.androidAppCompat
        implementation rootProject.ext.deps.androidDesignLibrary
    }
    

    本篇至此就结束了,至于gradle的更高级配置会在后续逐步说明。
    项目地址
    项目持续更新,每个步骤请查询tag

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/cmmpmdtx.html