高仿哔哩哔哩动画安卓客户端 - (゜ - ゜) つロ 乾杯~ - bilibili

5,457 阅读6分钟

前言

这个项目断断续续也做了有半年多了,到现在也做的差不多了,遇到了很多难题,都慢慢解决了,也学习了很多,所以在这里做个记录,记录做这个项目的过程,也非常感谢一直支持这个项目的同学.


bilibili-logo

Tips

因为看到很多同学也在做高仿B站,经常会问我一些问题,在这里我会把所用到的接口和问题整理一下,方便需要的同学。

目前项目最低sdk设置的为19,建议使用21,因为本人手上只有一台MotoX,一台Nexus6,平常自己测试都是21以上,所以可能对低版本的适配没有做完全,还有就是做这个项目都是周末时间来做的,所以没有太多时间顾及到低版本的适配,这个会慢慢完善,如果有什么不好的地方,还请见谅哦.

目前暂时还没有提供Apk下载,因为这周末会发一个新版本,主要修复之前的一些bug,和增加的一些功能,发布后会提供下载地址.

Github地址

OhMyBiliBili

截图















22.png

介绍

使用到的开源库

  • 1.Rxjava系列类库,Rxjava,RxAndroid,Rxbinding,Rxlifecycle,RxBus。
  • 2.Okhttp,Retrofit。
  • 3.ijkplayer,烈焰弹幕库。
  • 4.butterknife,Glide。
  • 5.materialsearchview,FlycoTabLayout。

目前完成的功能

  • 1.首页六大模块,推荐,番剧,直播,关注,分区,发现的实现。
  • 2.热门视频排行榜,全区视频排行榜。
  • 3.视频详情界面,视频评论,使用ijkplayer完成的视频播放,烈焰弹幕库实现的弹幕功能。
  • 4.番剧,专题详情界面,番剧放送表,番剧索引。
  • 5.使用ijkplayer实现的直播视频的播放。(直播的弹幕没有实现,暂时还抓不到弹幕的数据)
  • 6.分区视频查看功能,目前只有基本的9大分区的实现,但是该接口需要Appkey才能获取到。
  • 7.游戏中心,离线缓存的界面实现。
  • 8.全区搜索的实现,目前支持综合视频,番剧,话题的搜索。
  • 9.仿B站登录的小彩蛋。(登录只是假登录,随意输入帐号密码即可)
  • 10.其他的一些仿官方的实现细节等,请自行发现。

未完成的功能

  • 主题切换,准备使用B站自家的MagicaSakura
  • 离线缓存的功能实现,视频下载到本地。
  • 直播功能的完善,横竖屏切换。
  • 番剧详情界面优化,保持跟官方一致。
  • 屏幕适配,版本适配。

遇到的一些问题

1.复杂RecyclerView的实现问题,首页推荐,番剧,直播界面的复杂RecyclerView的实现。

先说说推荐界面,首先最上边是一个轮播的Banner,下边有一些复杂的item组合而成,其中活动中心是横向滑动的RecyclerView,还有单独的话题item是一个图片,我的实现是,因为获取到的接口并没有Banner数据,我是把接口返回的话题list抽取出来放到顶部Banner去轮播,然后使用了一个开源库,Section,它是把RecyclerView中的item分为一个独立的section,然后在一个个的添加adapter中去,这样就很容易实现B站这种复杂的item效果,然后在利用GridLayoutManager的setSpanSizeLookup来设置每个item的跨列数,Banner独站一行,下边的每个类型的item的按两行分配,活动中心,话题都是独立的一个section,最后全部添加到adapter中,就实现了推荐界面的效果,而且不用去recyclerView嵌套,导致内存不回收,滑动卡顿的问题。

番剧界面的实现,这个就很简单了,使用了我自己写的一个很简单的recyclerViewAdapter帮助类,给recyclerView添加两个头部就完成了,因为该接口数据并不是官方的原数据,可能跟官方不一致,所以还请见谅哈。

直播界面的实现,直播数据的接口会返回,banner,banner下边的直播分类,以及item类型分组列表的完整数据,所以这里直接使用itemviewtype根据不同的type加载不同的布局来实现直播界面的效果。

2.接口的问题

主要使用了两个Github上开源的接口文档,感谢作者。

我主要用到这两个里边的接口,接口文档都很详细,需要的可以去看,另外还有一些黑科技,比如有些接口可能只有自己去抓包才拿得到了,关于抓包,我都是使用Mac上的Charles,使用Ios的B站客户端去进行抓包,还有需要Appkey可以抓下自己帐号的key,可以获取到一些需要key的接口数据,附上Charles的抓包教程,抓包教程

当然这里在悼念下FuckBiliBili这个网站,( ゜- ゜)つ。

3.material design

B站可能是最早使用MD应用之一,做的很也好,当时更新后,感觉太给力了,本人是个MD的狂热粉,
所以高仿大部分其实也是仿界面效果,大部分都已实现了,各位可以下载Apk看效果。

4.关于整体架构

因为这个项目起手的比较早,当时还不知道MVP,MVVM这些东西,所以还是老一套的MVC,想过用MVP重构,但是发现东西有点多,立个flag,后期会慢慢用MVP改进,把模块更新清晰化,现在项目是以模块来进行分包,方便维护。

5.播放器问题

最早我使用的是Vitamio播放器来实现的视频播放,但是Vitamio居然不支持api22以上,所以最后我还是换了B站自家的ijkplayer,毕竟B站出品,必属精品,ijkplayer,烈焰弹幕库,主题切换库等都是质量非常高的开源库,关于ijkplayer,可以参考下这个jjdxm_ijkplayer

6.AppKey的问题

B站之前的官方开放接口文档中,请求接口是需要带一个AppKey参数的,不然会请求失败,目前该项目中使用的接口中,用到AppKey的几个接口,请求一周更新的二三次元番剧,分区的详情列表数据,视频相关列表查询这几个用到了AppKey,不过现在AppKey一Key难求,已经申请不到了,我手上只有一个私用的,所以需要用到的同学可以自己google下,找下神Key,或者自己抓包获取,上边已经给出了我使用的抓包方法,实在找不到的话,也没关系,影响也不大,目前GitHub已经开源了很多不需要key也能请求数据的接口了。

总结

这个项目也完成的七七八八了,主要现在人太懒,只有周末更新下,不过我会持续更新该项目,有任何问题,意见或者bug都可以给我提issuse,我会第一时间关注并解决,剩下的功能我会尽快完善,如果有对这个项目感兴趣的同学,可以一起加入进来,一起完善这个项目。

最后

喜欢的朋友的可以关注下,做这个开源项目只是为了信仰,还有就是希望能帮助到同样有信仰的同学们,所以如果你觉得还不错的,请在Github上给个star,支持下,谢谢啦,(●'◡'●)ノ♥,

哔哩哔哩 - ( ゜- ゜)つロ 乾杯~ - bilibili。