You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下Android Studio Flamingo/Giraffe构建SQLite依赖报错求助

解决Android Studio Flamingo/Giraffe构建SQLite权限与DAO编译问题

问题背景

项目在Android Studio Electric Eel(Windows 11)上可正常构建,未修改代码的情况下,使用Flamingo/Giraffe版本构建时出现两类问题:

  1. 普通权限运行AS时,编译报错:

    java.io.FileNotFoundException: C:\WINDOWS\sqlite-3.36.0-xxxx-sqlitejdbc.dll.lck (Accès refusé)
    

    根源是SQLiteJDBCLoader无法找到对应本地库,且无权限在C:\WINDOWS目录生成锁文件,每次构建的DLL后缀ID随机变化,现有DLL无法匹配。

  2. 管理员权限运行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)生成文件,改为使用用户有权限的目录:

  1. 修改Gradle全局配置
    在C:\Users\<你的用户名>\.gradle\gradle.properties中添加以下配置:

    org.gradle.jvmargs=-Dorg.sqlite.tmpdir=C:\Users\<你的用户名>\AppData\Local\Temp
    

    该配置指定SQLite临时文件的存储目录为用户临时文件夹,避免写入系统目录触发权限问题。

  2. 禁用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的低版本处理器下可通过:

  1. 锁定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"
    }
    
  2. 适配DAO代码至新版本Room要求
    若需升级Room版本,需修改DAO代码以符合新校验规则:

    • DELETE方法必须返回void或int(删除行数),替换返回Object的写法;
    • 确保DAO方法的参数类型可直接映射为数据库列类型,若使用自定义类型,需添加Room Type Converter实现类型适配。

验证步骤

  1. 关闭Android Studio,删除项目的.gradle、build目录;
  2. 应用上述配置后,以普通权限重新打开Android Studio,执行Clean Project -> Rebuild Project;
  3. 若仍有问题,检查Gradle同步日志,确认Room版本和JVM参数已生效。

内容的提问来源于stack exchange,提问作者Guillaume Beguin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 05:35:27