仿最新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 条评论
登录 后参与评论

相关文章

来自专栏腾讯大讲堂的专栏

Android开发在路上:少去踩坑,多走捷径

最近一朋友提了几个Android问题让我帮忙写个小分享,我觉得对新人还是挺有帮助的,所以有了这个小分享。 1.目前, Android APP开发完成后,通常需要...

20010
来自专栏猿湿Xoong

5 个 Android 工具 Apk,有效提升开发效率

1394
来自专栏WeTest质量开放平台团队的专栏

分布式系统设计的求生之路

分布式系统理念渐渐成为了后台架构技术的重要选择,本文介绍了作者在手游领域对分布式系统进行的种种尝试,并在尝试中制定了对服务的定义、整体框架的构建以及服务内部拆分...

742
来自专栏沙尘暴的专栏

养车记账本小程序开发实例

本实例所用资源为腾讯云购买的微信小程序解决方案,选的其中的PHP环境。

7189
来自专栏静晴轩

Webpack 打包优化之体积篇

谈及如今欣欣向荣的前端圈,不仅有各类框架百花齐放,如Vue, React, Angular等等,就打包工具而言,发展也是如火如荼,百家争鸣;从早期的王者Brow...

3164
来自专栏鬼谷君

raid详解

832
来自专栏java工会

使用Github创建自己的小博客

642
来自专栏玄魂工作室

CTF实战6 自动化Web安全测试工具

为什么要介绍这个呢,你可能会问,什么某明某0的扫描器多的是,比这个好多了,为啥要说这个

712
来自专栏我的安全视界观

[一起玩蛇】Python代码审计中的器II

2077
来自专栏SpringBoot 核心技术

SpringCloud组件:Eureka服务注册中心的失效剔除与自我保护机制

Eureka作为一个成熟的服务注册中心当然也有合理的内部维护服务节点的机制,比如我们本章将要讲解到的服务下线、失效剔除、自我保护,也正是因为内部有这种维护机制才...

1712

扫码关注云+社区