By 高焕堂 2011/09/14
框架API的威力:掌握竞争主导权
- 框住应用程序:开放&制约&赠送
- 以Android HAL为例:没钱就改版,改版就有钱
1. 框住应用程序:开放&制约&赠送
1.1 情愿者来上钩
将框架当做礼物送人,能扩大影响力,是对框架提供者非常有利的事。然而,为什么AP开发者会情愿接受这种礼物呢? 这就如同姜太公渭水河钓鱼:愿者上钩。虽然传说中的姜太公钓鱼是离水三尺,但是鱼钩上附有鱼饵,可吸引鱼儿跃上三尺高来吃鱼饵,就是所谓的「愿者上钩」了。
框架内含一些基类,而基类又内含一些函数;在这些函数里,可以撰写各式各样的程序代码,来服务让应用子类(即让子类来呼叫),这些程序代码就是附在基类API上的鱼饵了。于是:
- 框架(基类)开发者:姜太公。
- AP开发者:鱼妈妈。
- 框架(基类)程序代码:鱼饵。
- 应用程序(AP):鱼小孩。
1.2 鱼饵与AP开发者的两道奶水
应用程序(AP)所依赖的主要成长奶水是:API与SDK。在刚才的「姜太公钓鱼」比喻中,可看到,AP开发者就像一位妈妈,依赖API幕后的基类程序代码来抚养小孩,这小孩就是AP。透过框架API能够呼叫到幕后的基类程序代码,于是许多人将框架API形容为AP成长的主要奶水。除了框架API之外,而SDK则是被称为另一道奶水。在这里,兹以建造房子来做比喻,更能说明API与SDK之角色。
API就像房子或大厦的骨架;而SDK就像大厦的鹰架(又称脚索架):
- API是大厦的骨架:框架API(即建筑物的骨架),可协助AP开发者(即建筑工程师),建立应用子类(即地面上的楼房)。而「基类(即地基) + API(骨架) + 子类(即楼房)」就是整个大厦建筑物了。所以框架API也是大厦成长的奶水。
- SDK是大厦的鹰架:像Android SDK和Android NDK (即鹰架)就是AP开发者必须用到的软件工具,用来协助开发者,让AP(即大厦)的开发工作更简洁、更顺畅。
1.3 以「木瓜与小鸟」来做比喻
刚才使用「鱼饵引诱鱼儿上钩」来比喻,似乎让人觉得对鱼儿是非常不利的,因为鱼钩会伤害到鱼儿的身体。为了避免这个比喻上的偏颇,兹再以「木瓜与小鸟」来做另一个比喻:
- 框架(基类)的程序代码是木瓜肉(又红又甜的部份)。
- 框架API是木瓜的种子。
- AP就是小鸟,其吃下木瓜肉和种子而长大。
因为木瓜好吃,所以常常来,或不想离开(即上钩了),所以也是「愿者上钩」,但是木瓜对于小鸟来说是有利而无伤害的。同样地,Android框架对于AP开发者或AP本身也是没有伤害的。
1.4 强龙与地头蛇:强龙不压地头蛇
自古有言:「强龙不压地头蛇」。这是来自<<西游记>>第45回里所写的:
『你也忒自重了,更不让我远乡之僧;也罢,这正是强龙不压地头蛇。』
强龙不压地头蛇,其意味着:
- 强龙不会档住地头蛇的财路,
- 反而会协助地头蛇不断成长。
相对上,木瓜树就是「强龙」角色;而小鸟则是「地头蛇」角色。木瓜免费提供又红又甜的木瓜肉给小鸟吃,让小鸟长得强壮,能飞得更远。此外,还把木瓜种子做很精致的方式包装,让种子既不会伤害小鸟,而且种子也不会被小鸟所伤害(例如被消化掉)。如此,木瓜帮助小鸟长大,愈强壮小鸟就能够将木瓜种子携带到愈遥远的新土地上,大图拓展了木瓜的地盘。强龙与地头蛇形成一个极佳的双赢合作模式:
◆ 强龙帮助地头蛇成长壮大。
◆ 地头蛇帮助强龙拓展版图。
以Android手机平台为例,Google扮演「强龙」角色;而AP开发者则扮演「地头蛇」角色。Google也尽到强龙的任务:
- 提供Android 框架API和Android SDK(含Android NDK)两道奶水,协助AP开发者(即地头蛇)。
AP开发者也尽到责任:全球的Android AP开发者已经替Google强龙开发出数十万支的AP(即以奶水去养了数十万个活泼可爱的小孩),让Android手机版图持续扩大,跃升为全世界最畅销的智能型手机了。这也等于帮助Google拓展了版图。
2. 没钱就改版,改版就有钱
上述谈到了,强龙提供两道奶水:框架API和SDK(含NDK)来协助地头蛇开发AP或驱动程序。这些是软件开发(即生产)阶段的协助,仅是强龙的「必备」条件而已。如果想成为真正强龙的话,还需要一项「充分」条件:协助地头蛇去赚钱(即营销)。其中,大家最熟悉的就是:让地头蛇能够「没钱就改版,改版就有钱」。于此,兹拿HAL框架为例,说明「没钱就改版」的实践途径。[歡迎光臨 高煥堂 網頁: http://www.cnblogs.com/myEIT/ ]
2.1 拿万里长城来比喻
为了说明HAL框架与「没钱就改版」的逻辑关系,于此兹拿万里长城来比喻HAL框架。万里长城攸关三方面的利益:
- 关内居民最先获利
- 关外居民获利较小
- 万里长城主导者获利最大(但获利较慢)
2.2 自由度的来源:以HAL框架为例
Google强龙开发Android HAL(Hardware Abstraction Layer)驱动框架(它是用来衔接硬件组件的驱动程序),然后拿它当做礼物来赠送硬件厂。这让全球硬件厂获得「没钱就改版」的自由度,因而大受欢迎和支持,于此就来说明这项自由度来源。
2.2.1 Android HAL框架的商业效益
HAL框架就像一座万里长城,将整个Android平台分隔开来,分成关内和关外两部分。如下图:
图1 HAL框架将Android平台分成关内和关外
HAL框架将平台分隔开来。成为两部分。其中,
- 关内:如上图所示,包含HAL框架内的驱动程序(如GPS、Bluetooth、WiFi等),以及HAL框架之下的Linux内核组件。
- 关外:则包括HAL框架之上的各部份(如Libraries、Application Framework、Android Runtime等)。
根据万里长城的攸关利益,可以知道关内是优先获利者,其主要获得了「自由度」,例如自己决定睡觉到什么时刻才起床,不必因关外民族入侵而被迫起床避难。由于万里长城的分隔(Separate),让关内居民不会受到关外的干扰,而拥有自由度。同理,由于HAL框架的分隔,让HAL框架之下(即关内)的驱动程序不受框架之上(关外)的牵制或干扰,而获得变动自由度;于是,驱动开发者(硬件供货商)拥有自由度(容易改版)。
2.2.2 HAL框架的内涵
HAL是以C语言撰写的框架,其主要结构如下图:
图2 HAL是以C语言写成的驱动框架
由于C语言不是对象导向(Object-Oriented)语言,它没有类别(Class)机制,但可以拿C语言的结构(struct)机制来表达「型态」(Type)概念。简而言之,在C++里,我们是以类别来表达型态概念;而在C语言里则是拿结构来表达型态概念。例如,上图里的hw_module_t就是hw_module_type的缩写,意味着它是一个型态;而open()就是定义于hw_module_t型态(相当于C++或Java的类别)里的抽象函数。由于hw_module_t内含抽象函数,它是一个抽象型态,相当于C++或Java的抽象类别,也就相当于C++或Java里的基础类别(Base Class,简称基类)。所以,hw_module_t就是HAL框架里的基础型态(即基类),其内含的open()抽象函数就成为HAL框架的主动型API。此外,HAL框架也提供hw_get_module()具象函数给其它Client模块来呼叫,这具象函数就成为HAL框架的被动型API。
2.2.3 自由度的表现:「没钱就改版」
驱动程序开发者撰写HAL的子类(又称为HAL的Stub模块),并实作open()函数。如下图:
图3 撰写HAL框架的子类
由于基类提供主动型API,拥有高度的制约力量,所以敢开放给子类去自由改版,产生子类的差异化,带动了驱动程序差异化,也带动了硬件组件差异化,创造高利润。随然子类受制于基类的主动型API,但是它的改变并不会牵动基类以外的模块,没有涟漪效应,变动成本低,客户愿意改版,带来改版(及差异化)机会。
同理,驱动程序的改变并不会牵动上层(即Libraries和Runtime等Android核心模块),没有涟漪效应,变动成本低,客户愿意改版,带来改版机会。基于这项自由度,驱动程序就能随时改版,尤其是没钱时,就能加速改版。这就是所谓的「没钱就改版」。驱动程序的「没钱就改版」,也意味着硬件组件的「没钱就改版」,这种自由度替全球各硬件厂商带来差异化的机会,亦即创造了有利的商场竞争优势。
3. 改版能赚大钱
3.1 以HAL框架的效益为例
刚才,兹以万里长城来比喻HAL框架,说明了Android HAL框架的首先获利者是全球的手机硬件厂(如HTC、Motorola等)。他们获得了驱动程序和硬设备的变动自由度和自主性;因此,获得「没钱就改版」的创意机会。
「没钱就改版」只是必备条件,并不充分。如果能够获得充分条件:改版又能卖钱;那就更完美了。不仅仅位于底层(即C/C++层)的HAL框架能带来「没钱就改版,改版就有钱」的商业效益;另外位于上层(即Java层)的应用框架(Application Framework)也能带来「没钱就改版,改版就有钱」的美好效益。
刚才,兹以万里长城来比喻HAL框架,说明了Android HAL框架的首先获利者是全球的手机硬件厂(如HTC、Motorola等)。他们获得了驱动程序和硬设备的变动自由度和自主性;因此,获得「没钱就改版」的创意机会。
「没钱就改版」只是必备条件,并不充分。如果能够获得充分条件:改版又能卖钱;那就更完美了。也就说,「没钱就改版,改版就有钱」才是一个完美的境界。
3.2 HAL带给驱动程序的「改版就有钱」
Google强龙为了替硬件厂商(即地头蛇)解决上述的困境,就采取下述对策:
- 让驱动程序可以从Linux的内核空间(Kernel Space)里移出来,摆入HAL框架区域内,此区域属于用户空间(User Space)。
- 驱动程序摆在HAL框架的用户空间里,采取ASL自由软件协议,而避开了GPL协议。
- 采用ASL协议,驱动程序不必提供原始码,也不必送审,就能卖钱。因而,获得「没钱就改版,改版就有钱」的高获利商机。
Google掌握HAL框架,藉由HAL的主动型API来包容驱动程序的改版机会。由于驱动程序不必开放原始码,保护硬设备的机密性,因此不仅容易改版,还能卖钱,所以地头蛇会日益壮大,更有力量支持Google强龙。同时,Google强龙(盟主)地位自然形成了。◆
[Go Back]