11月1日之后,bilibilitv使用的老版本接口只返回的360P的视频,导致APP基本残废,视频辣眼睛。之后在贴吧看到一个新接口可以返回1080P视频,且接口协议与老接口一致。但是只有普通视频有1080P,番剧还是360P,所以开始反编译,准备玩玩看有没有番剧1080P解决方案。
将APP反编译之后,项目结构如图。其中核心代码都在smali/bl下面
由于smali代码可读性太差,所以还需要转换成java代码辅助阅读。
使用jd-ui打开,java代码结构如图
使用jd-ui搜索功能,搜索playurl,可找到视频和番剧的接口地址,分别位于ql.class,qh.class,对应ql.smali,qh.smali。
可以看到原APP中,已经有playurl和playurlproj两种接口地址了,所以尝试将接口地址都改为playurlproj
打包编译测试
发现两个问题:
1. 普通视频已经支持1080P,但是番剧视频解析错误。
2. APP运行过程中会闪退
问题1解决方案
由于视频接口协议是一致的,后面查看视频编码也是一致的,按理说不应该报错,所以尝试用adb logcat查看具体错误日志,发现空指针异常。
定位到qi.a方法,搜索哪里调用到了qn.h。
可以看到localqn可能为null,但是下面又直接调用了localqn.h,所以导致空指针异常。结合上下代码,这里用到的解决方案是给bool2设置默认值false,不去调用localqn.h
重新打包测试,发现番剧正常播放1080P,问题1解决。
问题2解决方案
问题2猜测是防反编译签名校验的问题。全局搜索signature,找到一段疑似代码,把返回全部设置成true,但是并没有作用。无奈放弃,退而求其次使用np管理器去签名校验。
这种方案有个很大的问题,无论使用哪种去校验模式,总是会有部分设备闪退,所以在这我提供两个安装包,一个是未去签名校验的版本,你们可以使用np管理器自行找到适合自己设备的去签名模式;一个是用下图的模式去签名的,这个版本经测试华为智慧屏可以正常使用,按需下载。
Comments | Nothing