Readhub App 上架 Google Play Store 實錄及技術要點總結

guanpj發表於2019-03-08

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
  • 新話題懸浮提示
  • 使用向量圖減少安裝包體積

專案預覽——夜間模式

起始頁 主選單 首頁
news
news
drawer
即時檢視 話題詳情 文章網頁
news
news
drawer
本地搜尋 設定 關於
news
news
drawer

專案預覽——藍色主題(預設)

起始頁 主選單 首頁
news
news
drawer
即時檢視 話題詳情 文章網頁
news
news
drawer
本地搜尋 設定 關於
news
news
drawer

使用到的第三方開源庫

專案名稱 簡介
RxJava 一個專注於非同步程式設計與控制可觀察資料(或者事件)流的 API
RxAndroid 在 Android 中使用 RxJava
Retrofit HTTP 請求工具庫
ButterKnife 強大的註解框架,提供檢視和事件繫結
Dagger 依賴注入框架
Fragmentation 強大的 Fragment 管理庫
ExpandableLayout 支援展開和收縮子 View 的 Layout
FlowLayout Android 流式佈局,支援單選、多選等,適合用於產品標籤等
leakcanary 使用於 Android 和 Java 和記憶體洩漏檢查工具
AgentWeb Android WebView 框架
Android-HeaderAndFooterRecyclerView 支援新增頭部和尾部的 RecyclerView
Android-Debug-Database 用於除錯 Android SQLite 和 Shared preferences 的庫
Bugly 幫助開發者快速發現並解決異常,同時掌握產品運營動態,及時跟進使用者反饋
Tinker Android 熱修復解決方案,支援 dex,library 和資源更新且不用重新安裝 app
walle Android Signature V2 Scheme 簽名下的新一代渠道包打包神器

使用到的工具/網站

網站名稱 簡介
Iconfont 阿里巴巴向量圖示庫,提供了本專案中的大部分向量圖
aconvert 線上調整圖片大小(PNG, JPG 和 GIF)
convertio 線上影象檔案轉換器,支援 SVG 轉換成 PNG
logoko 線上 logo 設計
圖幫主 線上平面設計
shields metadata 圖示設計
compresspng 線上壓縮 PNG 影象

感謝

第三步:申請各大應用市場的開發者賬號

要上架到應用市場,必須要申請相應平臺的開發者賬號,目前國內主流的應用市場開發者賬號申請地址如下:

  • Google Play (註冊需要繫結一個可用於境外支付的信用卡,費用是 29 美刀)
  • 豌豆莢、PP 助手、YunOS 應用商店等(首先需要實名認證,然後需要申請 App 的軟體著作權或者上傳一份開發者宣告,本 App 因為該平臺不允許個人上架新聞類應用被拒絕。。。)
  • 騰訊應用寶(實名認證 + 軟體著作權)
  • 酷安市場(之所以叫酷安,是因為他們只接受比較庫的應用,再次被拒絕。。。)
  • 小米應用市場(實名認證 + 。。。)

第四步:打包釋出

多渠道打包工具: 強烈推薦多渠道打包神器 —— walle

用法: Walle多渠道打包&Tinker熱修復

總結

一個 App 從構思到上架,還是需要花不少精力和時間的,如果沒有充足的業餘時間,即使功能簡單的 App 也是不容易做好的。如果能在這個過程中感受到親自打磨產品的激情和樂趣,那將會對產品質量產生無盡的力量,希望每個開發者都能做出自己心儀的 App!

最後,如果文章內容對你有幫助,歡迎大家到 Github 給我個 Star:JReadHub,或者對這個庫有什麼改進的建議,給我提 Issue 或者 PR,大家共同進步!

相關文章