kotlin安卓应用打包编译卡死的可能原因

运行这个命令后,经常卡到88%或者94%这种位置,每次都卡在:app:kspAppMaxDebugKotlin,在编译前段Gradle会先执行KSP任务(比如 kspDebugKotlin),也就是说ksp解析就没过。

在这个过程中

它做什么:

1.扫描你代码里的注解(比如 @Entity、@Parcelize),然后生成一堆新的 .kt 文件(比如 UserDao_Impl.kt)。

2.它不管什么:它不负责把 .kt 转成 .class,也不负责资源合并、签名、压缩这些事。

再加上我之前正好在Dao文件加了几个非常非常长SQL语句, 有 30 多个 or like

Room 编译时会生成一个极其复杂的查询计划。对于 SQLite 来说,这种写法会触发 "too many terms in compound SELECT" 之类的内部限制(虽然 SQLite 本身没有硬性限制,但 Room 的代码生成器会对 or 嵌套层级有限制)。

更重要的是,这种全字段模糊搜索在 Android 上根本不可行:

1.30 个 or like全部无法使用索引,全表扫描,每搜索一次都要扫描几千条记录。

2.搜索 30 个字段,每条记录要读取 30 个文本字段到内存进行比较

3.这个 Dao 被多个表使用,每个表都有类似查询,编译时间成倍增长

几十个or like会导致某些版本的 Room parser 会进入指数级分析,可能造成 Room Sql Parser 死循环,真是基础不行地动山摇。

还有一种可能是Room 在推导返回类型,例如:

fun searchAllFieldsAll(): List

Room 会检查:

每一列

nullable

converter

entity

SQL 越长:

SELECT *

虽然最终还是 Entity,

但是解析树非常大。

下面是卡住的情况

.\gradlew.bat assembleAppDebug

Task :app:stripAppDebugDebugSymbols

Unable to strip the following libraries, packaging them as they are: libandroidx.graphics.path.so, libarchive-jni.so, libimage_processing_util_jni.so, librenderscript-toolkit.so, librtmp-jni.so, libsurface_util_jni.so. Run with --info option to learn more.

<===========--> 88% EXECUTING 2m 31s

IDLE

IDLE

IDLE

IDLE

:app:kspAppMaxDebugKotlin

IDLE

相关推荐
平头哥AI1 天前
Day 22 _ 包装错误别丢链_%w、errors.Is 与 errors.As
android·服务器·学习·golang·go
聚美智数1 天前
图片广告检测-图片审核-图片广告识别-图像广告检测
android
早睡早起身体好1231 天前
用 XGrammar 约束大模型工具调用:解决参数为空的问题
android·人工智能·神经网络·机器学习·自然语言处理·vllm
大佐不会说日语~1 天前
Android 16 下 uni-app APP 提示“网络连接失败”的排障与修复
android·uni-app
2501_915106321 天前
苹果App Store上架费用及流程全面解析
android·ios·小程序·https·uni-app·iphone·webview
YF02111 天前
Android 16系统App开机自启动方案
android
hm宋1 天前
安卓手机卡顿优化 —— 背景与使用指南
android
OxYGC1 天前
[Android] [WatchOS]智能手表第一篇: 实用工具与应用推荐
android·智能手表
嘟哩DuliDuli1 天前
创作 Agent 的任务状态该如何保存
android·java·javascript