Android Market 架构设计解析
来源:互联网 发布:淘宝开网店照片怎么拍 编辑:程序博客网 时间:2024/05/23 12:06
原文地址 http://blog.lytsing.org/archives/606.html
Android 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, 没有用过。
还有很多很多细节的东西,不一一详述。总之,做这么一个平台,需要考虑的东西太多了,不是一个人可以搞出来的。
- Android Market 架构设计解析
- Android Market中产品图标设计原则
- 实战解析Android架构设计原则
- 实战解析Android架构设计原则
- 实战解析Android架构设计原则
- 实战解析Android架构设计原则
- 实战解析Android架构设计原则
- Android Market
- Android Market
- Android Market
- [转]实战解析Android架构设计原则
- Android Market 注册成功
- 为了注册Android market
- 模拟器安装android market
- Android Market api
- android market collect
- android market 选择
- android market 开发者注册
- 设计模式——责任链模式_Chain of Responsibility Pattern
- swf导出exe
- Oracle之常用FAQ--Oracle 构架体系
- 用java写一个HelloWorld
- 一道腾讯的面试题
- Android Market 架构设计解析
- ExtJs2.0学习系列(2)--Ext.Panel
- 火狐插件- 显示时区 FoxClocks
- SQL 语句汇总(三)
- 随即数的生成方式
- SQL语句汇总(二)
- jquery地址
- (数据结构与算法分析 三)------栈的实现(包括链栈和数组实现栈 Java语言描述)
- SQL语句汇总(一)