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 |
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
總結
一個 App 從構思到上架,還是需要花不少精力和時間的,如果沒有充足的業餘時間,即使功能簡單的 App 也是不容易做好的。如果能在這個過程中感受到親自打磨產品的激情和樂趣,那將會對產品質量產生無盡的力量,希望每個開發者都能做出自己心儀的 App!
最後,如果文章內容對你有幫助,歡迎大家到 Github 給我個 Star:JReadHub,或者對這個庫有什麼改進的建議,給我提 Issue 或者 PR,大家共同進步!