当前位置: 首页 > 知识库问答 >
问题:

找到多个具有操作系统独立路径“lib/armeabi-v7a/libarcore_sdk_jni.so”的文件

翟承志
2023-03-14

我知道有几个类似的问题,但这对我不起作用...

我创建了使用ARCore Android库。这是一个关于如何不包含.SO文件的问题,如果我使用创建的ndk库?还有一个答案听起来是对的

https://stackoverflow.com/A/58963852/5709159

所以,我试着用这种方法来解决

https://stackoverflow.com/A/44962630/5709159

sourceSets.main {
        jniLibs.srcDir 'src/main/jniLibs'
        jni.srcDirs = [] //disable automatic ndk-build call
    }

https://stackoverflow.com/A/5453718/5709159

packagingOptions {
    pickFirst 'src/main/jniLibs/arm64-v8a/libarcore_sdk_jni.so'
    pickFirst 'src/main/jniLibs/armeabi-v7a/libarcore_sdk_jni.so'
    pickFirst 'src/main/jniLibs/x86/libarcore_sdk_jni.so'
    pickFirst 'src/main/jniLibs/x86_64/libarcore_sdk_jni.so'
}
packagingOptions {
    pickFirst 'lib/arm64-v8a/libarcore_sdk_jni.so'
    pickFirst 'lib/armeabi-v7a/libarcore_sdk_jni.so'
    pickFirst 'lib/x86/libarcore_sdk_jni.so'
    pickFirst 'lib/x86_64/libarcore_sdk_jni.so'
}

那么,如何修复呢?

共有1个答案

常永长
2023-03-14

您可能添加了共享的.so文件,并从源代码生成(或以其他方式引用它们)。

不能同时执行这两个操作,因此您需要从源代码处构建并删除那些.so文件,或者删除arcore-android-sdk模块并保留.so文件。Javadependencies也可能引入本机程序集,而build.gradle的那部分缺少(只需在“外部库”中浏览AR core,查看它包含的内容,以防它存在)。使用预构建库通常构建得更快并节省时间--这是建议的,除非需要编辑cpp源代码。

通常可以在以下build.gradle中提供类似的依赖关系:

dependencies {
    implementation "com.google.ar:core:1.13.0"
    natives "com.google.ar:core:1.13.0"
}

// Extracts the shared libraries from aars in the natives configuration.
// This is done so that NDK builds can access these libraries.
task extractNativeLibraries() {
    // Always extract, this ensures the native libs are updated if the version changes.
    outputs.upToDateWhen { false }
    doFirst {
        configurations.natives.files.each { f ->
            copy {
                from zipTree(f)
                into arcore_libpath
                include "jni/**/*"
            }
        }
    }
}

tasks.whenTaskAdded {
    task-> if (task.name.contains("external") && !task.name.contains("Clean")) {
        task.dependsOn(extractNativeLibraries)
    }
}

这样的Gradle任务也可能是重复的原因,当它配置不正确时。packagingoptions在任何情况下都是错误的方法,因为链接器已经不知道要链接哪个。

 类似资料: