当前位置:   article > 正文

NDK报错问题分析方案(一)_/lib/x86, /system/lib, /system/product/lib]]] coul

/lib/x86, /system/lib, /system/product/lib]]] couldn't find "libcocos2dlua.s
  • 前言:
    • 准备系统性的练习一下Ffmpeg框架,在此之前运行电脑上旧demo,运行过程中遇到两个问题。这两个问题非常常见,在此就干脆记录一下。

一.问题一-couldn’t find “libxxx-lib.so”

Process: com.xxx.xxxx, PID: 20866
    java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.xxx.xxxxx-EGmEBSamMJX987Fr07EMuA==/base.apk"],
nativeLibraryDirectories=[/data/app/com.xxx.xxxxx-EGmEBSamMJX987Fr07EMuA==/lib/arm64, 
/system/lib64, /hw_product/lib64, /system/product/lib64, /prets/lib64]]] couldn't find "libnative-lib.so"
  • 1
  • 2
  • 3
  • 4
  • 找不到xxx.so库
  • 思路分析
    • 1.先排除缓存的问题,clear一下重试,确认问题存在,继续步骤2;

    • 2.查看app->build->outputs->debug->app-debug.apk文件,双击查看lib文件夹下是否有对应的so文件生成。若不存在,继续步骤3;
      在这里插入图片描述

    • 3.查看module的build.gradle文件,是否添加了类似下面的配置,xxx1,xxx2,xxx3表示Android设备的CPU类型(如:arm64-v8a、armeabi-v7a、x86_64、x86等)

      ndk {
      	abiFilters  "xxx1","xxx2","xxx3"
      }
      
      • 1
      • 2
      • 3

      添加后对比上图查看,so文件已经生成
      在这里插入图片描述
      so文件未编译到apk中,原因不止步骤3的一种,这里只是提供了一种分析的思路(步骤1不可以忽视,个人觉得很重要),若确定so文件未编译到apk中,可以进一步搜索(网上文章比较多)排查其它导致so未编译进入apk的原因。

二.问题二-native层代码报错

  • 2.1.错误信息如下
    在这里插入图片描述
  • 2.2.定位报错代码的思路
    • 2.2.1.借助ndk的工具,如下图
      在这里插入图片描述
  • 2.2.2.找到下图所示so文件的文件夹,如:C:xxx\app\build\intermediates\cmake\debug\obj\armeabi-v7a
    在这里插入图片描述
  • 2.2.3.输入命令,定位报错信息
#打开命令行窗口,进入2.2.1中提到的文件夹目录,执行模板命令
aarch64-linux-android-addr2line -e C:xxx\app\build\intermediates\cmake\debug\obj\armeabi-v7a.so 000bca13
  • 1
  • 2
  • 其中000bca13是根据2.1图示的提示进行输入的,以backtrace:为起点往下查看,#00和#01都是跟项目源代码没有关联的,而#03存在关联,这里对应就是000bca13,找到后按照上面的模板命令进行更改即可。
  • 定位出报错信息在C:xxx\app\src\main\cpp\native-lib.cpp文件第28行,根据实际情况进行修改即可。
    在这里插入图片描述
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/236354
推荐阅读
相关标签
  

闽ICP备14008679号