Readhub App 上架 Google Play Store 实录及技术要点总结

本文介绍了一款名为JReadHub的科技新闻客户端的开发过程,包括抓包解析Readhub API、采用MVP+dagger2架构、Retrofit+RxJava网络请求、Room+RxJava本地存储等技术细节,以及上架应用市场的经验分享。

Readhub 是一个专注于科技新闻实时分享的网站,从一开始发布到现在一直都是我获取信息的重要渠道,目前只有网页端和小程序可用,一次偶然的灵感让我决定自己做一个客户端。

成品展示:JReadHub

第一步:抓包

想要获取数据,首先要知道获取数据的 API,在没有任何官方文档的前提下,只有抓包能够解决这个问题。

工具: Fidder 4

使用方法: Fiddler - 超好用的http抓包工具使用介绍

抓包结果:

public static final String HOST = "https://api.readhub.me/";

// 热门话题列表
@GET("topic")
Observable<DataListBean<TopicBean>> getTopicList(
        @Query("lastCursor") Long lastCursor,
        @Query("pageSize") int pageSize
);

// 其它模块新闻 type
public static final String TYPE_NEWS = "news";// 科技动态
public static final String TYPE_TECHNEWS = "technews";// 开发者资讯
public static final String TYPE_BLOCKCHAIN = "blockchain";// 区块链快讯
public static final String TYPE_JOBS = "jobs";// 招聘详情

// 其他模块新闻列表
@GET("{type}")
Observable<DataListBean<NewsBean>> getNewsList(
        @Path("type") @Constants.Type String type,
        @Query("lastCursor") Long lastCursor,
        @Query("pageSize") int pageSize
);

// 即使查看
@GET("topic/instantview")
Observable<InstantReadBean> getTopicInstantRead(@Query("topicId") String topicId);

// 话题详情
@GET("topic/{topic_id}")
Observable<TopicDetailBean> getTopicDetail(@Path("topic_id") String topicId);

// 相关话题
@GET("topic/related")
Observable<List<RelevantTopicBean>> getRelateTopic(@Query("entityId") String topicId,
                                                  @Query("eventType") int eventType,
                                                  @Query("order") long order,
                                                  @Query("t") long timeStamp);

// 最新消息
@GET("topic/newCount")
Observable<NewTopicCountBean> getNewTopicCount(@Query("latestCursor") Long lastCursor);
复制代码

第二步:开发

特点

  • 采用 Google Material Design 风格
  • 采用 MVP + dagger 2 架构进行解耦
  • 网络请求使用 Retrofit + RxJava
  • 本地数据库采用 Room + RxJava
  • 主题切换,支持夜间模式
  • 集成 Tinker 并支持应用内更新
  • 侧滑返回
  • 支持 CustomTabs
  • 新话题悬浮提示
  • 使用矢量图减少安装包体积

项目预览——夜间模式

起始页主菜单首页
即时查看话题详情文章网页
本地搜索设置关于

项目预览——蓝色主题(默认)

起始页主菜单首页
即时查看话题详情文章网页
本地搜索设置关于

使用到的第三方开源库

项目名称简介
RxJava一个专注于异步编程与控制可观察数据(或者事件)流的 API
RxAndroid在 Android 中使用 RxJava
RetrofitHTTP 请求工具库
ButterKnife强大的注解框架,提供视图和事件绑定
Dagger依赖注入框架
Fragmentation强大的 Fragment 管理库
ExpandableLayout支持展开和收缩子 View 的 Layout
FlowLayoutAndroid 流式布局,支持单选、多选等,适合用于产品标签等
leakcanary使用于 Android 和 Java 和内存泄漏检查工具
AgentWebAndroid WebView 框架
Android-HeaderAndFooterRecyclerView支持添加头部和尾部的 RecyclerView
Android-Debug-Database用于调试 Android SQLite 和 Shared preferences 的库
Bugly帮助开发者快速发现并解决异常,同时掌握产品运营动态,及时跟进用户反馈
TinkerAndroid 热修复解决方案,支持 dex,library 和资源更新且不用重新安装 app
walleAndroid Signature V2 Scheme 签名下的新一代渠道包打包神器

使用到的工具/网站

网站名称简介
Iconfont阿里巴巴矢量图标库,提供了本项目中的大部分矢量图
aconvert在线调整图片大小(PNG, JPG 和 GIF)
convertio在线图像文件转换器,支持 SVG 转换成 PNG
logoko在线 logo 设计
图帮主在线平面设计
shieldsmetadata 图标设计
compresspng在线压缩 PNG 图像

感谢

第三步:申请各大应用市场的开发者账号

要上架到应用市场,必须要申请相应平台的开发者账号,目前国内主流的应用市场开发者账号申请地址如下:

  • Google Play (注册需要绑定一个可用于境外支付的信用卡,费用是 29 美刀)
  • 豌豆荚、PP 助手、YunOS 应用商店等(首先需要实名认证,然后需要申请 App 的软件著作权或者上传一份开发者声明,本 App 因为该平台不允许个人上架新闻类应用被拒绝。。。)
  • 腾讯应用宝(实名认证 + 软件著作权)
  • 酷安市场(之所以叫酷安,是因为他们只接受比较库的应用,再次被拒绝。。。)
  • 小米应用市场(实名认证 + 。。。)

第四步:打包发布

多渠道打包工具: 强烈推荐多渠道打包神器 —— walle

用法: Walle多渠道打包&Tinker热修复

总结

一个 App 从构思到上架,还是需要花不少精力和时间的,如果没有充足的业余时间,即使功能简单的 App 也是不容易做好的。如果能在这个过程中感受到亲自打磨产品的激情和乐趣,那将会对产品质量产生无尽的力量,希望每个开发者都能做出自己心仪的 App!

最后,如果文章内容对你有帮助,欢迎大家到 Github 给我个 Star:JReadHub,或者对这个库有什么改进的建议,给我提 Issue 或者 PR,大家共同进步!

转载于:https://juejin.im/post/5c81ce3ae51d4539b639b32e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值