BaseKit KTX Skills
简介
me.shetj.base.ktx 模块提供了一系列 Kotlin 扩展函数,涵盖了 Android 开发的各个方面,从 UI 操作到系统组件交互,旨在提高开发效率。此外,me.shetj.base.tools.file 包下提供了一系列基础工具类。
核心功能分类
1. Context, Activity, Fragment & Window
提供界面跳转、权限请求、结果回调、沉浸式状态栏及 Context 增强功能。
Context 增强 (ContextKt):
// 获取生命周期协程作用域 (支持 Activity, Service, App)
context.lifeScope.launch { ... }
// 安全转换为 Activity
val activity = context.asActivity
val componentActivity = context.asComponentActivity
// 应用前台切换
context.moveToFrontApp() // 将 APP 移至前台
context.moveToFront(activity) // 将指定 Activity 移至前台
// 资源获取与启动
context.getIdByName("layout", "activity_main")
context.openActivity("scheme://...")
context.openActivityByPackageName("com.example.app")
ActivityResultLauncher (ActivityResultExt):
自动管理生命周期的 Launcher 注册,简化 startActivityForResult 和权限请求。
// 请求单个权限
startRequestPermission(Manifest.permission.CAMERA) { granted -> }
// 请求多个权限
startRequestPermissions(arrayOf(Manifest.permission.CAMERA)) { result -> }
// 启动 Activity 并获取结果
startActivityResult(intent) { result -> }
// 拍照/录像/选择文件/创建文件
takePicture { uri -> }
selectFile { uri -> }
createFile("test.txt") { uri -> }
// 图片裁剪
cropImage(CropImage(uri, 1, 1)) { uri -> }
// Android 13+ 照片选择器
pickVisualMedia(PickVisualMediaRequest.Builder().build()) { uri -> }
WindowInsets & 沉浸式 (WinCompatExt):
基于 WindowCompat 和 enableEdgeToEdge 的现代化窗口控制。
// 开启沉浸式 (自动处理状态栏/导航栏颜色)
immerse(
type = Type.statusBars(),
statusIsBlackText = true,
navigationIsBlackLine = true
)
// 仅设置状态栏外观
setAppearance(isBlackText = true, color = Color.WHITE)
// 隐藏/显示系统栏
hideSystemUI()
showSystemUI()
// 获取高度
getStatusBarsHeight()
getNavigationBarsHeight()
Fragment 管理与转场 (ActivityUtilsExt, TransitionExt):
// Fragment 事务简化
supportFragmentManager.replaceFragment(fragment, R.id.container)
supportFragmentManager.addFragmentToActivity(fragment, R.id.container)
fragment.show(supportFragmentManager, R.id.container)
// 共享元素动画
val options = activity.getActivityOptions(sharedView, "transitionName")
activity.startNewActivity(options, TargetActivity::class.java)
// 获取 Transition 资源
context.getTransition(R.transition.slide)
2. View & UI 增强
简化 View 动画、布局、约束、文本样式及常用控件操作。
View 基础 (ViewExt):
// 点击动画效果
view.setClicksAnimate()
// 圆角裁剪
view.clipRound(10f.dp2px)
// 宽高比设置
view.layoutRatio(ratioW = 16, ratioH = 9)
// 可见性检查
view.isCompletelyVisible(parentView)
EditText 输入流 (EditTextExt):
// 监听输入变化转为 Flow
editText.asFlow().collect { text -> ... }
// 监听输入变化转为 LiveData
editText.asLiveData().observe(owner) { text -> ... }
AppBar & Menu (AppBarExt, MenuExt):
// 启用/禁用 AppBarLayout 滑动
appBarLayout.enableAppBar(true)
// 设置所有菜单项可见性
menu.setVisible(true)
ConstraintLayout 动态布局 (ConstraintSetExt):
DSL 风格的约束设置。
constraintLayout.reLayout {
topToParent(viewId, margin = 10)
startToStart(viewId, targetId)
// ...
}
文本样式 (SpanExt, StringExt):
// 链式构建 Span
textView.text = "Hello".toSizeSpan(0..5, 1.5f).toColorSpan(...)
// 高亮关键词
textView.text = highString("Content with key", listOf("key"), "#FF0000")
// HTML 解析
"<b>Bold</b>".fromHtml()
动画 (AnimatorExt, LayoutAnimateExt):
// 旋转动画
view.rotation(duration = 1000)
// 布局变化动画
viewGroup.addLayoutChangeAnim { ... }
RecyclerView (RecyclerViewExt):
recyclerView.smoothToPosition(pos)
recyclerView.isCompleteVisibleScreen(pos)
3. 数据处理与工具
JSON 解析、字符串处理、日志打印、数据流操作等。
String 常用扩展 (StringExt):
// 校验
"13800000000".isPhone()
"420...".isIdCard()
// 转换
"content".md5
"#FFFFFF".toColor
// 复制到剪贴板
"text".copy(context)
// 读取 Assets 文件
getAssetsString(context, "config.json")
JSON & Gson (GsonExt, StringExt):
// JSON 转换
obj.toJson()
jsonString.toBean<User>()
jsonString.toList<User>()
jsonString.toMap()
// Gson Type 构建
val listType = GsonExt.list(User::class.java)
val mapType = GsonExt.map(String::class.java, User::class.java)
日志打印 (StringExt):
提供基于 Timber 的便捷日志打印,支持 JSON 格式化和长日志分段。
"message".logI()
"error".logE()
exception.logE()
// 打印 JSON(自动格式化)
jsonString.logJson()
// 打印超长日志(分段)
longString.logChunked()
// UI 生命周期日志
"onResume".logUILife()
LiveData & Flow (LiveDataExt, FlowExt):
// 防抖与节流
liveData.throttleLast(1000)
liveData.throttleFirst(1000)
flow.throttleFirst(1000)
反射与泛型 (ClassExt, TypeExt):
// 获取父类泛型类型 (如 BaseActivity<ViewModel>)
val clazz = getClazz<MyViewModel>(this)
// 获取接口泛型类型
val clazzInterface = getClazzByInterface<MyInterface>(this)
// 创建泛型实例 (无参构造)
val obj = getObjByClassArg<MyObject>(this)
// 获取 Raw Type
val rawType = getRawType(type)
数据转换 (DataExt):
10.dp2px
100.toNumberCH() // 转中文数字
runTimeMillis { /* code */ } // 计算执行时间
4. 组件集成与工具
Intent、Navigation、Glide、Uri、Saver 等工具集成。
Intent 跳转 (IntentExt):
context.openUri("https://...")
context.openMarket()
context.openSetting()
context.openNotificationSetting()
context.sendEmailText(...)
Navigation 导航 (NavExt):
// 修复 FragmentContainerView 中查找 NavController 的问题
activity.fixFindNavController(R.id.nav_host)
// 获取 SavedStateHandle (支持当前栈和上一级栈)
navController.getCurSavedStateHandle()
navController.getPreSavedStateHandle()
Glide 图片加载 (GlideExt):
imageView.loadImage(url)
imageView.loadImageBitmap(url)
// 下载并保存图片到相册
saveImage(context, url)
文件与 Uri (ContentExt, UriExt):
// 创建兼容 Android Q 的图片/视频 Uri
createImagePathUri(context)
createVideoPathUri(context)
// 解析 Uri 参数
uri.parseUriParams()
数据持久化 (SaverExt):
// 创建并更新 Saver (键值对存储)
saverCreate("group", "key", "value").updateToDB()
线程切换 (ArmExt, CoroutineExt):
runOnMain { ... }
runOnIo { ... }
// 协程中切换
data.withIO { ... }
5. 基础工具类 (Tools)
位于 me.shetj.base.tools.file 包下,提供文件、IO、SP 等静态工具方法。
文件操作 (FileUtils):
FileUtils.isFileExists(path)
FileUtils.createOrExistsFile(path)
FileUtils.deleteFile(path)
FileUtils.copyFile(src, dest, listener)
FileUtils.rename(file, newName)
FileUtils.getFileMD5ToString(path)
文件读写 (FileIOUtils):
// 字符串写入
FileIOUtils.writeFileFromString(file, content)
// 读取为字符串
val content = FileIOUtils.readFile2String(file)
// 读取为 List
val lines = FileIOUtils.readFile2List(file)
Android Q 适配 (FileQUtils):
// 获取 URI 对应的绝对路径 (兼容 Q+)
FileQUtils.getFileAbsolutePath(context, uri)
SharedPreferences (SPUtils):
SPUtils.put(context, "key", value)
val value = SPUtils.get(context, "key", default)
SPUtils.remove(context, "key")
SPUtils.clear(context)
字符串工具 (StringUtils):
StringUtils.isPhone(number)
StringUtils.isIdCard(id)
StringUtils.numberToCH(123) // "一百二十三"
环境路径 (EnvironmentStorage):
val sdCard = EnvironmentStorage.sdCardPath
val cache = EnvironmentStorage.cache
6. 日志与调试 (Debug Tools)
位于 me.shetj.base.tools.debug 包下,提供高性能的日志管理系统。
LogManager: 核心日志管理器,支持缓冲写入、文件分割、Crash 保护。
// 初始化 (通常在 Application 中)
LogManager.init {
isEnable = true
isPrintToConsole = BuildConfig.DEBUG
logDir = "..." // 自定义日志路径
bufferSize = 50 // 缓冲条数
}
// 记录日志
LogManager.log(LogLevel.INFO, "Tag", "Message")
LogManager.log(LogLevel.ERROR, "Tag", "Error Message")
// 强制刷新 (Crash 时自动调用)
LogManager.flushSync()
DebugFunc: 旧版兼容入口,现作为 LogManager 的门面。
DebugFunc.getInstance().initContext(context)
DebugFunc.getInstance().logBehavior("UserAction", "Click Button")
BaseUncaughtExceptionHandler: 全局异常捕获,自动保存 Crash 堆栈到日志文件。
目录结构
- ktx/
ActivityResultExt.kt: ActivityResultLauncher 封装。
WinCompatExt.kt: 窗口与沉浸式适配。
ContextKt.kt: Context 扩展。
ActivityExt.kt / FragmentExt.kt: 基础扩展。
ActivityUtilsExt.kt: Fragment 事务与转场工具。
ViewExt.kt: View 基础扩展。
EditTextExt.kt: EditText 转 Flow/LiveData。
ConstraintSetExt.kt: 约束布局扩展。
SpanExt.kt / StringExt.kt: 字符串与富文本。
GsonExt.kt: Gson 工具。
DateKit.kt: 日期工具。
LiveDataExt.kt / FlowExt.kt: 数据流扩展。
IntentExt.kt: 系统 Intent 跳转。
GlideExt.kt: 图片加载。
ContentExt.kt: Uri/File 创建兼容。
NavExt.kt: Navigation 扩展。
ClassExt.kt / TypeExt.kt: 反射与泛型工具。
- tools/file/
FileUtils.kt: 文件操作工具。
FileIOUtils.kt: 文件读写工具。
FileQUtils.kt: Android Q 适配工具。
SPUtils.kt: SharedPreferences 工具。
StringUtils.kt: 字符串工具。
EnvironmentStorage.kt: 存储路径工具。
- tools/debug/
LogManager.kt: 日志管理核心。
LogConfig.kt: 日志配置。
DebugFunc.kt: 调试工具门面。
BaseUncaughtExceptionHandler.kt: Crash 捕获。
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
1---2name: basekit-ktx3description: Collection of Kotlin extensions for Android development. Invoke when needing common Android/Kotlin shortcuts. Use when this capability is needed.4---56# BaseKit KTX Skills78## 简介9`me.shetj.base.ktx` 模块提供了一系列 Kotlin 扩展函数,涵盖了 Android 开发的各个方面,从 UI 操作到系统组件交互,旨在提高开发效率。此外,`me.shetj.base.tools.file` 包下提供了一系列基础工具类。1011## 核心功能分类1213### 1. Context, Activity, Fragment & Window14提供界面跳转、权限请求、结果回调、沉浸式状态栏及 Context 增强功能。1516- **Context 增强 (`ContextKt`)**:17 ```kotlin18 // 获取生命周期协程作用域 (支持 Activity, Service, App)19 context.lifeScope.launch { ... }20 21 // 安全转换为 Activity22 val activity = context.asActivity23 val componentActivity = context.asComponentActivity24 25 // 应用前台切换26 context.moveToFrontApp() // 将 APP 移至前台27 context.moveToFront(activity) // 将指定 Activity 移至前台28 29 // 资源获取与启动30 context.getIdByName("layout", "activity_main")31 context.openActivity("scheme://...")32 context.openActivityByPackageName("com.example.app")33 ```3435- **ActivityResultLauncher (`ActivityResultExt`)**:36 自动管理生命周期的 Launcher 注册,简化 `startActivityForResult` 和权限请求。37 ```kotlin38 // 请求单个权限39 startRequestPermission(Manifest.permission.CAMERA) { granted -> }40 41 // 请求多个权限42 startRequestPermissions(arrayOf(Manifest.permission.CAMERA)) { result -> }43 44 // 启动 Activity 并获取结果45 startActivityResult(intent) { result -> }46 47 // 拍照/录像/选择文件/创建文件48 takePicture { uri -> }49 selectFile { uri -> }50 createFile("test.txt") { uri -> }51 52 // 图片裁剪53 cropImage(CropImage(uri, 1, 1)) { uri -> }54 55 // Android 13+ 照片选择器56 pickVisualMedia(PickVisualMediaRequest.Builder().build()) { uri -> }57 ```5859- **WindowInsets & 沉浸式 (`WinCompatExt`)**:60 基于 `WindowCompat` 和 `enableEdgeToEdge` 的现代化窗口控制。61 ```kotlin62 // 开启沉浸式 (自动处理状态栏/导航栏颜色)63 immerse(64 type = Type.statusBars(), 65 statusIsBlackText = true, 66 navigationIsBlackLine = true67 )68 69 // 仅设置状态栏外观70 setAppearance(isBlackText = true, color = Color.WHITE)71 72 // 隐藏/显示系统栏73 hideSystemUI()74 showSystemUI()75 76 // 获取高度77 getStatusBarsHeight()78 getNavigationBarsHeight()79 ```8081- **Fragment 管理与转场 (`ActivityUtilsExt`, `TransitionExt`)**:82 ```kotlin83 // Fragment 事务简化84 supportFragmentManager.replaceFragment(fragment, R.id.container)85 supportFragmentManager.addFragmentToActivity(fragment, R.id.container)86 fragment.show(supportFragmentManager, R.id.container)87 88 // 共享元素动画89 val options = activity.getActivityOptions(sharedView, "transitionName")90 activity.startNewActivity(options, TargetActivity::class.java)91 92 // 获取 Transition 资源93 context.getTransition(R.transition.slide)94 ```9596### 2. View & UI 增强97简化 View 动画、布局、约束、文本样式及常用控件操作。9899- **View 基础 (`ViewExt`)**:100 ```kotlin101 // 点击动画效果102 view.setClicksAnimate()103 104 // 圆角裁剪105 view.clipRound(10f.dp2px)106 107 // 宽高比设置108 view.layoutRatio(ratioW = 16, ratioH = 9)109 110 // 可见性检查111 view.isCompletelyVisible(parentView)112 ```113114- **EditText 输入流 (`EditTextExt`)**:115 ```kotlin116 // 监听输入变化转为 Flow117 editText.asFlow().collect { text -> ... }118 119 // 监听输入变化转为 LiveData120 editText.asLiveData().observe(owner) { text -> ... }121 ```122123- **AppBar & Menu (`AppBarExt`, `MenuExt`)**:124 ```kotlin125 // 启用/禁用 AppBarLayout 滑动126 appBarLayout.enableAppBar(true)127 128 // 设置所有菜单项可见性129 menu.setVisible(true)130 ```131132- **ConstraintLayout 动态布局 (`ConstraintSetExt`)**:133 DSL 风格的约束设置。134 ```kotlin135 constraintLayout.reLayout {136 topToParent(viewId, margin = 10)137 startToStart(viewId, targetId)138 // ...139 }140 ```141142- **文本样式 (`SpanExt`, `StringExt`)**:143 ```kotlin144 // 链式构建 Span145 textView.text = "Hello".toSizeSpan(0..5, 1.5f).toColorSpan(...)146 147 // 高亮关键词148 textView.text = highString("Content with key", listOf("key"), "#FF0000")149 150 // HTML 解析151 "<b>Bold</b>".fromHtml()152 ```153154- **动画 (`AnimatorExt`, `LayoutAnimateExt`)**:155 ```kotlin156 // 旋转动画157 view.rotation(duration = 1000)158 159 // 布局变化动画160 viewGroup.addLayoutChangeAnim { ... }161 ```162163- **RecyclerView (`RecyclerViewExt`)**:164 ```kotlin165 recyclerView.smoothToPosition(pos)166 recyclerView.isCompleteVisibleScreen(pos)167 ```168169### 3. 数据处理与工具170JSON 解析、字符串处理、日志打印、数据流操作等。171172- **String 常用扩展 (`StringExt`)**:173 ```kotlin174 // 校验175 "13800000000".isPhone()176 "420...".isIdCard()177 178 // 转换179 "content".md5180 "#FFFFFF".toColor181 182 // 复制到剪贴板183 "text".copy(context)184 185 // 读取 Assets 文件186 getAssetsString(context, "config.json")187 ```188189- **JSON & Gson (`GsonExt`, `StringExt`)**:190 ```kotlin191 // JSON 转换192 obj.toJson()193 jsonString.toBean<User>()194 jsonString.toList<User>()195 jsonString.toMap()196 197 // Gson Type 构建198 val listType = GsonExt.list(User::class.java)199 val mapType = GsonExt.map(String::class.java, User::class.java)200 ```201202- **日志打印 (`StringExt`)**:203 提供基于 Timber 的便捷日志打印,支持 JSON 格式化和长日志分段。204 ```kotlin205 "message".logI()206 "error".logE()207 exception.logE()208 209 // 打印 JSON(自动格式化)210 jsonString.logJson()211 212 // 打印超长日志(分段)213 longString.logChunked()214 215 // UI 生命周期日志216 "onResume".logUILife()217 ```218219- **LiveData & Flow (`LiveDataExt`, `FlowExt`)**:220 ```kotlin221 // 防抖与节流222 liveData.throttleLast(1000)223 liveData.throttleFirst(1000)224 225 flow.throttleFirst(1000)226 ```227228- **反射与泛型 (`ClassExt`, `TypeExt`)**:229 ```kotlin230 // 获取父类泛型类型 (如 BaseActivity<ViewModel>)231 val clazz = getClazz<MyViewModel>(this)232 233 // 获取接口泛型类型234 val clazzInterface = getClazzByInterface<MyInterface>(this)235 236 // 创建泛型实例 (无参构造)237 val obj = getObjByClassArg<MyObject>(this)238 239 // 获取 Raw Type240 val rawType = getRawType(type)241 ```242243- **数据转换 (`DataExt`)**:244 ```kotlin245 10.dp2px246 100.toNumberCH() // 转中文数字247 runTimeMillis { /* code */ } // 计算执行时间248 ```249250### 4. 组件集成与工具251Intent、Navigation、Glide、Uri、Saver 等工具集成。252253- **Intent 跳转 (`IntentExt`)**:254 ```kotlin255 context.openUri("https://...")256 context.openMarket()257 context.openSetting()258 context.openNotificationSetting()259 context.sendEmailText(...)260 ```261262- **Navigation 导航 (`NavExt`)**:263 ```kotlin264 // 修复 FragmentContainerView 中查找 NavController 的问题265 activity.fixFindNavController(R.id.nav_host)266 267 // 获取 SavedStateHandle (支持当前栈和上一级栈)268 navController.getCurSavedStateHandle()269 navController.getPreSavedStateHandle()270 ```271272- **Glide 图片加载 (`GlideExt`)**:273 ```kotlin274 imageView.loadImage(url)275 imageView.loadImageBitmap(url)276 277 // 下载并保存图片到相册278 saveImage(context, url)279 ```280281- **文件与 Uri (`ContentExt`, `UriExt`)**:282 ```kotlin283 // 创建兼容 Android Q 的图片/视频 Uri284 createImagePathUri(context)285 createVideoPathUri(context)286 287 // 解析 Uri 参数288 uri.parseUriParams()289 ```290291- **数据持久化 (`SaverExt`)**:292 ```kotlin293 // 创建并更新 Saver (键值对存储)294 saverCreate("group", "key", "value").updateToDB()295 ```296297- **线程切换 (`ArmExt`, `CoroutineExt`)**:298 ```kotlin299 runOnMain { ... }300 runOnIo { ... }301 302 // 协程中切换303 data.withIO { ... }304 ```305306### 5. 基础工具类 (Tools)307位于 `me.shetj.base.tools.file` 包下,提供文件、IO、SP 等静态工具方法。308309- **文件操作 (`FileUtils`)**:310 ```kotlin311 FileUtils.isFileExists(path)312 FileUtils.createOrExistsFile(path)313 FileUtils.deleteFile(path)314 FileUtils.copyFile(src, dest, listener)315 FileUtils.rename(file, newName)316 FileUtils.getFileMD5ToString(path)317 ```318319- **文件读写 (`FileIOUtils`)**:320 ```kotlin321 // 字符串写入322 FileIOUtils.writeFileFromString(file, content)323 // 读取为字符串324 val content = FileIOUtils.readFile2String(file)325 // 读取为 List326 val lines = FileIOUtils.readFile2List(file)327 ```328329- **Android Q 适配 (`FileQUtils`)**:330 ```kotlin331 // 获取 URI 对应的绝对路径 (兼容 Q+)332 FileQUtils.getFileAbsolutePath(context, uri)333 ```334335- **SharedPreferences (`SPUtils`)**:336 ```kotlin337 SPUtils.put(context, "key", value)338 val value = SPUtils.get(context, "key", default)339 SPUtils.remove(context, "key")340 SPUtils.clear(context)341 ```342343- **字符串工具 (`StringUtils`)**:344 ```kotlin345 StringUtils.isPhone(number)346 StringUtils.isIdCard(id)347 StringUtils.numberToCH(123) // "一百二十三"348 ```349350- **环境路径 (`EnvironmentStorage`)**:351 ```kotlin352 val sdCard = EnvironmentStorage.sdCardPath353 val cache = EnvironmentStorage.cache354 ```355356### 6. 日志与调试 (Debug Tools)357位于 `me.shetj.base.tools.debug` 包下,提供高性能的日志管理系统。358359- **LogManager**: 核心日志管理器,支持缓冲写入、文件分割、Crash 保护。360 ```kotlin361 // 初始化 (通常在 Application 中)362 LogManager.init {363 isEnable = true364 isPrintToConsole = BuildConfig.DEBUG365 logDir = "..." // 自定义日志路径366 bufferSize = 50 // 缓冲条数367 }368 369 // 记录日志370 LogManager.log(LogLevel.INFO, "Tag", "Message")371 LogManager.log(LogLevel.ERROR, "Tag", "Error Message")372 373 // 强制刷新 (Crash 时自动调用)374 LogManager.flushSync()375 ```376377- **DebugFunc**: 旧版兼容入口,现作为 LogManager 的门面。378 ```kotlin379 DebugFunc.getInstance().initContext(context)380 DebugFunc.getInstance().logBehavior("UserAction", "Click Button")381 ```382383- **BaseUncaughtExceptionHandler**: 全局异常捕获,自动保存 Crash 堆栈到日志文件。384385## 目录结构386- **ktx/**387 - `ActivityResultExt.kt`: ActivityResultLauncher 封装。388 - `WinCompatExt.kt`: 窗口与沉浸式适配。389 - `ContextKt.kt`: Context 扩展。390 - `ActivityExt.kt` / `FragmentExt.kt`: 基础扩展。391 - `ActivityUtilsExt.kt`: Fragment 事务与转场工具。392 - `ViewExt.kt`: View 基础扩展。393 - `EditTextExt.kt`: EditText 转 Flow/LiveData。394 - `ConstraintSetExt.kt`: 约束布局扩展。395 - `SpanExt.kt` / `StringExt.kt`: 字符串与富文本。396 - `GsonExt.kt`: Gson 工具。397 - `DateKit.kt`: 日期工具。398 - `LiveDataExt.kt` / `FlowExt.kt`: 数据流扩展。399 - `IntentExt.kt`: 系统 Intent 跳转。400 - `GlideExt.kt`: 图片加载。401 - `ContentExt.kt`: Uri/File 创建兼容。402 - `NavExt.kt`: Navigation 扩展。403 - `ClassExt.kt` / `TypeExt.kt`: 反射与泛型工具。404- **tools/file/**405 - `FileUtils.kt`: 文件操作工具。406 - `FileIOUtils.kt`: 文件读写工具。407 - `FileQUtils.kt`: Android Q 适配工具。408 - `SPUtils.kt`: SharedPreferences 工具。409 - `StringUtils.kt`: 字符串工具。410 - `EnvironmentStorage.kt`: 存储路径工具。411- **tools/debug/**412 - `LogManager.kt`: 日志管理核心。413 - `LogConfig.kt`: 日志配置。414 - `DebugFunc.kt`: 调试工具门面。415 - `BaseUncaughtExceptionHandler.kt`: Crash 捕获。416417---418> Converted and distributed by [TomeVault](https://tomevault.io/claim/shetiejun) — claim your Tome and manage your conversions.419<!-- tomevault:4.0:skill_md:2026-04-11 -->