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

kotlin安卓应用打包编译卡死的可能原因 运行这个命令后经常卡到88%或者94%这种位置每次都卡在:app:kspAppMaxDebugKotlin在编译前段Gradle会先执行KSP任务比如 kspDebugKotlin也就是说ksp解析就没过。在这个过程中它做什么1.扫描你代码里的注解比如 Entity、Parcelize然后生成一堆新的 .kt 文件比如 UserDao_Impl.kt。2.它不管什么它不负责把 .kt 转成 .class也不负责资源合并、签名、压缩这些事。再加上我之前正好在Dao文件加了几个非常非常长SQL语句 有 30 多个 or likeRoom 编译时会生成一个极其复杂的查询计划。对于 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(): ListRoom 会检查每一列nullableconverterentitySQL 越长SELECT *虽然最终还是 Entity但是解析树非常大。下面是卡住的情况.\gradlew.bat assembleAppDebugTask :app:stripAppDebugDebugSymbolsUnable 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]IDLEIDLEIDLEIDLE:app:kspAppMaxDebugKotlinIDLE