Kuikly 开发遇到的坑
2025年7月14日 14:25
Kuikly是基于Kotlin MultiPlatform(KMP)构建的跨端开发框架, 支持Android、iOS、HarmonyOS和H5/小程序等多个平台, 据 PCG 开发团队的报告, Kuikly 可以提升团队 85%的开发效率.
这里记录一些我自己使用 Kuikly 遇到的一些坑, 希望后面能少点踩坑吧.
- 热重载显示成功, 但是实际并没有成功
- iOS 使用热重载开发, 会需要手机挂 http 代理到开发的电脑上, 如果忘记这一步(或者因为别的什么事情把代理关掉了), 手机上仍然会提示热重载成功, 但实际只是从内置 bundle 加载成功, 并不是从开发电脑加载成功, 遇到这种疑问记得确认下这个代理是不是挂上了
- iOS 源码引入 Kuikly, 使用 XCode 调试 Kuikly 代码 (除了热重载的另一种开发模式)但是报错
B(l) ARM64 branch out of range (134218124 max is +/-128MB): from
- Kuikly 工程太大, 导致程序的代码段过大, 导致的链接错误, 可能需要修改 Kuikly 代码
- 某些 case, 图片 ImageView 匹配上了错误的 url, 导致图片显示出错
- Kuikly 为了性能 对图片做了复用, 我们又接管了 Kuikly 图片的下载, 所以在下载完成后需要校验url是不是还能匹配上这个 KRImageView:
-
NSString *curUrl = SAFE_CAST([imageView valueForKey:@"css_src"], NSString) ;
然后再跟当前的url比较下
- iOS 产物打包失败, 但是安卓成功, 需要修改 gradle 的编译内存大小设置, 可能是内存不够
- 热重载模式下, 单例不能用私有变量(属性)记录值, 比如记录生命周期点击次数,
- 因为单例会在热重载模式下重新生成一个实例,
- 考虑到线上热修复实际也是使用的热重载模式, 建议还是不要使用单例的私有变量记录
- 本地缓存双端实现不一致, iOS 缓存默认做了一个与用户 id 绑定的逻辑, 安卓没做
- 控制台重复输出, 点击一下, Mac 上的”控制台”app 输出了 5 条一样的日志, 误以为是代码执行了 5 次, 但是 Xcode 显示日志又只有一次, 重启”控制台” app 恢复正常
- iOS 热重载偶现报错,
-
./kuiklyw run
执行后, 还要在按一下i
, 切换到 iOS 的热重载, 默认是安卓
-
- toInt() / toLong() 崩溃
- kotlin 中
toInt() / toLong()
, kotlin 非数字字符串 不能转成数字会抛异常. 应该使用toLongOrNull
, 转不了会返回null
- kotlin 中
-
Switch
组件(系统默认的开关), 连续设置值后, 在 iOS 表现正常, 但是在安卓丢失了背景色导致整个组件都不可见- 最后一次修改 改为延迟修改