Windows下Android Studio Flamingo/Giraffe构建SQLite依赖报错求助
问题背景
项目在Android Studio Electric Eel(Windows 11)上可正常构建,未修改代码的情况下,使用Flamingo/Giraffe版本构建时出现两类问题:
普通权限运行AS时,编译报错:
java.io.FileNotFoundException: C:\WINDOWS\sqlite-3.36.0-xxxx-sqlitejdbc.dll.lck (Accès refusé)根源是SQLiteJDBCLoader无法找到对应本地库,且无权限在C:\WINDOWS目录生成锁文件,每次构建的DLL后缀ID随机变化,现有DLL无法匹配。
管理员权限运行AS时,SQLite权限问题解决,但所有DAO文件出现编译错误:
error: Not sure how to handle query method's return type (java.lang.Object). DELETE query methods must either return void or int (the number of deleted rows). error: Query method parameters should either be a type that can be converted into a database column or a List / Array that contains such type. You can consider adding a Type Adapter for this.
解决方案
一、解决SQLite权限问题(无需管理员权限)
核心是避免SQLiteJDBCLoader在系统目录(C:\WINDOWS)生成文件,改为使用用户有权限的目录:
修改Gradle全局配置
在C:\Users\<你的用户名>\.gradle\gradle.properties中添加以下配置:org.gradle.jvmargs=-Dorg.sqlite.tmpdir=C:\Users\<你的用户名>\AppData\Local\Temp该配置指定SQLite临时文件的存储目录为用户临时文件夹,避免写入系统目录触发权限问题。
禁用Room编译时数据库验证
如果上述方法无效,可关闭Room的编译时数据库验证(仅建议临时使用,长期需确保数据库结构正确):
在模块的build.gradle(或build.gradle.kts)中添加:android { defaultConfig { javaCompileOptions { annotationProcessorOptions { arguments += ["room.incremental": "false"] arguments += ["room.schemaLocation": "$projectDir/schemas"] arguments += ["room.verifyQueries": "false"] } } } }其中
room.verifyQueries=false会关闭编译时的SQL验证,避免加载SQLite本地库。
二、解决管理员模式下的DAO编译问题
管理员模式下的DAO错误,本质是新版本Android Studio(Flamingo/Giraffe)默认使用的Gradle插件/Room注解处理器版本更高,对DAO代码的校验更严格,而旧代码在Electric Eel的低版本处理器下可通过:
锁定Room依赖版本
检查项目中Room相关依赖,确保使用与Electric Eel时一致的版本。例如,若Electric Eel时使用Room 2.4.3,在build.gradle中明确指定:dependencies { def room_version = "2.4.3" implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" // 若使用Kotlin则用kapt替代annotationProcessor // kapt "androidx.room:room-compiler:$room_version" }适配DAO代码至新版本Room要求
若需升级Room版本,需修改DAO代码以符合新校验规则:- DELETE方法必须返回
void或int(删除行数),替换返回Object的写法; - 确保DAO方法的参数类型可直接映射为数据库列类型,若使用自定义类型,需添加Room Type Converter实现类型适配。
- DELETE方法必须返回
验证步骤
- 关闭Android Studio,删除项目的
.gradle、build目录; - 应用上述配置后,以普通权限重新打开Android Studio,执行Clean Project -> Rebuild Project;
- 若仍有问题,检查Gradle同步日志,确认Room版本和JVM参数已生效。
内容的提问来源于stack exchange,提问作者Guillaume Beguin

