在 Gradle 期间在 MacBook Pro M1 上构建 SQLite 数据库时出现错误

Prepopulating SQLite database during Gradle build on MacBook Pro M1 gives error

我的工作 Gradle 构建,对于一个 Android 项目,在使用 Apple Silicon (M1 Pro) 时开始无法编译。它给出的错误如下:

Execution failed for task ':persistence-database:createDatabase'.
> java.sql.SQLException: Error opening connection
No native library is found for os.name=Mac and os.arch=aarch64. path=/org/sqlite/native/Mac/aarch64

我的项目设置与此类似 guide and sample 以在 Gradle 构建期间预填充 Room 数据库。

为此,我使用 sqlite-jdbc 驱动程序打开 SQLite 数据库,以便在使用任务执行之前填充一些数据。连接是这样完成的:

private fun openSQL(dbFile: File, schemaFile: File, logger: Logger) = 
   Sql.newInstance("jdbc:sqlite:$dbFile", "org.sqlite.JDBC").apply {
                          ...
   }
}

通过快速 Google 搜索,我发现潜在的问题似乎来自所使用的 xerial jdbc-sqlite 驱动程序的不兼容性。他们似乎在 3.32.3.3. This was also fixed in Room in version 2.4.0-alpha03 版本中添加了支持,我也在使用该版本。我不明白的是,即使更新到该版本或更高版本(当前使用最新的 3.36.0.3)仍然给我同样的 No native library is found 错误。

知道会发生什么或者我遗漏了什么吗?

提前致谢!

TLDR:使用 x64 version of Java 到 Rosetta 2 使 jdbc-sqlite 在基于 M1 的 macOS 上工作。

所以...在尝试了一切之后,包括黑魔法,看起来解决它的唯一方法是使用 Java 的 x86_64 构建到 运行 此代码.我仍然不太明白其背后的原因,但这是制作此构建的唯一一致方法。

为了不影响速度,您通常可以使用捆绑的 java 版本进行正常编译,并将 x86_64 Java 作为终端中的默认版本,以便在以下情况下使用它您再次看到此错误。希望他们可以在 Java 的 ARM 版本中尽快解决这个问题...

更新:这是由强制使用过时版本的 jdbc-sqlite 驱动程序的不同依赖项引起的,配置该插件后问题似乎已解决。