- 前言:
- 准备系统性的练习一下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.输入命令,定位报错信息
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行,根据实际情况进行修改即可。
|