• 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"
    
    • 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行,根据实际情况进行修改即可。
      在这里插入图片描述
  • 相关阅读:
    js的宏任务与微任务
    树莓派4B无屏幕连接Wi-Fi/启用ssh/创建用户
    Java学习笔记(三十三)
    shell_54.linux重定向错误
    综合对比ZooKeeper、Eureka、Consul 、Nacos等微服务注册中心,用途及优缺点分析
    暄桐林曦老师的三个“知行”心得,帮你少走弯路
    基于java+springmvc+mybatis+vue+mysql的水果食品果蔬生鲜商城销售系统
    Spring02之面向切面【进阶版】
    硬盘文件系统系列专题之二 NTFS
    栈和队列 - C语言实现
  • 原文地址:https://blog.csdn.net/itTalmud/article/details/126089227