GSYVideoPlayer icon indicating copy to clipboard operation
GSYVideoPlayer copied to clipboard

SystemPlayerManager 混淆后AndroidMediaPlayer 崩溃

Open CookieJuneSDD opened this issue 1 year ago • 8 comments

(!!!!请务必务必按照issue模板,修改 后提交问题!!!!,不按模板提Isuue删除处理)

(ps 首页问题集锦和demo请先了解一下!)

问题描述:采用系统内核后,混淆后AndroidMediaPlayer 初始化就崩溃,keep以后还是崩溃

2024-10-14 17:16:20.128 27609-27609 dalvikvm com.cmri.aijia.edu W DexOpt: pure-abstract method 'close' in Landroid/media/MediaDataSource; 2024-10-14 17:16:20.128 27609-27609 dalvikvm com.cmri.aijia.edu I Could not find method android.media.MediaDataSource.close, referenced from method tv.danmaku.ijk.media.player.AndroidMediaPlayer.releaseMediaDataSource 2024-10-14 17:16:20.128 27609-27609 dalvikvm com.cmri.aijia.edu W VFY: unable to resolve virtual method 198: Landroid/media/MediaDataSource;.close ()V 2024-10-14 17:16:20.128 27609-27609 dalvikvm com.cmri.aijia.edu W VFY: rejecting opcode 0x6e at 0x0004 2024-10-14 17:16:20.129 27609-27609 dalvikvm com.cmri.aijia.edu W VFY: rejected Ltv/danmaku/ijk/media/player/AndroidMediaPlayer;.releaseMediaDataSource ()V 2024-10-14 17:16:20.129 27609-27609 dalvikvm com.cmri.aijia.edu W Verifier rejected class Ltv/danmaku/ijk/media/player/AndroidMediaPlayer; 2024-10-14 17:16:22.836 27609-27609 AndroidRuntime com.cmri.aijia.edu D Shutting down VM 2024-10-14 17:16:22.836 27609-27609 dalvikvm com.cmri.aijia.edu W threadid=1: thread exiting with uncaught exception (group=0x41867bc0) 2024-10-14 17:16:22.854 27609-27609 System.err com.cmri.aijia.edu W java.lang.VerifyError: tv/danmaku/ijk/media/player/AndroidMediaPlayer 2024-10-14 17:16:22.855 27609-27733 AJBasePlayer com.cmri.aijia.edu D [, , 0]:{Thread:Timer-1}0 KB/s 2024-10-14 17:16:22.866 27609-27609 System.err com.cmri.aijia.edu W at com.shuyu.gsyvideoplayer.player.SystemPlayerManager.initVideoPlayer(SystemPlayerManager.java:55) 2024-10-14 17:16:22.874 27609-27609 System.err com.cmri.aijia.edu W at com.shuyu.gsyvideoplayer.GSYVideoBaseManager.initVideo(GSYVideoBaseManager.java:624) 2024-10-14 17:16:22.883 27609-27609 System.err com.cmri.aijia.edu W at com.shuyu.gsyvideoplayer.GSYVideoBaseManager.access$000(GSYVideoBaseManager.java:39) 2024-10-14 17:16:22.892 27609-27609 System.err com.cmri.aijia.edu W at com.shuyu.gsyvideoplayer.GSYVideoBaseManager$MediaHandler.handleMessage(GSYVideoBaseManager.java:581) 2024-10-14 17:16:22.900 27609-27609 System.err com.cmri.aijia.edu W at android.os.Handler.dispatchMessage(Handler.java:102) 2024-10-14 17:16:22.906 27609-27609 System.err com.cmri.aijia.edu W at android.os.Looper.loop(Looper.java:136) 2024-10-14 17:16:22.911 27609-27609 System.err com.cmri.aijia.edu W at android.app.ActivityThread.main(ActivityThread.java:5060) 2024-10-14 17:16:22.918 27609-27609 System.err com.cmri.aijia.edu W at java.lang.reflect.Method.invokeNative(Native Method) 2024-10-14 17:16:22.923 27609-27609 System.err com.cmri.aijia.edu W at java.lang.reflect.Method.invoke(Method.java:515) 2024-10-14 17:16:22.931 27609-27609 System.err com.cmri.aijia.edu W at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:861) 2024-10-14 17:16:22.936 27609-27609 System.err com.cmri.aijia.edu W at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:677) 2024-10-14 17:16:22.937 27609-27609 System.err com.cmri.aijia.edu W at dalvik.system.NativeStart.main(Native Method) 2024-10-14 17:16:22.975 27609-27609 CrashHandlers com.cmri.aijia.edu D [, , 0]:{Thread:main}CrashHandler error info tv/danmaku/ijk/media/player/AndroidMediaPlayer java.lang.VerifyError: tv/danmaku/ijk/media/player/AndroidMediaPlayer at com.shuyu.gsyvideoplayer.player.SystemPlayerManager.initVideoPlayer(SystemPlayerManager.java:55) at com.shuyu.gsyvideoplayer.GSYVideoBaseManager.initVideo(GSYVideoBaseManager.java:624) at com.shuyu.gsyvideoplayer.GSYVideoBaseManager.access$000(GSYVideoBaseManager.java:39) at com.shuyu.gsyvideoplayer.GSYVideoBaseManager$MediaHandler.handleMessage(GSYVideoBaseManager.java:581) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5060) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:861) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:677) at dalvik.system.NativeStart.main(Native Method) 2024-10-14 17:16:22.976 27609-27609 com.cmri.aijia.edu W $$$$$$$$$$Oct 14 2020$$$14:55:13$$$$$$$$$$[27609,27609][2024-10-14 +0800 17:16:22]

混淆方案: -keep class com.shuyu.gsyvideoplayer.video.** { ; } -dontwarn com.shuyu.gsyvideoplayer.video.* -keep class com.shuyu.gsyvideoplayer.video.base.** { ; } -dontwarn com.shuyu.gsyvideoplayer.video.base.* -keep class com.shuyu.gsyvideoplayer.utils.** { ; } -dontwarn com.shuyu.gsyvideoplayer.utils.* -keep class com.shuyu.gsyvideoplayer.player.** {*;} -dontwarn com.shuyu.gsyvideoplayer.player.** -keep class tv.danmaku.ijk.** { ; } -dontwarn tv.danmaku.ijk.*

-keep class androidx.media3.** {*;} -keep interface androidx.media3.**

-keep class android.media.** {*;} -keep interface android.media.**

-keep class tv.danmaku.ijk.media.player.AndroidMediaPlayer {*;}

-keep class com.google.android.exoplayer2.** {*;} -keep interface com.google.android.exoplayer2.**

问题机型/系统:

机顶盒4.4版本

GSY依赖版本

最新的900版本

CookieJuneSDD avatar Oct 14 '24 09:10 CookieJuneSDD

首页的混淆规则都加了?

CarGuo avatar Oct 14 '24 10:10 CarGuo

感谢大大回复,都加了,我直接copy的首页的介绍的混淆

CookieJuneSDD avatar Oct 14 '24 10:10 CookieJuneSDD

首页的混淆规则都加了?

感谢大佬回复,都加了,我就是复制的首页的

CookieJuneSDD avatar Oct 14 '24 10:10 CookieJuneSDD

我这边测试正常,如果真不行,你看那个方法没有自己keep下就好了,看起来是 IMediaDataSource 的 close ? 或者 MediaDataSourceProxy 的?

CarGuo avatar Oct 15 '24 02:10 CarGuo

只有删除掉releaseMediaDataSource中的Mediasouce的close方法才能类才能验证通过,任何判断都会让AndroidMediaPlayer这个类出现VerifyError,有遇到过吗

只有删除掉releaseMediaDataSource中的Mediasouce的close方法才能类才能验证通过,任何判断都会让AndroidMediaPlayer这个类出现VerifyError,有遇到过吗

CookieJuneSDD avatar Oct 15 '24 03:10 CookieJuneSDD

我怀疑是不是因为他内部的 static MediaDataSourceProxy 导致的,因为 AndroidMediaPlayer 内的 mMediaDataSource 的实现是 MediaDataSourceProxy,你试试:

-keep class tv.danmaku.ijk.media.player.AndroidMediaPlayer {*;}
-keep class tv.danmaku.ijk.media.player.AndroidMediaPlayer$MediaDataSourceProxy {*;}

CarGuo avatar Oct 15 '24 03:10 CarGuo

我怀疑是不是因为他内部的 static MediaDataSourceProxy 导致的,因为 AndroidMediaPlayer 内的 mMediaDataSource 的实现是 MediaDataSourceProxy,你试试:

-keep class tv.danmaku.ijk.media.player.AndroidMediaPlayer {*;}
-keep class tv.danmaku.ijk.media.player.AndroidMediaPlayer$MediaDataSourceProxy {*;}

不行的,我也怀疑过是不是内部类的问题,并且尝试keep内部类,依然存在问题

CookieJuneSDD avatar Oct 15 '24 06:10 CookieJuneSDD

那是在不知道你什么情况了,我这边测试没有问题

CarGuo avatar Oct 15 '24 06:10 CarGuo