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

相关文章

来自专栏玄魂工作室

Hacker基础之工具篇 apktool

apktool ? apktool是一个用于第三方封闭的二进制Android应用程序逆向工程工具 它可以将资源解码为几乎原始的形式,并在进行一些修改后重建它们;...

35610
来自专栏ThoughtWorks

在线系统数据服务的迁移策略

成都办公室的张耀丹是去年毕业的,只是他的职业生涯一开始就面对一个复杂的遗留系统。好在遗留系统的复杂并没有让他退却,而是从中学习到了解决遗留系统的思考之道。 他写...

3367
来自专栏FreeBuf

钓鱼邮件攻击中的猥琐技巧与策略

引言 钓鱼邮件攻击是社会工程学攻击中的一种常见的手段,其目的是欺骗受害人来进行一些操作,最终控制受害人。一般来说,钓鱼邮件从后续的攻击手段来说,可以分为两类: ...

2236
来自专栏云瓣

关于 Node.js 的认证方面的教程(很可能)是有误的

原文地址:Your Node.js authentication tutorial is (probably) wrong 我搜索了大量关于 Node.js/E...

3159
来自专栏西枫里博客

百度熊掌号折腾手记

熊掌号出来有一段时间了,西枫里博客早早的就申请好了熊掌号。久久没有启用,放置了一段时间后,第一次启用熊掌号,发现博客程序中对缩略图定义的尺寸不符合要求,另外考虑...

1292
来自专栏owent

整理一波软件源镜像同步工具+DevOps工具

上个月,同学的公司,格奕,突然间跪了。这个月基本属于休息+四处溜达。同时空闲的时候也想整理下之前做得一些之前的做得一些小工具们。在不泄密的情况下开源出来吧(其实...

792
来自专栏安智客

Android 新特性之文件加密对TEE的要求

昨天聊到Android新版本对于指纹开发的要求,很多朋友问我,Android新版本对于TEE有哪些具体要求,我们知道android后续版本只会更加强化安全的...

3925
来自专栏FreeBuf

你的终端是安全的吗?iTerm2 中可能通过 DNS 请求泄漏隐私信息

Mac 上的开发者可能非常熟悉 iTerm2 这款终端应用程序,甚至已经用它取代了 Apple 官方终端应用的地位。但就在今天之前,iTerm2中还存在一个严重...

2575
来自专栏ThoughtWorks

Kubernetes救援 - 教你如何从新技术的坑里爬出来(下) | TW洞见

今日洞见 文章作者/配图来自ThoughtWorks:佟达。 本文所有内容,包括文字、图片和音视频资料,版权均属ThoughtWorks公司所有,任何媒体、网站...

3668
来自专栏刺客博客

博客主机搬迁遇到的问题记录

1564

扫码关注云+社区