AndroidX组件化搭建MVP、MVVM以及混合使用kotlin模块

AndroidX组件化搭建MVP、MVVM以及混合使用kotlin模块

环境各版本:
android studio 3.5.1
android gradle plugin version 3.5.1
gradle version 5.4.1
ViewModel 2.1.0
LiveData 2.1.0
编译环境 jkd1.8
kotlin 1.3.5

本文只记录在搭建过程中走过的一些弯路,共大家参考,希望对大家有所帮助。

可参考本文组件化demo

在这里插入图片描述

1 module.build.gradle 公共配置:由于和kotlin模块混用,所以移除了部分java模块的公共配置,放在各自的module中。

//切换集成和module
if (isRunModule.toBoolean()) {
    apply plugin: 'com.android.application'
} else {
    apply plugin: 'com.android.library'
}


android {
    compileSdkVersion rootProject.ext.androidVersion.compileSdkVersion
    buildToolsVersion rootProject.ext.androidVersion.buildToolsVersion
    defaultConfig {
        minSdkVersion rootProject.ext.androidVersion.minSdkVersion
        targetSdkVersion rootProject.ext.androidVersion.targetSdkVersion
        versionCode rootProject.ext.androidVersion.versionCode
        versionName rootProject.ext.androidVersion.versionName
        multiDexEnabled rootProject.ext.androidVersion.multiDexEnabled

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

    }

    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
            //AndroidManifest路径
            if (isRunModule.toBoolean()) {
                manifest.srcFile 'src/main/module/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/main/AndroidManifest.xml'
                java {
                    exclude 'debug/**'
                }
            }
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    //以下配置  每个lib or module 都要加
    //=========================================================
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    //开启DataBinding
    dataBinding {
        enabled isEnableDatabingding.toBoolean()
    }
    //=========================================================
}

2 java 和kotlin module配置的区别

java module配置

apply from: "../module.build.gradle"
apply plugin: 'com.jakewharton.butterknife'
android {
    defaultConfig {
        if (isRunModule.toBoolean()) {
            applicationId "com.lyldding.moduleMain"
        }
        //区别
        //每个使用arouter的业务组件都要加
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [AROUTER_MODULE_NAME: project.getName()]
            }
        }
    }

    resourcePrefix "main_"
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    api project(':commonLib')

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
    //区别
    //每个使用arouter的业务组件都要加
    annotationProcessor rootProject.ext.dependencies["arouter-compiler"]
    implementation(rootProject.ext.dependencies["butterknife"]) {
        exclude group: 'com.android.support'
    }
    annotationProcessor rootProject.ext.dependencies["butterknife-compiler"]
}

kotlin module配置

apply from: "../module.build.gradle"
//区别
//每个使用arouter的业务组件都要加
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'
//区别
//每个使用arouter的业务组件都要加
kapt {
    arguments {
        arg("AROUTER_MODULE_NAME", project.getName())
    }
}
android {
    defaultConfig {
        if (isRunModule.toBoolean()) {
            applicationId "com.lyldding.modulekotlin"
        }
    }
    resourcePrefix "kotlin_"

}



dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    api project(':commonLib')

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'

    implementation rootProject.ext.kotlin["kotlin-stdlib-jdk"]

    //区别
    //每个使用arouter的业务组件都要加
    kapt rootProject.ext.dependencies["arouter-compiler"]
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一位练习时长两年半的安卓练习生根据鸿神提供的WanAndroid开放Api来制作的产品级App,基本实现了所有的功能,采用Kotlin语言,基于Material Design AndroidX MVP RxJava Retrofit等优秀的开源框架开发,注释超详细,方便大家练手如果你觉得做的还可以对你有帮助,容我卑微地向你要个star,有任何问题或建议,欢迎提交issues前言前段时间学习了 Kotlin ,就打算写一个项目来练练手刷刷熟练度,因为经常逛鸿神的WanAndroid网站,觉得很不错,Api也很丰富健全, 虽然根据WanAndroidAPi开发出的app多如牛毛,有诸多优秀的app,但是每个人的喜好与审美不一样,所以都没有做到我心目中的最完美,于是我就想做一个自己觉得最满意的app。界面的话参考了很多的app风格,根据自己的搭配实现,感觉还不错吧实现的功能首页五大模块:首页 / 项目 / 体系/ 公众号 / 我的登录注册功能导航功能搜索功能 热门搜索推荐 搜索历史记录积分功能 积分排行 积分获取记录收藏功能 收藏文章 收藏网址待办清单 添加清单 编辑清单 删除清单文章网址详情 详情中收藏 分享 浏览器打开全局修改应用主题色全局修改列表的加载动画侧滑返回 可打开与关闭文章在任何地方收藏与取消,其他界面相对应的数据也会变布局优,大量使用ConstraintLayout集成Bugly收集bug并实现App更新APP下载GitHub下载fir.im下载扫码应用截图    主要开源框架一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的框架-RxJava2一个依赖注入框架-Dagger2处理网络请求的框架-Okhttp一个基于OKHttp封装的网络加载框架-Retrofit转换json数据的官方框架-GsonAndroid的事件发布-Eventbus项目核心库MVP框架-MVPArms屏幕适配AndroidAutoSize一个美丽的、流体和可扩展的对话框-Material-dialogs一个强大的Fragment管理库-Fragmentation一个增强BottomNavigationView的安卓库-BottomNavigationViewEx强大、可定制、易扩展的 ViewPager 指示器框架-MagicIndicator一个强大的轮播库-BGABanner-Android一个强大并且灵活的RecyclerViewAdapter-BaseRecyclerViewAdapterHelperRecyclerView侧滑菜单,Item拖拽,滑动删除Item,自动加载更多,HeaderView,FooterView,Item分组黏贴-SwipeRecyclerView揭示效果布局-RevealLayout优雅地处理加载中,重试,无数据-Loadsir基于Android WebView的一个强大的库-AgentwebAndroid流式布局-FlowLayout基于mmap内存映射的移动端通用 key-value 组件-MMKV侧滑返回-SmartSwipe全局捕捉异常防止崩溃-CustomActivityOnCrash素材来源阿里巴巴矢量图标库借鉴了花瓣的登录页goweii项目中的App图标特别感谢感谢鸿神的WanAndroid网站提供的开放API,我在issues提了一些自己的需求,鸿神也耐心的帮忙添加了,谢谢

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值