实战调试Ruoyi-Android-App技巧
简介
RuoYi Android App 移动解决方案,采用kotlin框架,实现了与RuoYi-Go 、RuoYi-Vue、RuoYi-Cloud完美对接的移动解决方案!目前已经实现登录、我的、工作台、编辑资料、头像修改、密码修改、常见问题、关于我们等基础功能。
-
配套后端代码仓库地址RuoYi-Go 或 RuoYi-Vue 或 RuoYi-Cloud 版本。 -
应用框架基于kotlin,支持Android。
/*** 网络配置初始化* 配置 OkHttp 相关参数、拦截器、缓存、超时等全局网络设置*/NetConfig.initialize(ConfigApi.baseUrl, context) {// ====================== 超时设置 ======================// 连接超时:30秒connectTimeout(30, TimeUnit.SECONDS)// 读取超时:30秒readTimeout(30, TimeUnit.SECONDS)// 写入超时:30秒writeTimeout(30, TimeUnit.SECONDS)// ====================== 缓存配置 ======================// 启用 Http 缓存协议 + 强制缓存模式// 缓存目录:context.cacheDir,缓存大小:128MB// 超过最大缓存大小时,按 LRU(最近最少使用)算法清理缓存cache(Cache(context.cacheDir, 1024 * 1024 * 128))// ====================== 日志配置 ======================// 根据 Debug 模式控制是否输出异常日志(便于定位网络请求错误)setDebug(BuildConfig.DEBUG)// 适配 AndroidStudio OkHttp Profiler 插件,输出网络请求日志addInterceptor(LogRecordInterceptor(BuildConfig.DEBUG))// ====================== Cookie 管理 ======================// 添加持久化 Cookie 管理(避免每次请求重新登录)cookieJar(PersistentCookieJar(context))// ====================== 全局异常处理 ======================// 统一处理网络请求异常(如超时、404、500 等)setErrorHandler(ErrorHandler())// ====================== 调试辅助(仅 Debug 模式) ======================if (BuildConfig.DEBUG) {// Chucker 拦截器:在通知栏查看网络请求/响应详情(替代 Stetho)addInterceptor(ChuckerInterceptor.Builder(context).collector(ChuckerCollector(context)) // 数据收集器.maxContentLength(250000L) // 最大响应内容长度(避免过大).redactHeaders(emptySet()) // 不隐藏任何请求头.alwaysReadResponseBody(false) // 按需读取响应体(节省资源).build())}// ====================== 请求拦截器 ======================// 全局请求拦截:统一添加 token、设备信息、版本号等公共参数setRequestInterceptor(RequestInterceptor())// ====================== 数据转换 ======================// 自定义数据转换器(如 Json -> Model、ProtoBuf 解析等)setConverter(SerializationConverter())// ====================== 全局加载弹窗 ======================// 自定义网络请求时的加载对话框(统一弹窗样式)setDialogFactory {BubbleDialog(it, Frame.getString(R.string.bubble_loading_title))}}
这段代码是 Android 项目中全局网络配置初始化的核心逻辑,基于 OkHttp 封装的网络框架实现,主要作用包括:
-
配置网络超时、缓存等基础参数; -
统一管理 Cookie、异常处理、公共请求参数; -
区分 Debug/Release 模式,添加调试辅助工具; -
自定义加载弹窗、数据解析规则。
引入 MVVM + ViewModel + LiveData / Flow
-
彻底解耦启动页、登录页、业务页,代码更稳、更容易维护。
-
协议状态、启动状态交给 ViewModel 管理 -
生命周期安全,不会出现内存泄漏 -
支持状态恢复(后台杀死重启不崩溃)
/*接口相关*/val authRepository: AuthRepoInterfaceget() = ServiceAuthLocator.provideAuthRepository(this)
@kotlinx.serialization.Serializableclass AvatarEntity(val code: Int = 0,val msg: String = "",val imgUrl: String = "")
@kotlinx.serialization.Serializable
-
统一 Kotlin 语法 替换 Java(现在安卓主流) -
统一封装:BaseActivity、BaseDialog、BaseViewModel -
统一网络框架:结合 Ruoyi 后端,封装 Retrofit + 协程 -
统一路由:ARouter 页面跳转 -
统一主题、样式、状态栏
这样为jenkin 自动打包上传到蒲公英第三方里面做准备。

自定义dialog方式。案例有两个。
1、dialog目录里面

这里是公共的方法。
2、自定义dialog方式,如LikeMeDialog

简单实用
vallikeMeDialog=LikeMeDialog(requireActivity()) if(!likeMeDialog.isShowing){ likeMeDialog.show() }
即可了。
拦截器和接口加密都是在OKHTTP里面配置的。也是上面第一次进行的。
button 点击防止多重点击功能,自己封装了clickDelay 方法
使用方法
binding.llJiaoliuqun.clickDelay{ ToastUtils.show(Frame.getString(R.string.mine_qq_line)) }
整体使用了BaseBinding 模式,去掉findbyid的多余的代码。代码减少了40%左右。加快开发流程。
统一上拉更多,下拉刷新控件。
回到顶部,基础的技巧。在logActivity中。实用
swiperefreshlayout
方式。代码简单

技巧 11 权限申请 XXPermissions 实用。最小权限配置,动态申请权限,为了上app市场,审核封装,加快审核。 技巧 12 图片显示,使用glide。进行自定义存储战略,内存还是本地策略。 技巧 13 一键清理 一键打包测试和正式都有了 配置文件在config中 更多功能后面会补充。后面会补充一些实战内容,如权限模块。功能配置模块。
夜雨聆风


