最近要把公司的android 播放器sdk包装成RN组件,播放器是个很重的组件,但是从RN的理论上讲又是行得通的,所以,那就在我的样板工程中来尝试吧。

建立一个react-native模块之后,也写了相对应的Component,运行加载一切顺利,但是再次运行,crash,报错。

1
2
3
4
5
java.lang.UnsatisfiedLinkError: dalvik.system.DexClassLoader[exPathList[[zip file
"/data/data/com.***.rnapp/files/sinaplugin/PlayerSDKCore_V3.2.apk"],
nativeLibraryDirectories=[/data/data/com.***.rnapp/app_libs, /vendor/lib, /system/lib]]]
couldn't find "libsinit.so"
crash日志

定位

从log中看发现是没有成功加载so文件,这个不应该啊,迅速定位一下。

我们的播放器是按插件的方式开发的,用的是dynamic-load-apk
来动态加载所需要的播放内核,以便将来动态升级,结果去 so存放目录下看,确实没有发现 libsinit.so 文件,说明确实有问题,经过在模拟器调试发现

在第一次从asset目录copy出需要的apk后,load所需的so是成功的,并且断点后发现,确实app_libs目录是有的,

安装后的目录

但是当RN模块加载之后,app_libs 目录竟然被干掉了,到此已经找到原因,说明RN代码里面做了一些处理,
也使用了app_libs目录,

解决

尝试使用加前缀目录, 更改目录结构 app_libs => app_sinalibs 再次尝试,一切正常 。。。。

本文地址: http://adanchou.me/2016/09/14/android-app-libs/