集成ijkplayer播放功能的App,在debug版本能正常使用播放功能,但是打的release包,点击播放,App崩溃,出现如下错误日志:
java.lang.UnsatisfiedLinkError: JNI_OnLoad failed on a previous attempt to load "/data/app/com.demo.app-xK6J215tr42CfRNgSN1e-w==/lib/arm/libijksdl.so"
at java.lang.Runtime.loadLibrary0(Runtime.java:1016)
at java.lang.System.loadLibrary(System.java:1660)
at tv.danmaku.ijk.media.player.IjkMediaPlayer$1.loadLibrary(TbsSdkJava:157)
at tv.danmaku.ijk.media.player.IjkMediaPlayer.a(TbsSdkJava:169)
at tv.danmaku.ijk.media.player.IjkMediaPlayer.b(TbsSdkJava:209)
at tv.danmaku.ijk.media.player.IjkMediaPlayer.<init>(TbsSdkJava:205)
at tv.danmaku.ijk.media.player.IjkMediaPlayer.<init>(TbsSdkJava:196)
分析:这是找不到so文件了,/data/app/com.demo.app-xK6J215tr42CfRNgSN1e-w==/lib/arm/libijksdl.so从这行可以看到,so文件的路径乱码,正常应该是一个指向so文件的完整路径,但是这里乱码了,找不到so文件了,但是debug版本是正常的,release找不到,release和debug版本其中一个区别就是添加了混淆文件了,再加上这个路径乱码,那应该就是混淆的问题,但是检查了一下集成ijkplayer是以library形式引入的,在这个library下的proguard-rules.pro文件是有如下代码,关于他的混淆的。
-keep class simijkplayer.**{
public <fields>;
public <methods>;
}
-keep class tv.danmaku.ijk.media.**{
<fields>;
<methods>;
}
显然这个混淆没有生效,好吧,那就把这几行代码添加到主app的proguard-rules.pro,运行release包,好了,没有问题了。
总结一下两个问题:
1、debug版本正常,release版本异常,可以考虑是混淆的问题,找混淆文件proguard-rules.pro查看一下
2、引入的library的混淆文件没有生效,需要在app下面的混淆文件添加混淆。