开启混淆后release打包,使用exo播放,会报 java.lang.NoSuchMethodException: <init> [class cn.jzvd.Jzvd]
**什么jzvd版本
7.0.5
**是否和安卓版本有关系,什么版本
否
**是否和特定品牌的手机机型有关系,什么机型
否
**相关log是什么
2019-12-02 14:30:53.783 9342-9342/? W/System.err: java.lang.NoSuchMethodException: [class cn.jzvd.Jzvd]
2019-12-02 14:30:53.783 9342-9342/? W/System.err: at java.lang.Class.getConstructor0(Class.java:2332)
2019-12-02 14:30:53.783 9342-9342/? W/System.err: at java.lang.Class.getConstructor(Class.java:1728)
2019-12-02 14:30:53.783 9342-9342/? W/System.err: at cn.jzvd.Jzvd.j(SourceFile:515)
2019-12-02 14:30:53.783 9342-9342/? W/System.err: at cn.jzvd.Jzvd.onClick(SourceFile:190)
2019-12-02 14:30:53.783 9342-9342/? W/System.err: at cn.jzvd.JzvdStd.onClick(SourceFile:214)
2019-12-02 14:30:53.783 9342-9342/? W/System.err: at android.view.View.performClick(View.java:7161)
2019-12-02 14:30:53.783 9342-9342/? W/System.err: at android.view.View.performClickInternal(View.java:7138)
2019-12-02 14:30:53.783 9342-9342/? W/System.err: at android.view.View.access$3500(View.java:811)
2019-12-02 14:30:53.784 9342-9342/? W/System.err: at android.view.View$PerformClick.run(View.java:27419)
2019-12-02 14:30:53.784 9342-9342/? W/System.err: at android.os.Handler.handleCallback(Handler.java:883)
2019-12-02 14:30:53.784 9342-9342/? W/System.err: at android.os.Handler.dispatchMessage(Handler.java:100)
2019-12-02 14:30:53.784 9342-9342/? W/System.err: at android.os.Looper.loop(Looper.java:227)
2019-12-02 14:30:53.784 9342-9342/? W/System.err: at android.app.ActivityThread.main(ActivityThread.java:7523)
2019-12-02 14:30:53.784 9342-9342/? W/System.err: at java.lang.reflect.Method.invoke(Native Method)
2019-12-02 14:30:53.784 9342-9342/? W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
2019-12-02 14:30:53.784 9342-9342/? W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:953)
**复现流程
使用exo内核播放,项目开启混淆打包,安装后播放任意视频,播放器会一直加载,日志会报异常:
java.lang.NoSuchMethodException: [class cn.jzvd.Jzvd]
**最好有截图或者视频说明情况
经过排查发现,mediaInterface 是通过反射获取构造函数的,所以应防止自己所用的JZMediaInterface的类的构造函数被混淆。
解决:在proguard-rules.pro中加上-keep public class xxx(你自己的包名路径).JZMediaExo {*;}

Source: lipangit/JiaoZiVideoPlayer