zoukankan      html  css  js  c++  java
  • 仿最新BiliBili客户端(已开源)

    前言

    该项目仿照B站的Android客户端进行开发,初衷是想学习流行的Android技术,但是没有数据资源。因为喜欢逛B站,而且B站的Android客户端又是Google推荐的MD设计规范,于是花了些时间研究B站的网络请求,最后成功搞定,与@Android_ZzT同学达成一致,合作开发这个模仿B站的练习项目。该项目在工作之余开发,所以更新时间不定。

    前期准备

    一、B站网络请求抓包
    首先是对B站的网络请求进行抓包,环境是mac,开始尝试使用Charles,由于B站的网络请求大多为Https,Charles的证书设置总是不成功(没找到正确的打开方式),无法抓到Https的包,就放弃了。

    这里推荐mitmproxy,是一款在github上托管的开源抓包工具。
    官网地址:http://mitmproxy.org/
    github地址:https://github.com/mitmproxy/mitmproxy
    教程:使用mitmproxy进行移动端的HTTP抓包

    Tips:Https抓包需要安装证书,大部分手机按照官方文档或是教程文章都可以成功安装,但是小米手机无法正常下载,官方文档中提到证书会放在~/.mitmproxy目录下,所以可以手动传到手机中进行安装。

    在设置好证书和代理之后,我们就可以开始进行https抓包了,先打开app首页
    在这里插入图片描述
    观察mitmproxy并找到对应网络请求
    在这里插入图片描述
    这样就可以分析分析接口参数调用B站API了。但是我们发现大部分的接口都需要一个sign参数作为动态的检验口令,而sign又是如何生成的呢,接下来我们需要反编译,寻找与分析源代码中的sign签名逻辑。

    二、反编译

    反编译与签名逻辑参考了@HaKu的

    BiliBili Android第三方——第0步

    大致操作这篇讲的很详尽了,就不赘述了,这里提一些遇到的问题吧。

    上述文章反编译的版本比较老(文章作者后续也没有更新),老版本中SecretKey直接存放在了so库中,在反编译新版本的时候(我当时用的v5.4),B站对于SecretKey使用了AES加密,在反编译源码中可以找到算法模式,秘钥以及偏移量等参数(具体为bl包下的chd、chb类,和nativelibrary包下的LibBili类),但是经过试验没有成功……这方面了解非常少,如果有大佬能试验成功,请不吝赐教!最后还是找了老版本中的AppKey和AppSecretKey,都存储在libbili.so中,具体版本号为v3.14。

    成果

    效果图如下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    Version 1.1.0

    • 架构搭建
    • 分析 Api
    • 完成主页界面

    Version 1.2.0

    • 完成直播播放页面
    • 集成IjkPlayer并简易封装
    • 集成DanmakuFlameMaster和来自czp3009的bilibili-api完成弹幕功能

    一些开源库的更新

    • 前期准备
    • 反编译资源文件
    • mitmproxy抓取 Api(支持https)
    • 获得 B 站 signKey 签名逻辑
    • 框架搭建

    用到的开源库

    • RxJava2 最coooooool的响应式编程框架
    • RxLifecycle 解决Rxjava内存泄漏
    • Retrofit 最流行的Android网络请求的框架
    • Okhttp3 和Retrofit搭配,项目中签名逻辑使用该库的拦截器模块实现
    • Dagger2 门槛略高但功能强大的依赖注入框架
    • Butterknife 绑定View的依赖注入框架
    • Eventbus 组件间通信
    • Fresco 图片的加载和处理,功能强大,但相比其他图片库有点大
    • Fragmentation 简化Fragment操作并填坑的库
    • Multitype RecyclerView多类型库
    • IjkPlayer b站出品基于FFmpeg的开源视频播放框架
    • DanmakuFlameMaster 烈焰弹幕使-b站开源弹幕解析绘制引擎项目

    原创作者:Misery_Dx
    原文链接:https://github.com/TeamNB/FakeBiliBili
    在这里插入图片描述

    欢迎关注我的微信公众号「码农突围」,分享Python、Java、大数据、机器学习、人工智能等技术,关注码农技术提升•职场突围•思维跃迁,20万+码农成长充电第一站,陪有梦想的你一起成长。

  • 相关阅读:
    06-图3 六度空间
    06-图2 Saving James Bond
    06-图1 列出连通集
    05-树9 Huffman Codes
    数据结构学习笔记04树(堆 哈夫曼树 并查集)
    05-树8 File Transfer
    05-树7 堆中的路径
    十天学会单片机Day1点亮数码管(数码管、外部中断、定时器中断)
    设计模式—— 四:接口隔离原则
    设计模式—— 一:单一职责原则
  • 原文地址:https://www.cnblogs.com/hejunlin/p/12789906.html
Copyright © 2011-2022 走看看