Android Market 架構設計解析

來源:互聯網
上載者:User
原文地址 http://blog.lytsing.org/archives/606.htmlAndroid Market 架構設計解析

1. 沒有原始碼。
2. 通過反編譯工具(apktool/dex2jar),察看網路資料包工具(tcpdump/wireshark)研究,不能保證100%的正確,但整體的思路還是能看出來的。國內也有很多第三方電子市場,但形像神不像。

Android Market Overview : Client & Server

大致的代碼目錄(android 1.5版本, 後續版本比較複雜):

Vending|-- AndroidManifest|-- res|   |-- drawable|   |-- drawable-finger|   |-- layout|   |-- menu|   |-- values|   `-- xml`-- src    `-- com        |-- android        |   `-- vending        |       |-- SuggestionsProvider.java        |       |-- ...        |       |-- VendingNotificationManager.java        |       |-- adapters        |       |   |-- AggregatedAdapter.java        |       |   `-- SectionAdapter.java        |       |-- api        |       |   |-- ApiException.java        |       |   |-- ...        |       |   `-- UninstallReasonService.java        |       |-- cache        |       |   |-- CacheManager.java        |       |   |-- CacheManagerImpl.java        |       |   `-- Cacheable.java        |       |-- controller        |       |   |-- ActivityAccessor.java        |       |   |-- ...        |       |   `-- ResultsController.java        |       |-- licensing        |       |   |-- ILicenseResultListener.aidl        |       |   |-- ILicensingService.aidl        |       |   `-- LicensingService.java        |       |-- model        |       |   |-- Address.java        |       |   |-- ...        |       |   `-- UninstallReasonResponseProto.java        |       `-- util        |           |-- Base64.java        |           |-- ...        |           `-- Util.java        `-- google            `-- android                |-- googleapps                |-- googlelogin                `-- providers

代碼檔案命名規則

每個Activity,以Activity為尾碼,比如AssetCategoryBrowserActivity.java
api目錄中,繼承BaseService的類,以Service為尾碼,比如AssetService.java
model目錄中,提供Protobuf TAG的類,以Proto為尾碼,比如UninstallReasonResponseProto.java

用到的設計模式

MVC, COR(Chain Of Responsibility), Observer(Notification機制), State ,Singleton,Abstact Factory等,看Android的原始碼,這些都很常見。除此之外,對於Server/Client 網路系統,Service Locator, Request-Response,lazyload等設計方法也用到。

資料交換格式protobuf

在 Protocol
Buffers in Android 稍有提到過,protobuf傳輸的是二進位,比Json、XML有速度上的優勢和使用的方便,伺服器端可以用C/C++,Java,python等實現。

API

http://code.google.com/p/android-market-api/ 
Android Market 的開源 API 項目,非官方提供的,基於Google Protocol Buffers 協議實現。

Cache 機制
Cache 可以儲存在記憶體,也可以寫入disk上。

/data/data/com.android.vending/cache # lsAVMC_UAR{-5434199881535588028_}_____0_10_rei___AVMC_UAR{8501175443043592143_}_____0_10_rei___AVMC_UAR{}APPLICATION__APP_WALLPAPER_POPULAR_ALL_0_10____AVMC_UAR{}APPLICATION__APP_WALLPAPER_POPULAR_ALL_10_10____AVMC_UAR{}_____0_10__rvh__AVMC_UCR-5434199881535588028_0_3_self_AVMC_UCR8501175443043592143_0_3_self_AVMC_UGIR_-2863385711196347958AVMC_UGIR_-4594342797900232749AVMC_UGIR_-5005302620309917353AVMC_UGIR_-543419988153558802......

AVMC_UGIR_-543419988153558802的格式是這樣的:
“AVMC_” + “U”/”S” + “GIR_” + assetId

其他類似。

具體實現,可以參考libaddressinput 裡的 Cache.java

本機資料庫

/data/data/com.android.vending/databases/assets.db

把它 pull 出來,用 sqlite3 工具可以看到資料表。這個主要用來儲存下載過的apk資訊。

PUSH 通知

有軟體更新時,就用push推送訊息,com/google/android/server/checkin/CheckinService 收到訊息後,給market發送一個 “com.android.vending.UPDATES_AVAILABLE” intent。push機制,android froyo之前,用的是XMPP協議,之後是c2dm。

支付系統

Google checkout, 沒有用過。

還有很多很多細節的東西,不一一詳述。總之,做這麼一個平台,需要考慮的東西太多了,不是一個人可以搞出來的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.