NDK报错问题分析方案(一)

  • 前言:
    • 准备系统性的练习一下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"
  • 找不到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"
      }
      

      添加后对比上图查看,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
  • 其中000bca13是根据2.1图示的提示进行输入的,以backtrace:为起点往下查看,#00和#01都是跟项目源代码没有关联的,而#03存在关联,这里对应就是000bca13,找到后按照上面的模板命令进行更改即可。
  • 定位出报错信息在C:xxx\app\src\main\cpp\native-lib.cpp文件第28行,根据实际情况进行修改即可。
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值