Android h3:六角形分层地理空间索引系统

Siv*_*Siv 5 android uber-api h3

我想将h3 java绑定库集成到我的android应用中,并且出现以下异常:

java.lang.UnsatisfiedLinkError:在/android-armv7l/libh3-java.so上com.uber.h3core.H3CoreLoader.copyResource(H3CoreLoader.java:67)找不到本地资源

之前有人在Android OS上使用过此库吗?

谢谢。

AL.*_*AL. 3

最初,遵循自述文件中的预期用法应该可以使其工作。如果没有,请参阅下文。

已知问题:Android,无法使用库

UnsatisfiedLinkError:当项目中没有复制/检测到相应的本机库时,可能会遇到这种情况。遵循NickRadu 的解决方法应该可以使其发挥作用。以下是分步指南。

  1. 在项目应用程序文件夹中添加一个 JNI 文件夹并将其重命名jniLibs( app/src/main/jniLibs)(出于某种原因,仅命名它对jni我来说不起作用)。
  2. 获取 H3 JAR(确保使用相同版本)并提取 JAR 内容。
  3. 复制前缀为 的文件夹android-并将其插入该jniLibs文件夹(来自步骤 1)。
  4. 重命名复制的文件夹,删除android-前缀。
  5. 添加splits { abi { enable false } }到应用程序的 build.gradle 文件(在 内android)。

完毕。一般来说,该库现在应该按预期工作。

如果您在安装应用程序时遇到:

  • INSTALL_FAILED_NO_MATCHING_ABIS,然后根据您的测试设备,创建该文件夹的副本(及其内容)并根据需要重命名。例如,运行在arm64-v8a上的设备,我只是复制了该arm64文件夹并将其重命名为arm64-v8a. 或者,如果您使用的是模拟器,请确保您使用的不是带有x86CPU 的模拟器。

  • D8 errors: Invoke-customs are only supported starting with Android O (--min-api 26),在应用程序的 build.gradle 中添加这些编译选项(请android注意,它可能会根据系统的 Java 版本而变化)

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    
    Run Code Online (Sandbox Code Playgroud)

注意:最好首先在多种 CPU 架构类型上测试应用程序,以了解其行为。

要快速查看设备的 CPU 架构,您可以安装Droid Hardware Info,或者自己运行快速测试代码

这是我使用的一个测试块及其相应的结果日志:

private fun testH3() {
    val h3 = H3Core.newSystemInstance()

    val lat = 37.775938728915946
    val lng = -122.41795063018799
    val resolution = 8

    val hexAddr = h3.geoToH3Address(lat, lng, resolution)
    val hex = h3.stringToH3(hexAddr)
    val kRingsResult = h3.kRings(hexAddr, 1)

    Log.d("H3Test", "geoToH3Address: $hexAddr")
    Log.d("H3Test", "stringToH3: $hex")
    Log.d("H3Test", "kRings: $kRingsResult")
}
Run Code Online (Sandbox Code Playgroud)

结果:

D/H3Test: geoToH3Address: 8828308281fffff
D/H3Test: stringToH3: 613196570331971583
D/H3Test: kRings: [[8828308281fffff], [8828308281fffff, 882830828dfffff, 8828308285fffff, 8828308287fffff, 8828308283fffff, 882830828bfffff, 8828308289fffff]]
Run Code Online (Sandbox Code Playgroud)

我制作了一个示例项目,其中库按预期工作。看android-uber-h3-sample