抬头仰望星空,是否能发现自己的渺小。

伪斜杠青年

人们总是混淆了欲望和理想

仿APKPure应用商店 – 迟到的练手项目2

一:软件背景

原因一:一直以来想研究下安卓软件的包管理,同时因为现在对于MVP设计模式的不熟练,以及新兴技术的短缺(比如:腾讯四面的热修复),而实际是,我连Rx系列、okhttp的高级应用(拦截器等)、RxBus(界面更新,消息传递)等。。。都还没认真操办过,So,这是一个改写我简历的项目。

原因二:虚心听取腾讯一面,二面面试官的建议,继续保持良好的学习习惯,继续独立开发小应用,拓展自身技能,加强知识覆盖面与熟练度,避免再次成为‘差不多先生’。

实际上我个人并不担心这些新技术的使用,最担心的是其思想不能理解,所以这样的一个完整项目的需要性刻不容缓。从腾讯面试结束后就开始准备,大概过去两个星期了,也进行到了一知半解的程度(这句话是这样说的:学习的乐趣就在于前期为伊消得人憔悴的酝酿,在于中期一知半解的朦胧,在于后期柳暗花明的顿悟。)

二:软件涵盖的技术层面(截至2017.12.26 所有库均为最新版):

思想: 贯彻MVP架构(View Model Presenter,Google官方出品的Mvp架构项目),同时配合Dagger2(依赖注入(Dependency Injection),简称DI,又叫控制反转(Inversion of Control),简称IOC。)来实现依赖注入

涉及的框架:
-A rxjava响应式编程系列 一种基于异步数据流概念的编程模式
compile ‘io.reactivex.rxjava2:rxandroid:2.0.1’ //为Android提供响应式Api
compile ‘io.reactivex.rxjava2:rxjava:2.1.7’ //优雅的响应式Api解决异步请求

-B 监听注解 效(tou)率(lan)提高系列 JakeWharton大神出品的view注入框架
compile ‘com.jakewharton:butterknife:8.8.1’
annotationProcessor ‘com.jakewharton:butterknife-compiler:8.8.1’

-C dagger依赖注入思想 Google根据Square的Dagger1出品的依赖注入框架,通过apt动态生成代码,性能优于用反射技术依赖注入的框架
compile ‘com.google.dagger:dagger:2.14.1’
annotationProcessor ‘com.google.dagger:dagger-compiler:2.14.1’

-D 字体图标库 空间节省神器 适用于没有美工妹子的独立开发者
compile “com.mikepenz:iconics-core:3.0@aar”
implementation ‘com.mikepenz:ionicons-typeface:2.0.1.4@aar’

-E 依赖于okhttp的高级封装库(高级封装意味着,用起来更简单) Square出品的网络请求库,极大的减少了http请求的代码和步骤.
compile ‘com.squareup.retrofit2:retrofit:2.3.0’
compile ‘com.squareup.retrofit2:converter-gson:2.3.0’
// part of retrofit for rxjava
compile ‘com.squareup.retrofit2:adapter-rxjava2:2.3.0’

-D 当然 当然 少不了最大的okhhtp
compile ‘com.squareup.okhttp3:okhttp:3.9.1’
compile ‘com.squareup.okhttp3:logging-interceptor:3.9.1’

-E 另外一种多变换形态的图片加载框架(仅仅尝试,已使用Glide替换)
compile ‘com.squareup.picasso:picasso:2.5.2’

-F glide当代主流图片缓存(网络,cache,内存)加载框架
compile ‘com.github.bumptech.glide:glide:4.4.0’
annotationProcessor ‘com.github.bumptech.glide:compiler:4.4.0’
compile ‘jp.wasabeef:glide-transformations:3.0.1’
compile “com.github.bumptech.glide:okhttp3-integration:4.3.0”(暂时找不到用途)

-G path动画处理框架,一种优雅的svg动态/静态图片加载框架
compile ‘com.eftimoff:android-pathview:1.0.8@aar’

-H 一个比较好看的弹框样式(自定义view)
compile ‘com.github.thomper:sweet-alert-dialog:v1.4.0’

-I 权限 权限 权限 安卓6以上适配 说三遍(以前用的andPermission,这次换个口味)
compile ‘com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar’

-J RecycleView(我仿佛是上个世纪的人,上个项目里居然还在玩listview的优化)
compile ‘com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34’

-K Rxbinding 这货 在MVVM里见过,也是RXjava的一种,但是是针对view
compile ‘com.jakewharton.rxbinding2:rxbinding:2.0.0’

-L Rxbus 消息通知,界面刷新神器
 compile ‘com.hwangjr.rxbus:rxbus:2.0.0’

-M 伸缩文本 谷歌MD的1毛特效。。。
compile ‘com.ms-square:expandableTextView:0.1.4

-N 自定义的behavior 配合CoordinatorLayout
compile ‘com.zoonref:simple-view-behavior:1.0

-O RxCache(最后决定取消引入,因为bean中使用的泛型,不利于反序列化,但是单独的练手项目 会考虑再写一个)
//RxCache
compile “com.github.VictorAlbertos.RxCache:runtime:1.8.2-2.x”
compile “io.reactivex.rxjava2:rxjava:2.0.6” 
//RxCache组件
compile ‘com.github.VictorAlbertos.Jolyglot:gson:0.0.3’

-P RxDownload3(基于Kotlin学习目的,从RD2升到3基本已经看完源码,就不再造轮子了,直接加扩展了用)Kotlin Part
compile ‘zlc.season:rxdownload3:1.2.0
-Q 待补充

三:要实现的功能(截至12.21 已经基本完成,部分bug待修复)

应用列表(推荐、游戏、分类、专题)

使用retrofit从网络拿到数据后展示到包含4个Fragment的ViewPager中,当然加上Tab的外框,并给每个recycle条目加上点击事件,跳转到详情列表。右侧下载按钮可以具有7种状态的变化(安装,打开,下载,暂停,继续,需升级,删除)

下载(断点续传、下载管理)

Rxdownload3很好的实现了这个功能,在RxD2我对其进行了修改,因为2没有合理的判断其任务唯一性(多个url也可能是同一个任务),后来为了学习kotlin直接升到3并研究了其源码,当然断点的原理很简单,分段后使用range从服务端取文件即可

安装(静默安装、自动安装)

静默的方法有Root但是不仅仅局限于Root实现,也可通过Android源码中的Pm包来实现,但是这是具有兼容性问题的,一般对于厂商才会去使用,因为了解自身rom

搜索(热门搜索、历时搜索)

    所谓热门搜索,历史搜索功能,只是从服务端取和查后展示将数据暂时保存,下次再显示的增删改查

管理(app升级、本地app、卸载、下载记录)

    app升级就是将手机安装的app均发送到服务端去匹配版本,并返回需要升级的app列表,本地需要涉及到反编译那块儿,大量的使用反射去获取一些常规手段无法获取的内容,其主要的包为“android.content.res.AssetManager

设置(系统参数设置、个人信息设置)

这里就是一个SettingFragment,其数据变动的监听事件和响应事件,数据均在SharedPreference中,可以随时获取,在应用中加判断即可

四:软件界面(想仿酷安,但是现在像APKPure,前方多图,流量少慎行)

2017.12.21

想总结下 MVP+Dagger2+Retrofit+Rxjava 这几天做知识梳理,顺带可能需要生产些渣渣文章,图,,,可以是豌豆荚,可以是酷安,可以是应用宝,我的第一个项目就是以模仿为生,花时间打磨总可以做到相差无几。但是得思考其价值和意义

接下来的计划是 学习下JDK与JNI,顺便,开读《Andriod开发艺术探索》梳理整个安卓的知识体系,希望可以解惑。。。下次更新 。。。(估计要和简历一起更新,最近没有投简历的地方和欲望,就先不费这个神了)

成长,不急于一时,脚踏实地,慢慢来,像一位前辈说的一样 “慢” 往往更有成效。

立贴为证。梳理思路 和 (解决BUG开发中。多说无益,弄好的黑苹果,是应该用来办事的

前方多图。。。。。。。测试API:API26,24,22

1、启动界面与设置界面

2.登录与退出后的界面变化

3.下载管理以及状态变化(根据服务器状态,有时下载会有点慢)

4.升级、卸载

5.其他界面简单浏览

6.搜索功能以及遗漏

7.工程结构截图

其他的功能就不演示了,图片太大,服务器支撑不起,像静默安装等模拟器也没root权限,就不麻烦了,差不多了,完结(实际还有些细节问题,but,其价值并不大了)。

-TIL 2018.1.9最后更新配图

2018.5.7更新

针对新学习的Kotlin与组件化趁热打铁,用了几天时间,完成了项目重构,这次重构中,算是完全吃透了这个项目的内容,目前正在利用Kotlin特性进行优化处理,比如对RxDownload3扩展一波。经过这几天的思考,已经对Rx,dagger,retrofit有更深入的了解,但依旧有很多要学习的地方。

使用Kotlin后废弃的框架:

-B 监听注解 效(tou)率(lan)提高系列 JakeWharton大神出品的view注入框架
compile ‘com.jakewharton:butterknife:8.8.1’
annotationProcessor ‘com.jakewharton:butterknife-compiler:8.8.1’

-K Rxbinding 这货 在MVVM里见过,也是RXjava的一种,但是是针对view
compile ‘com.jakewharton.rxbinding2:rxbinding:2.0.0’

Kotlin语法糖+组件化,简直不能再优雅。data class、init代码块、进阶的lambda每一个特性,都是开发中常用的,这里给Kotlin点个赞

完结撒花。源码:https://github.com/Anr-C/APP-AppStore


本站由以下主机服务商提供服务支持:

4条评论

  • 搞事

    有没有源码看看的啊,大佬

    • Mosaic-C

      源码已上传,https://github.com/TIL-MICE/APP-AppStore

  • 晨鹤

    dalao 不知道有没有测试账号呢

    • Mosaic-C

      目前很多数据已经失效,建议自己弄数据搭建后台。

发表评论