android app调用so 报错 dlopen failed: library “libnativehelper.so“ not found解决办法

这篇具有很好参考价值的文章主要介绍了android app调用so 报错 dlopen failed: library “libnativehelper.so“ not found解决办法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、问题现象

android NDK开发过程中,APP调用so库出现如下问题

android app调用so 报错 dlopen failed: library “libnativehelper.so“ not found解决办法,NDK,android,android studio

二、问题原因

主要原因是google在N上对.so库的加载进行了限制,限制了so库指从部分指定的路径进行加载,不在这个路径的so提示 
java.lang.UnsatisfiedLinkError: dlopen failed: library “xxx.so” not found 或 
java.lang.UnsatisfiedLinkError: dlopen failed: library “/vendor/lib64/xxx.so” needed or dlopened by “/system/lib64/libnativeloader.so” is not accessible for the namespace “classloader-namespace” 或 其他异常错误提示。

N上对so库加载的搜索路径方式为ld_library_path, runtime path, permit path,不在这个搜索路径下则加载失败。从代码层面看,主要是类加载器ClassLoader的相关处理, 

​
//code1: (loadedApk.java getClassLoader()) check sdk version 
// DO NOT SHIP: this is a workaround for apps loading native libraries 
// provided by 3rd party apps using absolute path instead of corresponding 
// classloader; see http://b/26954419 for example. 
if (mApplicationInfo.targetSdkVersion <= 23) { 
libraryPermittedPath += File.pathSeparator + “/data/app”; 
}

//Code2: (loadedApk.java getClassLoader()) N add a new PermittedPath 
String libraryPermittedPath = mDataDir;

//Code3: (native_loader.cpp) use the new namespace rule with search path: ld_library_path, //runtime path, permit path.

​

三、解决办法

将自己的so加入到允许路径的白名单里面,具体操作为,如果不改代码实现,则导出设备的/vendor/etc/public.libraries.txt 或/etc/public.libraries.txt文件,将so名字添加进去,在push到设备,重启即可。

 文章来源地址https://www.toymoban.com/news/detail-516145.html

到了这里,关于android app调用so 报错 dlopen failed: library “libnativehelper.so“ not found解决办法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ./mysqld: error while loading shared libraries: libaio.so.1: 报错处理

    报错提示 解决方案:

    2024年02月07日
    浏览(42)
  • Tensorflow 报错 Could not load dynamic library ‘libnvinfer.so.7‘ 解决方法

    运行 Tensorflow 之后发现一直有个报错,然后上网一查,原来是需要装一个叫 TensorRT 的库,这个库是 Nvidia 的。 PS:前提要先安装 CUDA 和 cuDNN 需要安装的同学上网一 Google 就出来了,不过需要注册 Nvidia 的一个账户。 我装的是最新版的 8.5 的 Tar 版本,包很大1G多,这个网页还附

    2024年02月15日
    浏览(34)
  • Android问题笔记 - 编译报错Task :app:compileDebugJavaWithJavac FAILED

    专栏分享 点击跳转=Unity3D特效百例 点击跳转=案例项目实战源码 点击跳转=游戏脚本-辅助自动化 点击跳转=Android控件全解手册 点击跳转=Scratch编程案例 点击跳转=软考全系列 众所周知,人生是一个漫长的流程,不断 克服困难 ,不断反思前进的过程。在这个过程中会产生很多对

    2024年02月17日
    浏览(38)
  • nginx报错(error while loading shared libraries: libpcre2-8.so.0)

    报错信息如下: 使用用rpm部署nginx服务在Centos7.9中,启动nginx之前试用命令nginx -t进行检查 处理方式1: 如果你的服务器上有配置yum源的话,可以使用yum进行安装,只需执行命令:yum install pcre2 即可 处理方式2: 使用下载相关依赖http://mirror.centos.org/centos/7/os/x86_64/Packages/pcre2-10.23-2.

    2024年02月07日
    浏览(42)
  • Android Stdio Execution failed for task ‘:app:compileDebugKotlin‘ 报错解决

    具体报错信息如下: 很显然,这是一个版本冲突问题,compileDebugJavaWithJavac版本是1.8,compileDebugKotlin是17。我们只需将这两个版本改成同一个即可,在build.gradle中添加以下代码: 如下图所示:

    2024年04月16日
    浏览(27)
  • Android so库开发——Android Studio调用so库(二)

            在 Android Studio生成自己的so库 中已经创建了自己的so库,这是一个JNI规范的so库,可以直接将so库放到libs中,并按照上面文章中MainActivity中的调用方法使用。 1、build.gradle(app)配置 2、加载so库中方法         在Sudio中方法名虽然显示红色,但不影响使用。 3、

    2024年02月09日
    浏览(36)
  • undefined reference to `dlopen‘ ‘SSL_library_init‘ `X509_certificate_type‘

    使用Crow的时候需要注意crow依赖asio依赖OpenSSL,asio要求1.22以上版本,我使用的是1.26.0; 这个版本的asio要求OpenSSL是1.0.2,其他版本我得机器上编不过,ubuntu上默认带的OpenSSL是1.1.1; 所以我下载了OPENSSL1.2.0重装,地址: https://www.openssl.org/source/old/ 编译cpp启用Crow的SSL时会出现一些

    2024年02月13日
    浏览(31)
  • Android 项目调用第三方库so动态库

    在Android NDK开发中,可以通过自己编写C/C++代码来构建so动态库进行调用之外,还可以把so动态库提供给第三方使用;接下来,我将介绍在新创建的Android 项目(或已存在的Android 项目)中如何调用第三方so动态库。 关于如何进行NDK开发,实现JNI,以及编写C++与Java交互(Java调用

    2024年02月16日
    浏览(34)
  • Android基于JNA集成调用第三方C/C++的so库

    Android基于JNA集成调用第三方C/C++的so库 (1)引入JNA。 基于JNA开源项目,JNA对Android NDK的封装,简化Android层JNI集成调用C/C++的so库。 GitHub - java-native-access/jna: Java Native Access Java Native Access. Contribute to java-native-access/jna development by creating an account on GitHub. https://github.com/java-native-ac

    2024年02月02日
    浏览(33)
  • docker 报错 library initialization failed - unable to allocate file descriptor table - out of memory

    docker容器,启动的时候 容器日志报: library initialization failed - unable to allocate file descriptor table - out of memory docker启动容器时,若未给容器配置ulimit,则从docker守护进程上设置的默认ulimits继承, 这个值太大? 会报这个错 官方文档: dockerd | Docker Docs ulimit nofile这个值太大报错的

    2024年04月29日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包