仿最新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

原文发布于微信公众号 - 何俊林(DriodDeveloper)

原文发表时间:2018-06-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏魂祭心

原 canvas绘制clock

4094
来自专栏java 成神之路

使用 NIO 实现 echo 服务器

4667
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2577
来自专栏落花落雨不落叶

canvas画简单电路图

62111
来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2182
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2717
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3145
来自专栏Golang语言社区

【Golang语言社区】GO1.9 map并发安全测试

var m sync.Map //全局 func maintest() { // 第一个 YongHuomap := make(map[st...

4728
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4025

扫码关注云+社区