Windows环境下Expo-updates构建Android应用失败问题求助
Expo Android构建失败:SQLite锁文件权限问题
安装并配置expo-updates后,构建Android版本时失败,核心问题是SQLite尝试在Windows系统目录(C:\WINDOWS)创建锁文件时被拒绝访问。已尝试删除android目录、清理Gradle缓存、更换JDK及修改Java临时目录,均未解决问题。
报错信息如下:
> Task :expo-updates:kaptDebugKotlin java.io.FileNotFoundException: C:\WINDOWS\sqlite-3.36.0-93068ff4-a0a7-44a0-bc91-2fc763079ab2-sqlitejdbc.dll.lck (Access is denied) at java.base/java.io.FileOutputStream.open0(Native Method) at java.base/java.io.FileOutputStream.open(FileOutputStream.java:293) at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:235) at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:184) at org.sqlite.SQLiteJDBCLoader.extractAndLoadLibraryFile(SQLiteJDBCLoader.java:210) at org.sqlite.SQLiteJDBCLoader.loadSQLiteNativeLibrary(SQLiteJDBCLoader.java:366) at org.sqlite.SQLiteJDBCLoader.initialize(SQLiteJDBCLoader.java:68) at androidx.room.verifier.DatabaseVerifier.<clinit>(DatabaseVerifier.kt:70) at androidx.room.processor.DatabaseProcessor.doProcess(DatabaseProcessor.kt:82) at androidx.room.processor.DatabaseProcessor.process(DatabaseProcessor.kt:61) at androidx.room.DatabaseProcessingStep$process$databases$1$1.invoke(DatabaseProcessingStep.kt:79) at androidx.room.DatabaseProcessingStep$process$databases$1$1.invoke(DatabaseProcessingStep.kt:75) at androidx.room.processor.Context.collectLogs(Context.kt:149) at androidx.room.DatabaseProcessingStep.process(DatabaseProcessingStep.kt:75) at androidx.room.DatabaseProcessingStep.process(DatabaseProcessingStep.kt:42) at androidx.room.compiler.processing.CommonProcessorDelegate.processRound(XBasicAnnotationProcessor.kt:122) at androidx.room.compiler.processing.javac.JavacBasicAnnotationProcessor.process(JavacBasicAnnotationProcessor.kt:71) at org.jetbrains.kotlin.kapt3.base.incremental.IncrementalProcessor.process(incrementalProcessors.kt:90) at org.jetbrains.kotlin.kapt3.base.ProcessorWrapper.process(annotationProcessing.kt:197) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:1023) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:939) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1267) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1382) at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1234) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing(annotationProcessing.kt:90) at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing$default(annotationProcessing.kt:31) at org.jetbrains.kotlin.kapt3.base.Kapt.kapt(Kapt.kt:47) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.jetbrains.kotlin.gradle.internal.KaptExecution.run(KaptWithoutKotlincTask.kt:310) at org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction.execute(KaptWithoutKotlincTask.kt:256) at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63) at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:54) at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:48) at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:100) at org.gradle.workers.internal.AbstractClassLoaderWorker.executeInClassLoader(AbstractClassLoaderWorker.java:48) at org.gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:49) at org.gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:30) at org.gradle.workers.internal.WorkerDaemonServer.run(WorkerDaemonServer.java:96) at org.gradle.workers.internal.WorkerDaemonServer.run(WorkerDaemonServer.java:65) at org.gradle.process.internal.worker.request.WorkerAction$1.call(WorkerAction.java:138) at org.gradle.process.internal.worker.child.WorkerLogEventListener.withWorkerLoggingProtocol(WorkerLogEventListener.java:41) at org.gradle.process.internal.worker.request.WorkerAction.lambda$run$0(WorkerAction.java:135) at org.gradle.internal.operations.CurrentBuildOperationRef.with(CurrentBuildOperationRef.java:80) at org.gradle.process.internal.worker.request.WorkerAction.run(WorkerAction.java:127) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182) at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164) at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:840) > Task :expo-updates:kaptDebugKotlin FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':expo-updates:kaptDebugKotlin'. > A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction > java.lang.reflect.InvocationTargetException (no error message)
可行解决方案
- 设置SQLite临时目录环境变量:新建系统环境变量
SQLITE_TMPDIR,值设为你有权限读写的目录(比如C:\Users\你的用户名\AppData\Local\Temp\SQLiteTemp),创建该目录后重启终端再执行构建。 - 指定Gradle临时目录:在项目根目录的
gradle.properties文件中添加一行:org.gradle.jvmargs=-Djava.io.tmpdir=C:\Users\你的用户名\AppData\Local\Temp\GradleTemp,强制Gradle使用用户目录下的临时文件夹。 - 调整Room数据库验证参数:在
android/build.gradle的defaultConfig块中添加Room的注解处理器参数,指定临时文件路径:android { defaultConfig { javaCompileOptions { annotationProcessorOptions { arguments += [ "room.incremental": "true", "room.tempDir": "${project.buildDir}/room-temp" ] } } } } - 匹配expo-updates与SDK版本:检查expo-updates版本是否和当前Expo SDK版本兼容,尝试升级或降级到对应稳定版本(比如SDK 49对应expo-updates ~0.18.19)。
- 管理员身份运行构建:右键终端选择“以管理员身份运行”,执行构建命令验证是否为系统权限限制导致,这是临时验证方案,不建议长期使用。
内容的提问来源于stack exchange,提问作者OliB
相关产品推荐
相关产品推荐

