【问题标题】:Android Room + Kotlin + Kapt + IntelliJ + MacOS Catalina: java.lang.UnsatisfiedLinkError: org.sqlite.core.NativeDB._open_utf8Android Room + Kotlin + Kapt + IntelliJ + MacOS Catalina: java.lang.UnsatisfiedLinkError: org.sqlite.core.NativeDB._open_utf8
【发布时间】:2020-07-17 23:21:17
【问题描述】:

在 MacOS Catalina 上使用带有 Kapt 的 Android Room,我在构建项目时遇到以下错误。如果我从 build.gradle 中删除 kapt "androidx.room:room-compiler:$room_version",项目将成功构建。

Failed to load native library:sqlite-3.25.2-60e239c7-424b-4b75-bfd5-b2df4aa8e01a-libsqlitejdbc.jnilib. osinfo: Mac/x86_64
java.lang.UnsatisfiedLinkError: $TMPDIR/sqlite-3.25.2-60e239c7-424b-4b75-bfd5-b2df4aa8e01a-libsqlitejdbc.jnilib: dlopen($TMPDIR/sqlite-3.25.2-60e239c7-424b-4b75-bfd5-b2df4aa8e01a-libsqlitejdbc.jnilib, 1): no suitable image found.  Did find:
    $TMPDIR/sqlite-3.25.2-60e239c7-424b-4b75-bfd5-b2df4aa8e01a-libsqlitejdbc.jnilib: code signature in ($TMPDIR/sqlite-3.25.2-60e239c7-424b-4b75-bfd5-b2df4aa8e01a-libsqlitejdbc.jnilib) not valid for use in process using Library Validation: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.
Failed to load native library:sqlite-3.25.2-79b61bc4-bdd0-4451-a523-5baa49728398-libsqlitejdbc.jnilib. osinfo: Mac/x86_64
java.lang.UnsatisfiedLinkError: $TMPDIR/sqlite-3.25.2-79b61bc4-bdd0-4451-a523-5baa49728398-libsqlitejdbc.jnilib: dlopen($TMPDIR/sqlite-3.25.2-79b61bc4-bdd0-4451-a523-5baa49728398-libsqlitejdbc.jnilib, 1): no suitable image found.  Did find:
    $TMPDIR/sqlite-3.25.2-79b61bc4-bdd0-4451-a523-5baa49728398-libsqlitejdbc.jnilib: code signature in ($TMPDIR/sqlite-3.25.2-79b61bc4-bdd0-4451-a523-5baa49728398-libsqlitejdbc.jnilib) not valid for use in process using Library Validation: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.

这会产生以下异常

Caused by: java.lang.UnsatisfiedLinkError: org.sqlite.core.NativeDB._open_utf8([BI)V
    at org.sqlite.core.NativeDB._open_utf8(Native Method)
    at org.sqlite.core.NativeDB._open(NativeDB.java:78)
    at org.sqlite.core.DB.open(DB.java:195)
    at org.sqlite.SQLiteConnection.open(SQLiteConnection.java:243)
    at org.sqlite.SQLiteConnection.<init>(SQLiteConnection.java:61)
    at org.sqlite.jdbc3.JDBC3Connection.<init>(JDBC3Connection.java:28)
    at org.sqlite.jdbc4.JDBC4Connection.<init>(JDBC4Connection.java:21)
    at org.sqlite.JDBC.createConnection(JDBC.java:116)
    at androidx.room.verifier.DatabaseVerifier$Companion.create(DatabaseVerifier.kt:104)
    at androidx.room.processor.DatabaseProcessor.doProcess(DatabaseProcessor.kt:82)
    at androidx.room.processor.DatabaseProcessor.process(DatabaseProcessor.kt:57)
    at androidx.room.RoomProcessor$DatabaseProcessingStep.process(RoomProcessor.kt:134)
    at com.google.auto.common.BasicAnnotationProcessor.process(BasicAnnotationProcessor.java:330)
    at com.google.auto.common.BasicAnnotationProcessor.process(BasicAnnotationProcessor.java:181)
    at org.jetbrains.kotlin.kapt3.base.incremental.IncrementalProcessor.process(incrementalProcessors.kt)
    at org.jetbrains.kotlin.kapt3.base.ProcessorWrapper.process(annotationProcessing.kt:147)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:985)
    ... 39 more

看起来这与https://github.com/xerial/sqlite-jdbc/issues/97 不同,这是我能找到任何相关信息的唯一问题。有没有办法解决这个问题?

编辑:

我最终找到了this blog post,这让我找到了this JDK issue。我验证了 ./gradlew :app:kaptDebugKotlin 与我的 JDK11 一起使用,并更新了 IDEA 以使用该 JDK 作为运行时,并告诉它使用 gradle 而不是 IDEA 执行构建。这些似乎都没有解决问题 - 在我的终端中使用 JDK11 运行 ./gradlew clean :app:kaptDebugKotlin 成功,但通过 IDEA 运行该 gradle 任务失败。

我最终解决了这个问题,方法是从我的运行配置中删除 gradle-aware make,并在每次对应用程序进行更改时运行 ./gradlew :app:assembleDebug。这有点烦人并增加了一个额外的步骤,但我仍然可以运行/更新应用程序。

【问题讨论】:

标签: android sqlite kotlin intellij-idea kapt


【解决方案1】:

想通了 - 原来 Java SDKGradle 设置在 Android 项目中被忽略了,而 Android SDK 中的 Java SDK 用于 gradle 任务。将Android SDKJava SDK 设置为JDK11 解决了这个问题,因为JDK 修复了JDK-8223671

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    相关资源
    最近更新 更多