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

相关推荐
石山代码17 小时前
KMP全栈开发:从Android到AI Agent的技术演进与实践
android·人工智能
plainGeekDev19 小时前
NullPointerException → Kotlin 空安全
android·java·kotlin
2501_9160088921 小时前
苹果上架工具怎么选 不用 Mac 上架 App Store 的几种方案
android·macos·ios·小程序·uni-app·iphone·webview
jijihusong0061 天前
KMP全栈开发教程:从Android到AI Agent
android·人工智能
_祝你今天愉快1 天前
Android Binder 驱动 - 内核驱动层源码初探
android
stevenzqzq1 天前
【无标题】
android
梦幻通灵1 天前
Notepad++格式化Json两种方案【持续更新】
android·json·notepad++
1024+1 天前
YOLO 转 RKNN 识别率降低调优操作手册(新手篇)
android·yolo·kotlin
木易 士心1 天前
深度解析 Android 音频焦点处理与实战开发
android·音视频