- 博客(59)
- 资源 (6)
- 收藏
- 关注
原创 Android底部导航栏图标变黑色
Android系统导航栏浅色模式适配代码,适用于不同系统版本:对于Android R(11)及以上版本,使用WindowInsetsController设置浅色导航栏;对于早期版本,则通过View的systemUiVisibility属性实现。这段代码展示了如何根据不同SDK版本采用不同API来确保导航栏UI风格一致。
2025-08-07 22:00:01
342
原创 iOS打开开发者模式
iOS设备启用开发者模式的方法有两种:通过Xcode连接设备后勾选开发模式,或直接在设置中开启(iOS16+需在隐私与安全底部找到选项)。启用后需重启设备,首次使用需验证密码。该模式主要用于调试,开启后需注意应用安装安全。不同iOS版本路径可能略有差异,旧系统需通过设备管理操作。
2025-07-21 10:42:58
694
原创 Compose Multiplatform优缺点
ComposeMultiplatform是一款高效的跨平台开发框架,允许使用Kotlin代码开发多端应用,显著提升开发效率。其优势包括声明式UI设计、热重载支持、Kotlin生态整合及官方强力支持。但存在性能不足(尤其在iOS/Web端)、API稳定性待完善、学习门槛较高、生态资源有限及包体积偏大等缺点。该框架适合已有Kotlin基础的团队,但需权衡其当前成熟度与项目需求。
2025-07-11 10:52:30
173
原创 Flutter优缺点
Flutter作为跨平台框架,具有开发效率高、性能接近原生、UI组件丰富和热重载等优势,能显著降低多平台应用的开发成本。但其安装包体积较大,部分原生功能支持滞后,Web/桌面端成熟度不足,且需要学习Dart语言和Flutter特有概念。第三方库质量参差也可能影响开发效率。总体而言,Flutter适合需要快速构建高性能跨平台应用的场景,但对安装包大小和特定平台功能有严格要求时需谨慎选择。
2025-07-11 10:45:38
506
原创 Android TensorFlow
摘要:TensorFlow Lite为Android设备提供轻量级机器学习解决方案。集成步骤包括:1)添加Gradle依赖;2)将.tflite模型放入assets文件夹并加载;3)数据预处理后通过Interpreter执行推理;4)解析输出结果。对于常见任务可使用预封装API,通过GPU delegate加速性能。优化建议包括模型量化、算子裁剪和支持动态形状。注意测试不同硬件的算子兼容性。
2025-07-05 04:00:00
162
原创 Compose数据分页加载效果
Compose实现分页加载可通过LazyColumn结合Paging库完成,需要处理加载状态和视觉优化。核心实现包括:使用collectAsLazyPagingItems收集分页数据,在LazyColumn中展示数据并处理加载中/错误状态;通过PagingConfig配置预加载参数优化性能;可添加骨架屏等加载动画提升用户体验。高级控制可通过LazyListState监听滚动位置实现手动分页触发。关键注意分页状态管理和内存优化配置。
2025-07-05 03:30:00
242
原创 Jetpack Compose CollapsingToolbarLayout效果
本文介绍了Jetpack Compose中实现CollapsingToolbarLayout效果的三种方法:1) 使用LazyColumn与Parallax效果,通过滚动偏移控制视差折叠;2) 采用CustomScrollView与NestedScrollConnection实现精确滚动控制;3) 借助第三方库简化开发。关键点包括调节translationY视差强度、alpha透明度变化,以及通过scrollState管理滚动位置。这些方案都能达到传统折叠工具栏效果,开发者可根据项目复杂度选择基础实现或精细
2025-07-04 14:47:52
220
原创 Compose LazyVerticalStaggeredGrid卡顿
《优化LazyVerticalStaggeredGrid卡顿的6个关键方法》摘要:通过减少布局层级和使用LayoutInspector分析视图结构优化布局复杂度;采用Coil/Glide实现图片异步加载和缓存,设置固定尺寸避免动态计算;启用固定跨度或预估高度减少布局计算;利用derivedStateOf减少重组范围;开启硬件加速和R8优化提升渲染效率;结合Paging3实现分页加载,并通过JankStats监控性能指标。这些方法涵盖布局优化、资源管理、状态控制等维度,可有效提升瀑布流列表的滚动流畅性。
2025-07-04 14:26:09
185
原创 Compose路由
Compose路由配置摘要:Jetpack Compose通过NavHost和NavController实现路由管理,支持参数传递(路径声明/arguments获取)、嵌套路由(navigation块)、深层链接(navDeepLink)和路由动画(EnterTransition/ExitTransition)。还提供路由拦截监听器(addOnDestinationChangedListener)用于权限校验等场景。典型配置包含路由容器定义、参数处理和导航逻辑控制,适用于构建复杂应用的导航体系。
2025-07-03 18:03:56
235
原创 KMP(Kotlin Multiplatform)改造(Android/iOS)老项目
本文详细介绍了如何将KMP(Kotlin Multiplatform)项目集成到现有Android和iOS原生项目中的改造过程。主要内容包括: 在KMP项目中,将Android模块从应用改为库依赖,并创建独立入口模块; 在原生Android项目中添加KMP模块依赖,通过ComposeView嵌入KMP页面; 在iOS项目中添加构建脚本自动生成Framework,通过UIHostingController集成KMP页面; 提供了完整的配置说明和常见问题解决方案。 改造完成后,KMP项目可以同时运行在Andro
2025-07-03 17:58:45
2449
原创 Objective-c把字符解析成字典
本文介绍了在Objective-C中解析四种字符串格式为字典的方法:1)使用NSJSONSerialization解析JSON字符串;2)通过字符串分割处理URL查询参数;3)利用NSPropertyListSerialization解析plist格式;4)自定义解析逻辑处理特殊格式。文章强调了解析时的注意事项,包括编码处理、异常捕获和复杂结构的递归解析需求,为开发者提供了不同场景下的字符串转字典方案。
2025-06-30 20:12:35
320
原创 移动端日志平台EMAS
阿里云EMAS日志平台具备多端日志采集、实时分析和全链路监控能力,支持Crash日志等类型,便于问题定位与优化。其高可用架构保障海量数据处理,提供灵活的分类管理和安全合规保障。但平台存在学习曲线陡峭、费用较高、定制化受限等不足,且日志处理有轻微延迟。该平台适合需要稳定日志服务的企业,但需权衡成本与实时性需求。
2025-06-28 23:06:36
384
原创 Swift Moya自定义插件打印日志
Moya自定义插件打印网络请求日志指南:通过创建遵守PluginType协议的插件类,可详细记录请求和响应信息。插件需实现willSend和didReceive方法,分别打印请求URL、方法、头信息、请求体,以及响应状态码、响应数据或错误。可优化日志格式,使用专业日志库,并注意过滤敏感信息。最后将插件实例添加到MoyaProvider的plugins数组中即可启用。该方案弥补了Moya默认不提供详细日志的不足,便于开发调试。
2025-06-28 22:32:44
352
原创 mPaaS 客户端诊断概述
mPaaS客户端诊断是阿里云移动开发平台提供的应用问题排查工具,支持Android/iOS平台。核心功能包括性能监控(启动耗时、页面渲染)、日志分析(自动采集/筛选)、异常诊断(崩溃堆栈、设备信息)和网络请求追踪。开发者通过集成SDK,配置日志级别和上报策略,即可在控制台查看可视化报表分析问题。高级功能支持自定义埋点、远程日志拉取和A/B测试对比。使用需注意平台差异(Android混淆规则/iOS符号表)和日志上报策略优化。该工具帮助开发者快速定位客户端问题,提升应用稳定性。
2025-06-27 23:11:05
438
原创 swift 对象转Json
Swift中对象转JSON的方法:1. 使用Codable协议,自动处理符合条件的数据结构;2. 通过JSONSerialization处理字典/数组;3. 自定义编码逻辑时手动实现Encodable协议。注意事项包括确保属性符合Codable、格式化输出选项设置,以及处理特殊类型转换。两种主要方法都需使用do-catch处理可能的编码错误。
2025-06-27 22:48:47
326
原创 swiftUI iOS16和iOS15兼容
SwiftUI跨版本兼容开发需采用条件化代码适配策略,通过API可用性检查(@available)和运行时版本检测(if#available)实现功能分派。重点包括:使用版本隔离处理iOS16新增功能(如Grid布局、NavigationStack),提供替代实现;适配布局系统时优先选择兼容组件;封装导航逻辑兼容不同版本。开发中需使用Xcode14+工具链,设置多版本部署目标(iOS15+),并通过双向模拟器测试验证所有条件分支的执行路径。
2025-06-26 23:58:23
364
原创 swiftui TextEditor去除背景方法
摘要:隐藏或自定义TextEditor背景的方法包括:1) iOS16+使用.scrollContentBackground(.hidden);2) ZStack叠加透明视图;3) 直接设置background颜色;4) iOS15需通过UITextView Appearance API调整;5) 结合cornerRadius和shadow消除边框。最新系统推荐scrollContentBackground方案,旧版本需采用兼容方法,可根据需求选择透明或自定义背景效果。
2025-06-26 23:56:37
212
原创 Android edge-to-edge模式适配
Android全面屏适配新方案 在Android 16强制edge-to-edge模式下,界面元素易与系统栏重叠。传统通过获取状态栏/导航栏高度进行位移的方法已过时。Google推荐使用WindowInsetsCompat进行动态调整:通过ViewCompat.setOnApplyWindowInsetsListener监听根布局,利用WindowInsetsCompat.Type.systemBars()获取系统栏边距,WindowInsetsCompat.Type.ime()获取键盘高度,动态设置边距。
2025-06-25 19:26:54
1100
原创 在 GitLab CI 中配置多任务
GitLab CI通过.gitlab-ci.yml文件配置多任务流水线,支持任务分组、并行执行和条件触发。主要特性包括:1) 自定义阶段(stages)控制任务执行顺序;2) 同一阶段任务自动并行;3) 通过needs字段建立任务依赖;4) 使用rules/only/except实现条件触发;5) 模板复用减少代码重复;6) 父子流水线实现多项目协作;7) 共享变量和缓存优化效率。这些功能使GitLab CI能够灵活适应复杂工作流需求,实现高效的持续集成与部署。
2025-06-25 19:26:34
434
原创 Android实时获取声音音量大小
摘要:本文介绍了三种Android平台获取实时音量的方法:1)使用AudioRecord获取原始音频数据并计算音量,适合需要精细处理的场景;2)通过Visualizer获取媒体播放音量,适用于音乐播放器应用;3)利用MediaRecorder的getMaxAmplitude方法测量麦克风输入。这三种方法都需要RECORD_AUDIO权限,且要注意动态权限检查。开发者应根据具体需求选择合适方案,并注意性能优化,如调整采样率和缓冲区大小。实现时需注意音量数值的归一化处理,以及资源消耗问题。
2025-06-24 09:07:38
349
原创 Android edge-to-edge兼容适配
Android应用Edge-toEdge适配关键要点:全面屏时代,Edge-toEdge适配能最大化利用屏幕空间,提升沉浸体验。核心配置包括设置透明系统栏和处理内容重叠。方法有:使用WindowInsetsController(API30+)或传统View适配方案;手势导航需避开敏感区域;沉浸模式可结合SYSTEM_UI_FLAG参数实现。兼容性方面需兼顾低版本API和厂商ROM特性。测试重点包括布局延伸、手势交互、图标可见性及转场效果。系统化实施这些策略,可实现高质量的Edge-toEdge适配,平衡视觉
2025-06-24 09:02:22
1338
原创 Ktor替代Feign及对比
Ktor作为Feign的替代方案,提供了基于Kotlin的轻量级HTTP客户端实现。相比Feign的注解式声明,Ktor采用DSL风格API和协程支持,更适合Kotlin异步编程。通过ktor-client-core等依赖可快速构建客户端,集成JSON序列化后能简洁处理请求响应。Ktor的优势在于原生Kotlin支持、灵活API和直接序列化集成,但需手动管理客户端生命周期。适合新Kotlin项目选用,若需兼容Java代码则要考虑混合调用方案。
2025-06-23 18:37:07
368
原创 Node鼠标键盘屏幕控制
RobotJS是Node.js的鼠标键盘控制库,支持基础操作和高级功能。可移动/点击鼠标(moveMouse/mouseClick)、输入文字/组合键(typeString/keyTap)、截取屏幕(screen.capture)及拖拽操作(dragMouse)。还能获取屏幕尺寸(getScreenSize)和模拟按键状态(keyToggle)。使用时需注意系统权限要求,macOS需辅助功能权限,Windows/Linux可能需要管理员权限,高分辨率下截图可能性能受限。安装简单:npminstallrobo
2025-06-23 18:22:30
604
原创 npm包冲突install失败
摘要:--legacy-peer-deps是npm v7+的安装选项,用于解决peerdependencies版本冲突问题。它通过放宽版本检查,适用于依赖冲突、旧项目维护和快速验证场景。使用时需注意可能引发运行时错误,建议作为临时方案。替代方案包括改用yarn/pnpm或手动指定版本。该选项体现了npm对依赖兼容性处理的灵活性,但长期仍需规范依赖管理。(149字)
2025-06-21 18:03:20
297
原创 使用Vue3开发Electorn桌面应用
摘要:本文介绍了Vue+Electron桌面应用开发的关键步骤。环境要求Node.js≥16,通过VueCLI和ElectronBuilder初始化项目。目录结构包含主进程、渲染进程和共享代码模块。配置主进程窗口属性,使用ipcMain/ipcRenderer实现进程通信。生产打包需调整vue.config.js,通过contextBridge安全调用原生API。调试时同时运行开发命令和构建命令,结合VueDevTools和Electron开发者工具。全文150字,涵盖环境搭建、项目结构、进程通信、打包配置
2025-06-21 15:02:39
169
原创 Electron 开发桌面应用概述
Electron是一个跨平台桌面应用开发框架,基于Chromium和Node.js,允许使用前端技术构建应用。环境搭建需安装Node.js和Electron,创建包含main.js、index.html和package.json的基础项目。Electron包含主进程(管理应用生命周期)和渲染进程(显示界面),通过IPC通信。开发时可使用Chromium工具调试,推荐electron-builder打包分发,并注意性能优化(如避免主进程阻塞、启用原生模块)。常见问题包括白屏、跨域和模块兼容性,通过路径检查、安
2025-06-21 15:00:44
306
原创 使用Node.js开发服务端接口
摘要:Node.js是开发高性能服务端接口的理想选择。主要步骤包括:1)选择框架(Express/Koa/Fastify);2)设置路由和处理请求数据;3)数据库集成(MongoDB/MySQL);4)错误处理和中间件应用;5)使用PM2部署服务;6)使用Postman或Jest进行测试。Express框架示例展示了创建服务、路由定义、数据解析等核心功能,Mongoose简化了MongoDB操作。合理运用中间件可实现日志记录、身份验证等功能,完整的开发流程能构建出稳定高效的服务端接口。(150字)
2025-06-21 14:47:52
296
原创 Android sdk 36沉浸式兼容性问题修复
Android的windowOptOutEdgeToEdgeEnforcement API允许应用选择退出系统的Edge-to-Edge全屏强制策略。该功能主要用于需要自定义窗口布局的特殊场景(如游戏、视频播放器等),让应用自行处理系统手势区域交互而非依赖系统自动调整。开发者需注意:启用后需手动监听WindowInsets调整内容布局,否则可能导致手势失效或内容遮挡。可通过主题或代码动态设置此标志,但应确保正确处理以维持用户体验。
2025-06-20 19:17:57
651
2
原创 Gradle上传依赖包到私有仓库
摘要:本文介绍了通过Gradle脚本将Android项目的.aar文件和模块上传至Maven仓库的配置方法。主要包括:1) 第三方.aar文件上传配置,使用maven-publish插件设置groupId、artifactId、version等参数;2) 项目模块上传配置,动态判断版本类型选择对应仓库地址;3) 自有项目的引用方式。配置支持HTTP协议并包含认证信息,实现了依赖的统一管理,解决了直接使用.aar文件带来的管理不便问题。文中提供了完整的脚本示例,包括仓库URL、账号密码等关键参数的配置说明。
2025-06-20 15:57:40
176
原创 Swift网络请求框架Moya介绍
Moya是一个Swift网络框架,基于Alamofire构建,提供类型安全的API定义和简洁的请求管理。核心功能包括:通过枚举定义端点路径、参数和方法;支持RxSwift和Combine的响应式编程;插件系统扩展日志、认证等功能;以及方便的测试模拟。使用示例展示了如何定义API服务、发起请求,并结合RxSwift和日志插件。Moya还支持Stubbing测试数据、多目标服务管理和自定义模型解析,是简化iOS网络层开发的实用工具。
2025-06-19 20:41:52
292
原创 swift结构体转字典方式
Swift中结构体转字典的三种方法:1)使用Codable协议,通过JSON编解码实现,适用于属性均为Codable类型;2)手动编写toDictionary方法,适合属性较少或需要定制转换的场景;3)利用Mirror反射机制动态生成字典,灵活性高但可能丢失类型信息。选择方法时应考虑结构体复杂度、性能需求及类型处理要求,Codable方案最通用,手动转换最可控,反射则最灵活。
2025-06-19 20:30:45
235
原创 KMP使用Exposed连接数据库
本文介绍了使用Ktor框架搭建后端服务并连接MySQL数据库的完整流程。主要技术栈包括Ktor、HikariCP连接池和Exposed ORM框架。文章详细说明了从项目创建、依赖配置到数据库表映射的步骤,重点讲解了如何使用Exposed进行CRUD操作和事务管理。通过示例展示了如何建立Users和Cities两张表的映射关系,并实现了数据初始化、查询及API接口开发。最后还提及了返回JSON格式数据和API二次封装的思路。该方案为Kotlin开发者提供了简洁高效的数据库访问方案。
2025-06-18 13:18:33
1488
原创 KMP开发后端服务+mysql数据查询
本文介绍了在KMP服务器项目中连接MySQL数据库的基本方法。首先使用Docker快速搭建MySQL环境,创建测试数据库和用户表。然后在KMP项目中添加MySQL驱动依赖,编写DBHelper类实现数据库连接和查询功能。通过在Ktor路由中添加"/getTest"接口,实现了从浏览器查询并返回数据库数据的功能。文章提供了完整的代码示例,包括数据库连接配置、SQL查询和API响应处理。最后指出后续将介绍使用Exposed组件简化数据库操作的方法。整个过程展示了从零开始构建KMP服务端连接M
2025-06-18 00:49:51
468
原创 Macbook如何关闭掉端口
摘要:当KMP应用的wasmJsweb服务关闭后端口仍被占用时,可通过命令快速查找并关闭进程。以8080端口为例,使用lsof -i tcp:8080查询占用进程的PID(如42093),再用kill -9 42093终止该进程。完成后端口释放,服务不可访问。该方法简便高效,适用于解决IDE关闭后端口仍被占用的问题。(98字)
2025-06-18 00:05:34
329
原创 Kotlin开发服务端怎么连接数据库
在Kotlin中通过JDBC连接数据库需要添加相关驱动依赖。以MySQL为例,需在。为提高性能,推荐使用连接池管理数据库连接。Exposed是Kotlin生态中流行的SQL框架。
2025-06-17 20:18:14
267
原创 使用Kotlin开发后端服务的核心方法
Kotlin后端开发常用框架包括Spring Boot、Ktor和Micronaut。Spring Boot生态成熟,适合企业级应用;Ktor轻量且协程友好,适合高性能异步服务;Micronaut以低内存占用和快速启动见长。结合JPA或Exposed库处理持久化。使用协程替代传统线程池。通过Gradle或Maven初始化项目。Gradle推荐使用。通过注解或DSL定义端点。利用Kotlin扩展函数和协程简化代码。JUnit 5配合Kotest进行单元测试。编译选项提升接口调用效率。针对高并发场景,使用。
2025-06-17 20:14:02
305
原创 Objective-C与Swift混合编程
Objective-C与Swift混合编程是指在同一项目中同时使用两种语言进行开发。新建一个Swift文件时,Xcode会提示是否创建桥接文件,选择“Create Bridging Header”。Objective-C使用手动引用计数(MRC)或自动引用计数(ARC),Swift使用ARC。频繁的Swift与Objective-C调用可能带来性能开销。Swift调用Objective-C代码时,将Objective-C头文件导入桥接文件。,用于导入需要暴露给Swift的Objective-C头文件。
2025-06-16 12:46:47
705
原创 本地Nginx解决跨域问题
摘要:本文介绍了如何使用Docker安装Nginx并通过配置代理解决本地开发中的跨域问题。针对Web应用调试时受同源策略限制的情况,作者建议使用Nginx代理转发请求,特别是针对KMP wasmJs等特殊开发场景。文章详细演示了Docker部署Nginx的方法,并以百度搜索为例,展示了两种配置方案:普通请求转发和跨域资源访问,通过在Nginx配置中添加CORS响应头实现跨域访问。这种方法灵活高效,不污染本地环境,适用于API、静态资源等多种跨域场景。
2025-06-16 12:12:07
1400
原创 KMP(Kotlin Multiplatform)发布Web版本乱码
最近用KMP尝试运行在Android、iOS、desktop都成功了,网络数据访问也正常。可是当运行wasmJs的时候遇到了2个较大的问题。中文字体出现乱码。出现了跨域问题。首先贴一下每个平台的运行截图:当web跑起来的时候,令人震惊的事情发生了😭除了数字,其他的文字都不显示。猜测是字体的问题,wasmJs可能还没有内置默认字体,导致字体显示乱码。观察浏览器控制台api访问的数据都成功拿到,但所有图片资源被跨域拦截。目前没有找到关于wasm提供像Vue一样的本地代理跨域的方案。既然是字体导致的,那就找一个
2025-06-15 22:11:52
512
原创 KMP(Kotlin Multiplatform)简单动画
KMP动画组件实现服务卡片展开效果 摘要:本文介绍了使用KMP动画组件实现服务卡片的平滑展开效果。通过AnimatedVisibility组件,结合slideInVertically和expandVertically动画,实现了点击"可选服务"时卡片内容的优雅展开。关键点包括: 使用AnimatedVisibility控制显示隐藏,并自定义enter/exit动画 通过remember保存展开状态 点击事件切换showContent状态触发动画 移除了默认的水波纹点击效果 该方法解决了直
2025-06-15 20:27:40
302
Xcode升级缺失的arc库
2025-06-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人