/lib/arm64, /vendor/lib64, /system/lib64 couldn't find "libstlport_shared.so"

本文介绍了解决部分64位处理器手机因找不到特定的so文件而导致的java.lang.UnsatisfiedLinkError错误的方法。通过配置Gradle属性及在build.gradle中设置abiFilters,确保应用程序能在不同架构的设备上正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当引用so文件时,部份手机会报这个错

 java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.hx.template-2/base.apk"],nativeLibraryDirectories=[/data/app/com.hx.template-2/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libstlport_shared.so"

原因是这部份手机是64位处理器的,所以找so的时候先从/lib/arm64, /vendor/lib64, /system/lib64这几个目录找。
解决方法:
在gradle.properties加上

android.useDeprecatedNdk=true

build.gradle加上

android {
    ...
    defaultConfig {
        ...
        ndk {
            abiFilters "armeabi-v7a", "x86", "armeabi"
        }
    }
}

感谢:http://www.jianshu.com/p/7fa8392c2f1c 提出的解决方法

在JNI中使用vendor/lib64中的libc++_shared.so通常涉及以下几个步骤: 1. 确认目标设备支持使用libc++_shared.so。通常,这个.so文件是C++运行时库的一部分,需要确保目标平台支持它。 2. 在项目的build.gradle文件中添加对libc++_shared.so的引用。这通常涉及到配置CMake或者ndk-build脚本来指定库的路径。 3. 如果你的应用是使用CMake来构建的,你需要在CMakeLists.txt文件中添加`find_library`命令来找到libc++_shared.so库,并将其链接到你的项目中。例如: ```cmake find_library(LIBCXX_SHARED_PATH libc++_shared PATHS ${ANDROID_SYSROOT}/usr/lib/${ANDROID_ARCH_TRIPLE}) target_link_libraries(your_application_name ${LIBCXX_SHARED_PATH}) ``` 其中`your_application_name`是你的应用目标名称。 4. 如果你使用的是ndk-build方式,则需要在Android.mk文件中添加LOCAL_SHARED_LIBRARIES变量来引用库,并在LOCAL_LDLIBS变量中指定它。 5. 在Java层通过JNI加载这个库,通常使用System.loadLibrary方法加载。例如: ```java static { System.loadLibrary("your_library_name"); } ``` 这里的`your_library_name`是不包括前缀lib和文件扩展名的库名。 6. 确保在运行时,libc++_shared.so文件已经被正确地放在目标设备的`/vendor/lib64`目录下,否则应用在加载库时会失败。 7. 编译并部署应用到目标设备上进行测试,确保一切正常工作。 请注意,在实际操作过程中,可能需要根据具体开发环境和平台进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值