|
OpenAMS应用方案打造DIY手机
摘要
现在的手机在可定制方面多是允许用户设置墙纸和切换主题风格,智能手机则还支持应用下载安装执行.
作为应用开发者,你是否有想过拥有这样一部几百元钱的”智能”手机:可以使用自己开发的应用程序,可以随意修改程序功能和风格以满足个人使用习惯,可以任意定制手机软件和风格成IPHONE/NOKIA风格,或者你可以自己设计一个全新的手机产品?
作为普通使用者,你是否有想过你的手机不需要任何辅助工具,通过内置的刷机程序只要几分钟时间就变成另一部功能和风格完全不同的手机?
OpenAMS手机应用方案就可以让你随心所欲DIY手机.
注:本文所述的手机DIY只是针对软件,而不是对硬件DIY.
详情请访问个人网站:www.openams.cn
1. OpenAMS软件平台介绍
充分考虑开发者的创造力体现方式、手机厂商的产品差异化和市场快速响应需求、以及手机用户体验和个性化需求,OpenAMS软件平台致力追求的目标就是最容易编程的手机软件开发平台、最快捷的手机产品定义和发布平台、最佳用户体验的手机产品。
OpenAMS软件平台是能够在所有可能的手机中运行的统一开放的、可扩展的、支撑手机应用及服务的开发和运行环境。OpenAMS软件平台可完全替代目标平台应用框架,或者做为目标平台应用框架的一个有机扩展。
OpenAMS软件平台由集成开发环境、终端运行环境、应用发布服务、产品定义发布服务组成。
OpenAMS集成开发环境提供开发和调试手机应用的模拟环境,开发者无须了解复杂的目标操作系统和硬件即可开发平台无关的手机应用,而且提供丰富并实用的组件(包括控件和应用组件)和组件扩展机制,帮助快速开发,激发创意灵感,从而更加丰富现有组件库。
OpenAMS终端运行环境帮助featurephone实现smartphone的丰富功能、用户体验和个性化需求,唯一受限的是先天性的主频低内存小。。应用OTA和AppRunner功能使得featurephone也可像smartphone般方便的下载和运行应用软件,无须虚拟机支持,显然,执行效率更高
FeaturePhone FeaturePhone+OpenAMS SmartPhone
硬件模型 通信与应用合而为一的Chipset整合解决方案
处理器主频较低(26M~200MHz)、屏小(128x160、176x220、240x320)、内存小(2M、4M、8M) 应用与通信分离的AP+Module解决方案
AP处理器主频高,至少200MHz,屏大,内存大
开放性 封闭式架构,不能安装第三方应用,新增功能须预置 采用开放式操作系统AMOS,可以安装或直接运行第三方软件 AP采用开放式OS(Symbian、Linux、WindowsMobile、Palm),可以安装第三方软件
开发难度 基于目标平台开发,对应用开发人员要求较高,开发难度大 开放平台、开放接口,开发难度较低,
功能丰富性 不够丰富,功能预置,出厂后无法扩展新功能 集合全球资源开发应用,功能丰富,可通过下载安装第三方软件扩展新功能
界面丰富性 不够丰富、比较单一 丰富,因为可支持高效且丰富的图形库
成本 成本低,20~50USD不等 成本高,超过60USD
OpenAMS应用发布服务帮助第三方软件开发商、手机设计公司以及开发爱好者提供软件发布、运行、维护渠道,有源码、共享库、可执行程序三种级别的发布方式,无论是何种方式,都需要验证应用的安全可靠性,以确保终端用户的安全使用。
OpenAMS产品定义发布服务帮助手机制造商定义产品界面风格(比如开关机图片或者动画、开关机铃声、背景图片、字体风格大小、控件外观属性等等)和应用布局(比如OpenAMS平台启动时所运行的第一个应用、idle状态下各按键所代表的含义、应用目录树结构。产品定义发布系统使得产品定义就像看图填字一样简单,而且所见即所得,不用下载到手机即可看到完整的手机产品。
2.OpenAMS应用规范
2.1.应用模型:Package-Moudle-Applet
应用模型采用Package-Module-Applet的概念,其中,Package是一组相关功能Module集合,Module表示单一功能,可以是一个函数,也可以是一个线程,线程的实例就是Applet,Module可允许多实例同时运行或单一实例.
“PackageName”唯一标识一个Package
(“PackageName”,mod_id)唯一标识一个Module
使用者只须调用applet_start(PackageName,mod_id,arg)即可启动一个Applet,因此Package发布时须export所有Modules,即(“PackageName”,mod_id)集合,供平台或其它应用查询并调用.
比如”通信录”Package:
(“Contact”,MOD_DEFAULT):主应用入口
(“Contact”,MOD_SAVE_NUMBER):存储号码
(“Contact”,MOD_QUERY_NAME):按名称查询
(“Contact”,MOD_LIST):列出所有或某群组的联系人,供SMS/MMS选择接收者
比如”SMS”Package:
(“SMS”,MOD_DEFAULT):主应用入口
(“SMS”,MOD_QUERY):查询指定号码所有来往短信
(“SMS”,MOD_SEND):向指定号码发送短信
(“SMS”,MOD_SEND_CONTENT):将文本内容以短信方式发送
2.2.应用间通信机制:Mime-Service
考虑以下这样的case:
在浏览”通信录”中某个联系人时选择某个手机号码,或者在idle界面输入手机号码,然后确认,此时应该弹出针对该号码的可能操作,如:
 拨打电话,(“Call”,MOD_DIAL)
 拨打IP电话,(“Call”,MOD_IPDIAL)
 发送短信,(“SMS”,MOD_SEND)
 发送彩信,(“MMS”,MOD_SEND)
 发送QQ信息,如果手机绑定QQ的话,(“QQ”,MOD_SEND)
如果我们在程序中hardcode上述各应用调用的话,那么将会出现下面的问题:
1) 如果不支持QQ功能或者MMS,那么相关代码需要删除
2) 如果某个产品所定制的SMS的MOD_SEND值不一致,比如一个定义为4,一个定义为5,那么也需要修改代码
3) 如果某个产品支持更高级的功能,可以给该手机发送email,因为手机号码绑定了手机邮箱,或者提供了归属地查询,那么也需要修改代码,以支持新功能
其问题根源是要使用某应用功能,必须事先知道该应用的存在,应用间不能完全相互独立.
事实上,应用间的通信都是以”数据交换”为目的,手机应用之间的交互完全可以抽象为”基于不同数据类型的数据交换”.各应用只要向特定的”数据”注册自己的”服务”即可,其他应用可以根据”数据”查询到”服务”,从而可以请求服务.“数据类型”我们用MIMEtypes来标识,系统调用RegisterMimeService将Service与Module绑定起来,这样Module所提供的服务就以Mime-Service方式周知了.
以MIME(”text/cellno”)为例,有如下标准服务:“Send”,“Save”,“Query”.
“CONTACT”:
RegisterMimeService(“text/cellno”,“Save”,“Contact”,MOD_SAVE_NUMBER)
“SMS”:
RegisterMimeService(“text/cellno”,“Send”,“SMS”,MOD_SEND)
“MMS”:
RegisterMimeService(“text/cellno”,“Send”,“MMS”,MOD_SEND)
“CALL”:
RegisterMimeService(“text/cellno”,“Send”,“Call”,MOD_DIAL)
“CALL”:
RegisterMimeService(“text/cellno”,“Send”,“Call”,MOD_IPDIAL)
“QQ”:
RegisterMimeService(“text/cellno”,“Send”,“QQ”,MOD_SEND)
在上述实例中,系统仅须查询所有注册的(“text/cellno”,“Send”)服务,即可知道其他应用的存在,从而显示出正确的功能选择界面,而不用修改源代码.
针对”text/cellno”还有以下有用的应用实例:
“CallHistory”提供(“text/cellno”,“Query”)服务,查询该联系人的所有通话记录;
“SMS”提供(“text/cellno”,“Query”)服务,查询发送给和发送自该联系人的短信
“MMS”提供(“text/cellno”,“Query”)服务,查询发送给和发送自该联系人的彩信
那么在浏览联系人时,完全可以根据(“text/cellno”,“Query”)服务,快捷无缝的实时浏览该联系人相关的短信(比如以聊天的方式显示)和通话记录,而无须退出Contact,再到SMS/CallHistory应用中手工查询.
因此,Mime-Service使得应用间相互独立,所有应用可通过数据提供/请求服务,不同开发者所开发的应用可进行通信交流,从逻辑上保证了DIY思想的可行.
2.3.关于资源
程序所用的图片/不同语言版本的字符串/控件等都称为资源,打包成资源数据包,与程序是独立的,程序通过资源ID来访问不同的资源.这样的话,即使不是开发者,也可以根据自己的需要修改资源,而不改变程序行为,比如多国语言的支持.
3.采用OpenAMS应用方案的手机
采用OpenAMS应用方案的DIY手机二进制布局如下图所示:
|
|