:ghost: Android快速开发框架, KtArmor 寓意着 为Android 赋予战斗装甲, 方便开发者快速进行Android 开发。
No Data
学习了Kotlin有一段时间了, 每次写项目/Demo的时候, 总是用到
网络请求、
MVP、
MVVM、
常用工具类、
通用自定义View, 索性把这些整合到一起, 搭成一个Android的脚手架——KtArmor. 框架是我个人经验的积累, 总结. 如有不妥, 望各位大佬指出.
KtArmor寓意着 为Android 赋予
战斗装甲, 方便开发者快速进行Android 开发。节约开发者开发时间。
架构模式:
MVVM+
Kotlin+
Androidx+
ViewModel+
LiveData
网络请求:
Retrofit+
Okhttp+
Coroutine+ ~~
RxJava~~ + ~~
DataBinding~~
代码:简洁优雅, 易扩展
文档: 有相关的KtArmor-MVVM 系列文档说明 (后续补充)
功能:
IActivity、
IFragment
IMvmActivity、
IMvmFragment、
BaseViewModel、
BaseRepository封装
BaseOkHttpClient、
BaseRetrofit、
RetrofitFactory
PlaceHolderView(占位布局),
LoadingView(加载框)
KtWing框架(
SharedPreferences、
StartActivity、
Log、
Toast(不重复显示))等
一般而言,使用第三方框架都需要进行相关初始化操作。如下:
class BaseApplication: Application(){override fun onCreate() { super.onCreate() // 初始化KtArmor (不再需要) // KtArmor.init(this, MyRetrofitConfig()) }
}
若无需定制
Retrofit相关配置的话,KtArmor-MVVM 会自动初始化,无需手动
init
大部分的 Android 快速开发的脚手架,都是需要继承
BaseXXXActivity、
XXXActivity等 Activity 封装的基类,但是这往往不能解决
多继承的问题,也这样大大限制了开发者自由,所以在
KtArmor-MVVM框架中,采用了
接口的形式,无需继承 BaseXXXActivity,实现对应接口(
IActivity,IMvmActivity) 即可,后面有相关Login使用教程例子参考。
class LoginActivity : AppCompatActivity(), IMvmActivity {@BindViewModel // 看这里!! lateinit var viewModel: LoginViewModel //...省略其他
}
通过
@BindViewModel注解viewModel 变量,KtArmor-MVVM 通过
反射,自动创建
LoginViewModel实例, 并赋值给 viewModel 变量。直接使用即可!
@BaseUrl(API.BASE_URL) // 看这里!! interface ApiService { @POST(API.LOGIN) suspend fun login(@Query("username") username: String, @Query("password") password: String): BaseResponse }
我们通常使用Retrofit 的时候,都会创建对应
Service接口类, 通过在 Service 上 标识 @BaseUrl 注解,并传入 对应 baseUrl,KtArmor-MVVM 就会将
baseUrl“注入” 到 Retrfit 中。目前只是针对
单个baseUrl, 后续将考虑多个 baseUrl 动态切换的相关处理。
Androidx, 所以如果不是Androidx的话, 引入会有
兼容性问题(会报错!).
19
以下默认是
Androidx项目下引入
先在 build.gradle(Project:XXXX) 的 repositories 添加:
Java allprojects { repositories { ... maven { url "https://jitpack.io" } } }然后在 build.gradle(Module:app) 的 dependencies 添加:
implementation 'com.github.hyzhan43:KtArmor-MVVM:1.0.8' //查看最新版本
我们先从一个 简单登录功能来熟悉一下
KtArmor-MVVM使用流程。
class LoginActivity : AppCompatActivity(), IMvmActivity {@BindViewModel lateinit var viewModel: LoginViewModel override fun getLayoutId(): Int = R.layout.activity_login override fun initListener() { mBtnLogin.setOnClickListener { viewModel.login(mEtAccount.str(), mEtPassword.str()) } } override fun dataObserver() { viewModel.loginData.observe(this, Observer { toast("登录成功") }) }
}
1、新建一个
LoginActivity类,并实现
IMvmActivity
“接口”。
2、然后使用
@BindViewModel绑定一个 ViewModel,KtArmor-MVVM 会自动注入赋值。
3、getLayoutId()方法,返回一个 R.layout.activity_login (布局id)
4、initListener()方法中设置 登录按钮事件 (mBtnLogin),通过
viewModel来发起网络请求。
5、然后 在dataObserver()监听回调的结果即可。
然后我们再来看看, VM 层如何实现,也就是 LoginViewModel。
class LoginViewModel : BaseViewModel() {val loginData = MutableLiveData<loginrsp>() fun login(account: String, password: String) { // 校验参数 if (TextUtils.isEmpty(account) || TextUtils.isEmpty(password)) { showToast(R.string.account_or_password_empty) return } // DSL 方式发起 网络请求 quickLaunch<loginrsp> { onStart { showLoading() } request { repository.login(account, password) } onSuccess { loginData.value = it } } }
}
BaseViewModel,并传入
LoginRepository,自动注入 LoginRepositoy 实例。
quickLaunch方法是使用
DSL方式发起网络请求
repositorylogin 方法真正发起网络请求
onSuccess()方法 监听回调结果,并设置给
LoginData
最后,我们来看看 Repository 的处理。
// 注意这里! @BaseUrl(API.BASE_URL) interface ApiService { @POST(API.LOGIN) suspend fun login(@Query("username") username: String, @Query("password") password: String): BaseResponse }// ServiceFactory.kt object ServiceFactory { // 初始化 ApiService val apiService by lazy { RetrofitFactory.create(ApiService::class.java) } }
// LoginRepository.kt class LoginRepository { suspend fun login(account: String, password: String): BaseResponse { return ServiceFactory.apiService.login(account, password) } }
@BaseUrl注解,value 值为 baseUrl,其他按照正常
retrofit使用即可。
RetrofitFactory.create()来创建对应 ApiService。RetrofitFactory封装了
Retrofit创建流程。
KtArmor-MVVM框架是一款小而美的框架,也是我个人经验的积累, 总结,希望大家喜欢。
如果你有更好的建议欢迎 pr,issues 一起交流学习。
如有不妥, 望各位大佬指出。