# MVVMFrame
![Image](app/src/main/ic_launcher-web.png)
[![Download](https://img.shields.io/badge/download-App-blue.svg)](https://raw.githubusercontent.com/jenly1314/MVVMFrame/master/app/release/app-release.apk)
[![MavenCentral](https://img.shields.io/maven-central/v/com.github.jenly1314/mvvmframe)](https://repo1.maven.org/maven2/com/github/jenly1314/mvvmframe)
[![JCenter](https://img.shields.io/badge/JCenter-2.0.0-46C018.svg)](https://bintray.com/beta/#/jenly/maven/mvvmframe)
[![JitPack](https://jitpack.io/v/jenly1314/MVVMFrame.svg)](https://jitpack.io/#jenly1314/MVVMFrame)
[![CircleCI](https://circleci.com/gh/jenly1314/MVVMFrame.svg?style=svg)](https://circleci.com/gh/jenly1314/MVVMFrame)
[![API](https://img.shields.io/badge/API-21%2B-blue.svg?style=flat)](https://android-arsenal.com/api?level=21)
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/mit-license.php)
MVVMFrame for Android 是一个基于Google官方推出的Architecture Components dependencies(现在叫JetPack)构建的快速开发框架。有了 **MVVMFrame** 的加持,从此构建一个 **MVVM** 模式的项目变得快捷简单。
## 架构
![Image](image/mvvm_architecture.jpg)
## 引入
### Gradle:
1. 在Project的 **build.gradle** 或 **setting.gradle** 中添加远程仓库
```gradle
repositories {
//...
mavenCentral()
maven { url 'https://jitpack.io' }
}
```
2. 在Module的 **build.gradle** 里面添加引入依赖项
```gradle
// AndroidX
implementation 'com.github.jenly1314:mvvmframe:3.0.0'
```
### **Hilt** 和 **Room** 的相关注解处理器
因为 [mvvmframe](mvvmframe) 内部依赖了 **Hilt** 和 **Room**,所以你需要引入下面列出的编译时的注解处理器,用于自动生成相关代码。
> 以下配置为当前最新版本的,其它对应版本可查看版本说明,或对应的版本发布 [Versions](https://github.com/jenly1314/MVVMFrame/releases)
> 如果你使用 **v2.x** 版本的话,请直接 [查看2.x分支版本](https://github.com/jenly1314/MVVMFrame/tree/2.x)
你需要在项目根目录的 **build.gradle** 文件中配置 **Hilt** 的插件:
```gradle
plugins {
//...
id 'com.google.dagger.hilt.android' version '2.51' apply false
}
```
接下来,在 **app/build.gradle** 文件中,引入 **Hilt** 的插件和相关依赖:
```gradle
plugins {
//...
id 'kotlin-kapt'
id 'com.google.dagger.hilt.android'
}
dependencies{
//...
// hilt
implementation "com.google.dagger:hilt-android:2.51"
kapt "com.google.dagger:hilt-compiler:2.51"
// room
kapt "androidx.room:room-compiler:2.6.1"
}
```
> `kapt`适用于kotlin项目,如果你的项目使用的java,请使用`annotationProcessor` 替代 `kapt`
## 使用
### 版本特别说明
* 3.x版本统一改为使用`kotlin`并进行了重构;之前2.x版本内部使用的`LiveData`相关代码已全部移除,3.x版本已全部改用kotlin独有的`Flow`进行实现。
* 3.x相比较于2.x版本更为精简,可定制性更高。(如果需要在`Compose`中进行使用,只需加上`Compose`的UI相关依赖,稍微封装下即可)
> 建议在新项目中使用;如果你之前使用的是2.x旧版本,请谨慎升级。
> 如果你使用 **v2.x** 版本的话,请直接 [查看2.x分支版本](https://github.com/jenly1314/MVVMFrame/tree/2.x)
---
> 从分割线此处开始,以下全部为3.x版本相关说明
### 集成步骤代码示例 (完整示例,可直接查看[app](app))
**Step.1** 启用ViewDataBinding,在你项目中的build.gradle的android{}中添加配置:
```gradle
buildFeatures{
dataBinding = true
}
```
**Step.2** 使用JDK17编译,在你项目中的build.gradle的android{}中添加配置:
```gradle
compileOptions {
targetCompatibility JavaVersion.VERSION_17
sourceCompatibility JavaVersion.VERSION_17
}
```
**Step.3** 自定义全局配置(继承MVVMFrame中的FrameConfigModule)(提示:如果你没有自定义配置的需求,可以直接忽略此步骤)
```kotlin
/**
* 全局配置
*/
class AppConfigModule : FrameConfigModule() {
override fun applyOptions(context: Context, builder: ConfigModule.Builder) {
// 通过第一种方式初始化BaseUrl
builder.baseUrl(Constants.BASE_URL) // TODO 配置Retrofit中的baseUrl
builder.retrofitOptions(object : RetrofitOptions {
override fun applyOptions(builder: Retrofit.Builder) {
// TODO 配置Retrofit
}
})
.okHttpClientOptions(object : OkHttpClientOptions {
override fun applyOptions(builder: OkHttpClient.Builder) {
// TODO 配置OkHttpClient
}
})
.gsonOptions(object : GsonOptions {
override fun applyOptions(builder: GsonBuilder) {
// TODO 配置Gson
}
})
.roomDatabaseOptions(object : RoomDatabaseOptions {
override fun applyOptions(builder: RoomDatabase.Builder<out RoomDatabase>) {
// TODO 配置RoomDatabase
}
})
.configOptions(object : AppliesOptions.ConfigOptions {
override fun applyOptions(builder: Config.Builder) {
// TODO 配置Config
builder.httpLoggingLevel(HttpLoggingInterceptor.Level.BODY)
}
})
}
}
```
然后在你项目中的AndroidManifest.xml中通过配置meta-data来自定义全局配置(提示:如果你没有自定义配置的需求,可以直接忽略此步骤)
```xml
<!-- MVVMFrame 全局配置 -->
<meta-data android:name="com.king.mvvmframe.config.AppConfigModule"
android:value="FrameConfigModule"/>
```
> 此处的`com.king.mvvmframe.config.AppConfigModule` 替换为你自定义的全局配置类
**Step.4** 配置Application
```kotlin
@HiltAndroidApp
class YourApplication : BaseApplication() {
//...
override fun onCreate() {
super.onCreate()
// 如果你没有使用FrameConfigModule中的第一中方式初始化BaseUrl,也可以通过第二种方式来设置BaseUrl(二选其一即可)
// RetrofitHelper.getInstance().setBaseUrl(baseUrl)
}
}
```
> 如果由于某种原因,导致你不能继承`BaseApplication`;你也可以在你自定义的`Application`的`onCreate`函
数中通过调用`BaseApplication.initAppConfig`来进行初始化。
### 其他
### 关于使用 **Hilt**
**Hilt** 是JetPack中新增的一个依赖注入库,其基于 **Dagger2** 研发(后面统称为Dagger),但它不同于Dagger。对于Android开发者来说,Hilt可以说专门为Android 打造。
之前使用的 **Dagger for Android** 虽然也是针对于Android打造,也能通过 **@ContributesAndroidInjector** 来通过生成简化一部分样板代码,但是感觉还不够彻底。因为 **Component** 层相关的桥接还是要自己写。**Hilt** 的诞生改善了这些问题。
**Hilt** 大幅简化了 **Dagger** 的用法,使得我们不用通过 **@Component** 注解去编写桥接层的逻辑,但是也因此限定了注入功能只能从几个 **Android** 固定的入口点开始。
#### **Hilt** 目前支持以下 **Android** 类:
* Application(通过使用 @HiltAndroidApp)
* ViewModel(通过使用 @HiltViewModel)
* Activity
* Fragment
* View
* Service
* BroadcastReceiver
**Application** 示例 (这里我们使用BaseApplication)
```kotlin
@HiltAndroidApp
class YourApplication : BaseApplication() {
//...
}
```
**ViewModel** 示例 (这里我们使用BaseViewModel)
```kotlin
@HiltViewModel
class YourViewModel : BaseViewModel() {
//...
}
```
其他的入口点,都是用 **@AndroidEntryPoint** 注解来声明,示例如下
**Activity** 示例 (这里我们使用BaseActivity)
```kotlin
@AndroidEntryPoin
没有合适的资源?快使用搜索试试~ 我知道了~
MVVMFrame-master.zip
共130个文件
kt:46个
xml:34个
png:18个
需积分: 5 0 下载量 76 浏览量
2024-08-28
19:44:52
上传
评论
收藏 5.21MB ZIP 举报
温馨提示
MVVMFrame for Android 是一个基于Google官方推出的JetPack构建的快速开发框架。从此构建一个MVVM模式的项目变得快捷简单。
资源推荐
资源详情
资源评论
收起资源包目录
MVVMFrame-master.zip (130个子文件)
app-release.apk 5.79MB
gradlew.bat 2KB
.editorconfig 205B
.gitignore 87B
.gitignore 7B
.gitignore 7B
versions.gradle 4KB
build.gradle 2KB
build.gradle 2KB
build.gradle 538B
settings.gradle 390B
gradlew 5KB
gradle-wrapper.jar 53KB
DictionaryInfo.java 7KB
mvvm_architecture.jpg 65KB
output-metadata.json 375B
BaseFragment.kt 10KB
BaseActivity.kt 9KB
BaseDialogFragment.kt 7KB
DictionaryActivity.kt 5KB
ConfigModule.kt 4KB
AppConfigModule.kt 4KB
DataRepository.kt 4KB
Config.kt 3KB
HttpModule.kt 3KB
ManifestParser.kt 3KB
MainActivity.kt 2KB
OilPriceActivity.kt 2KB
App.kt 2KB
CityActivity.kt 2KB
DictionaryViewModel.kt 2KB
BaseViewModel.kt 2KB
BaseViewModel.kt 2KB
ContentActivity.kt 2KB
AppliesOptions.kt 1KB
Repository.kt 1KB
BaseAndroidViewModel.kt 1KB
ApiService.kt 1KB
OilPriceViewModel.kt 1KB
JumpDebounce.kt 1KB
CityViewModel.kt 1KB
BindingAdapter.kt 1KB
IView.kt 1KB
BaseApplication.kt 1KB
SearchHistoryAdapter.kt 974B
SearchHistoryDao.kt 973B
Ext.kt 718B
RandomUtil.kt 696B
ExampleInstrumentedTest.kt 670B
Constants.kt 665B
ExampleInstrumentedTest.kt 663B
OilPrice.kt 623B
RepositoryModule.kt 581B
BaseProgressDialog.kt 579B
AppDatabase.kt 559B
BindingHolder.kt 501B
SearchHistory.kt 463B
Result.kt 455B
FrameConfigModule.kt 416B
ExampleUnitTest.kt 353B
ExampleUnitTest.kt 352B
City.kt 235B
LICENSE 1KB
README.md 15KB
CHANGELOG.md 2KB
ic_launcher-web.png 40KB
ic_launcher_foreground.png 21KB
ic_launcher_round.png 17KB
ic_launcher_foreground.png 14KB
ic_launcher_round.png 11KB
ic_launcher.png 9KB
ic_launcher_foreground.png 8KB
ic_launcher_round.png 7KB
ic_launcher.png 6KB
ic_launcher_foreground.png 5KB
ic_launcher_round.png 4KB
ic_launcher.png 4KB
ic_launcher_foreground.png 3KB
ic_launcher_round.png 3KB
ic_launcher.png 3KB
ic_launcher.png 2KB
btn_delete_normal.png 1KB
btn_delete_pressed.png 1KB
proguard-rules.pro 13KB
proguard-rules.pro 751B
gradle.properties 2KB
gradle-wrapper.properties 230B
gradle.properties 62B
build_docs.sh 760B
rv_oil_price_item.xml 7KB
ic_launcher_background.xml 5KB
dictionary_activity.xml 3KB
main_activity.xml 2KB
ic_launcher_foreground.xml 2KB
styles.xml 2KB
AndroidManifest.xml 2KB
strings.xml 1KB
oil_price_activity.xml 742B
city_activity.xml 742B
styles.xml 645B
共 130 条
- 1
- 2
资源评论
纬领网络
- 粉丝: 196
- 资源: 612
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功