Android Marketアーキテクチャ設計解析


原文の住所 http://blog.lytsing.org/archives/606.html
Android Marketアーキテクチャ設計解析
1.ソースコードがありません。2.反コンパイルツール(appdump/wiresthark)の研究を通して、100%の正確さは保証できませんが、全体の考えはやはり分かります。国内にも多くの第三者電子市場がありますが、神に似ていません。
Android Market Overview:Cient&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を後綴として、例えばAssset CategoryBrowserActivity.java appiディレクトリにおいて、BaseServiceのクラスを継承し、Serviceを後尾に、例えばAssset Service.java modelディレクトリにProtbuf TAGのクラスを提供し、Prottoを後尾にします。
使用するデザインモード
MVC、COR、Observer、Stte、Singleton、Abstact Factoryなど、Androidのソースコードを見るのが一般的です。このほか、Server/Clientネットワークシステムに対して、Service Locator、Request-Resonse、lazyloadなどの設計方法も用いられます。
データ交換フォーマットprotobuf
はい、 Protocol Buffers in Android ちょっと説明しましたが、プロトブ転送はバイナリで、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 # ls
AVMC_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_-2863385711196347958
AVMC_UGIR_-4594342797900232749
AVMC_UGIR_-5005302620309917353
AVMC_UGIR_-543419988153558802
......
AVMC_UGIR_-5434988153558802のフォーマットは「AVMC_」+「U」/「S」+「GIR_」+asetIdです。
その他類似
具体的な実現は、libaddresinputを参照することができます。 の中の Cache.java
ローカルデータベース/data/data/com.android.vending/databases/assets.dbそれをpullに出して、sqlite 3ツールでデータテーブルが見えます。これは主にダウンロードしたアプリ情報を保存するために使います。
PUSHのお知らせ
ソフトウェアの更新がある場合は、プッシュプッシュでメッセージを送ります。push機構は、android froyoの前に、XMPPプロトコルを使って、その後c 2 dmです。
支払いシステム
Google checkoutは、使ったことがありません。
まだ細かいところがたくさんあります。いちいち詳しく述べません。つまり、このようなプラットフォームを作るには、考えなければならないことが多すぎます。