高仿哔哩哔哩动画安卓客户端 - ( ゜- ゜)つロ 乾杯~ - bilibili
2016-09-11 23:30 阅读(240)


bilibili.JPG

前言

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


bilibili-logo

Tips

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

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

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

Github地址

OhMyBiliBili

截图















22.png

介绍

使用到的开源库

目前完成的功能

未完成的功能

遇到的一些问题

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。