单独在测试ijkplayer的demo中是没有加载问题,可以正常使用,当整合到另一个app中的时候就出现了加载库问题(新整合的文件libs文件中还有其他so库和jar包)
具体报错:

so库也是放在libs中,配置文件:

请问各位大神这是什么?
直接解压自己的apk,看哪个目录缺少so就知道了。
http://allenfeng.com/2016/11/06/what-you-should-know-about-android-abi-and-so/
@zhanggao 刚刚试过解压了apk文件,so库并没有少
看你的log,你把ijkPlayer官方的包名改了,然后在c层代码有作对应的修改吗?
@zhanggao 是的啊,我修改了一些ijkPlayer底层的代码,在测试demo中倒是没出现过问题,能运行,一整合到另一app中就报错了加载不到so库。
@zhanggao 奇怪的是ijkffmpeg.so能加载,但ijksdl和ijkplayer加载时才崩溃的
你改过包名的so和java代码能在demo里运行成功?
能啊
我也有这种情况,测试没问题,打正式包就会抛出来这个bug,请问要怎么解决这个问题
代码混淆的问题 要放到你的target module proguard下
@matthewfang 后来我新建一个项目重新搭建一遍,就正常了,可能真是代码混淆的原因,因为之前的项目做了代码混淆!谢谢提醒!
这种情况就是 你so文件中有写死了绝对路径的包名,要按照demo的包名以及文件夹名称来写就好了
问题总结: 把代码混淆去掉之后项目就可以正常运行了,谢谢大家给的宝贵意见。
向proguard中添加以下代码混淆规则就可以了
-keep class tv.danmaku.ijk.media.player.* {;}
-keep class tv.danmaku.ijk.media.player.IjkMediaPlayer{;}
-keep class tv.danmaku.ijk.media.player.ffmpeg.FFmpegApi{;}
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
v7a和v8a会有冲突,删掉v8
如下:
ndk {
//选择要添加的对应cpu类型的.so库。
abiFilters "armeabi","armeabi-v7a","x86"
}
@wapchief 可以只需要保留v7a, 只支持armeabi的手机基本灭绝了。x86也可以删掉,一般intel的平板也能兼容v7a。
代码混淆的问题 要放到你的target module proguard下
我在debug下也遇到了,应该不是混淆问题,请问还有什么别的可能么
代码混淆的问题 要放到你的target module proguard下
我在debug下也遇到了,应该不是混淆问题,请问还有什么别的可能么
反编译下你自己的apk就知道了。
@gongwen 谢谢
我也是遇到了这个问题, 在打包的过程中做了代码混淆,所以在调试的时候没问题,但发布就有问题
按照你说的方法,在proguard-rules.pro 文件中,添加了下面三行代码,完美解决问题:
-keep class tv.danmaku.ijk.media.player.* {;}
-keep class tv.danmaku.ijk.media.player.IjkMediaPlayer{;}
-keep class tv.danmaku.ijk.media.player.ffmpeg.FFmpegApi{;}
Most helpful comment
向proguard中添加以下代码混淆规则就可以了
ijkplayer
-keep class tv.danmaku.ijk.media.player.* {;}
-keep class tv.danmaku.ijk.media.player.IjkMediaPlayer{;}
-keep class tv.danmaku.ijk.media.player.ffmpeg.FFmpegApi{;}