减少重复代码,提高开发效率 把简单的事情程序化,把复杂的事情程序化,把重复的事情程序化。
BaseKit 是一个旨在简化 Android 开发的 Kotlin 基础库,提供了一系列封装良好的工具类、扩展函数和基础组件。它集成了 MVVM 架构支持、网络请求、图片加载、依赖注入等主流技术栈,帮助开发者快速搭建高质量的 Android 应用。
- 架构支持:提供 MVVM (ViewBinding/DataBinding + ViewModel + LiveData/Flow) 基础类,简化页面开发。
- Kotlin 扩展 (KTX):涵盖 Context, View, String, Collection, File 等常用扩展,大幅减少样板代码。
- 网络模块:基于 Retrofit + OkHttp + Coroutines 的网络请求封装,支持 DSL 配置、异常处理、文件下载进度监听。
- 界面组件:
- 沉浸式状态栏/导航栏适配 (
WindowInsetsControllerCompat)。 - ActivityResultLauncher 封装,简化权限请求和 Activity 跳转结果处理。
- 基于 Material Design 3 的主题切换工具。
- 沉浸式状态栏/导航栏适配 (
- 数据存储:集成 DataStore, Room, SharedPreferences 工具类。
- 工具集:包含日志打印 (Timber), 文件操作, 异步任务 (WorkManager), 协程封装等。
- 语言:Kotlin (100%)
- 最低兼容:Android 5.0 (API 21)
- 核心库:
- Android Jetpack: Lifecycle, ViewModel, LiveData, Room, WorkManager, Navigation, Paging, Startup, Biometric 等。
- Jetpack Compose: 用于构建现代原生 UI。
- Retrofit + OkHttp: 网络请求。
- Koin: 依赖注入。
- Glide: 图片加载。
- Gson: JSON 解析。
- Coroutines: 异步编程。
- Material Design 3: UI 设计规范。
在项目的 build.gradle.kts 或 libs.versions.toml 中添加依赖:
dependencies {
implementation("com.github.SheTieJun:BaseKit:latest_version")
}推荐使用 androidx.startup 进行初始化(BaseKit 已内置部分自动初始化),或在 Application 中配置全局参数:
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
// 初始化 Koin, Timber 等
}
}Activity 继承 BaseBindingActivity
class MainActivity : BaseBindingActivity<ActivityMainBinding, MainViewModel>() {
override fun initViewBinding(): ActivityMainBinding {
return ActivityMainBinding.inflate(layoutInflater)
}
/**
* step 1
* Init base view
* i.e. setTitle, setToolbar, setBackButton, etc.
*/
override fun initBaseView() {}
/**
* step 2
* All initialization related work will be done in this method.
* i.e. Handling lifecycle methods.
*/
override fun onInitialized() {}
/**
* step 3
* All observer listener code will be handled in this method inside controllers.
*/
override fun addObservers() {}
/**
* step 4
* All click action code will be handled in this method inside controllers.
*/
override fun setUpClicks() {}
}网络请求
// 使用 KCHttp (BaseKit 内置网络封装)
scope.launch {
val result = KCHttp.get<User>("https://api.example.com/user")
// 处理 result
}BaseKit
├── app # 示例应用 (Demo)
├── baseKit # 核心库代码
│ ├── src/main/java/me/shetj/base
│ │ ├── base # BaseActivity, BaseFragment, BaseViewModel 等
│ │ ├── ktx # Kotlin 扩展函数 (ActivityExt, ViewExt 等)
│ │ ├── network # 网络请求封装 (Retrofit, Interceptor)
│ │ ├── tools # 工具类 (File, Image, App 等)
│ │ ├── di # Koin 依赖注入模块
│ │ └── weight # 自定义 View
├── gradle # Gradle 配置与版本管理 (Version Catalog)
└── build.gradle.kts # 项目构建配置
- Wiki: 项目 Wiki (包含详细使用指南)
- 相关文章:
- 模块类型
- 应用模块
- 数据模块
- 功能模块
- 通用模块
- 界面模块
- 网络模块
- 辅助模块
- 通信模块(中介模块):用于模块间的通信
- 逻辑分离:明确区分界面元素(界面逻辑)和界面操作元素(业务逻辑)。
- UIState 定义:推荐使用
Sealed Class或Data Class定义 UI 状态,例如TracksUIState,TrackItemUIState。
- DataStore:适合存储键值对(如用户设置、时间格式、通知偏好)。支持使用协议缓冲区存储类型化对象。
- WorkManager:用于调度可靠的异步任务(持久性工作),如
RefreshLatestNewsWorker。 - Mutex:用于保护来自不同线程的读写操作,确保线程安全。
- async/await:
launch:适用于“发射并忘记”。async:适用于“异步并等待结果”。- 场景示例:使用
async启动协程并调用await,如果在网络请求返回前用户离开屏幕,await会被取消,但async内部逻辑继续执行(如写入缓存)。
- 存储选型:Room / DataStore / File。
- 导航:使用
Navigation组件代替ARouter。 - 初始化:使用
App Startup代替在Application中直接初始化。- 支持分阶段初始化(如隐私政策同意后、登录后)。
- 调试工具:支持拦截网页请求,或动态添加 vConsole 进行 H5 调试。
- AOP:使用注解 + ASM 进行字节码插桩。
- 架构:遵循 MVVM 模式,将 UI 逻辑与业务逻辑分离。
- 协程最佳实践:
- 依赖注入:将
Dispatcher注入到类中,便于单元测试(替换为 TestDispatcher)。 - 作用域管理:ViewModel/Presenter 层应创建自己的协程 Scope,以便在生命周期结束时自动取消。
- API 设计:ViewModel/Presenter 下层(Repository/DataSource)应公开挂起函数 (
suspend functions) 和Flow。 - 全局操作:对于不应被 UI 生命周期取消的操作,请在
Application类中创建独立作用域(GlobalScope或自定义 Application Scope)来启动协程。
- 依赖注入:将
- 代码质量:
master: 主分支,包含最新特性。base_rx: 包含 RxJava 的旧分支(已不再主要维护)。feat_viewbinding: 仅 ViewBinding (无 DataBinding) 的分支。

