规范规定了一套通用的接口规则,每个实现该规范的厂商都要100%全部实现该规范中的所有接口,规范不会关心各硬件厂商底层具体怎么实现这些接口。各厂商还可以在规范的标准上开发自己的扩展接口用以实现自己硬件的特殊功能。但是只要宣称自己支持某个规范就必须100%的实现所有接口,自己的实现只能是该规范的超集 。比如说Nokia某个设备支持MIDP 2.0,但是Nokia又自己扩展实现了一些自己的Nokia API诸如FullCanva, 开发者可以完全使用MIDP的标准来开发实现自己的应用程序,也可以联合Nokia API来实现,开发者并不需要去关心Nokia底层是如何编译自己的API代码来生成java bytecode的。再比如说OpenGL 1.1是一个行业规范,硬件厂商可以生产出实现该规范的设备,nVIDIA 或者ATI的设备只要支持该规范就行,具体他们自己怎么实现的是他们自己的事情,作为我们Developer只要学习OpenGL规范的接口就行了。
一 般而言,一个公司如果想要开发一套新的平台,他会首先实现自己平台的一个Runtime环境/虚拟机,并支持一个通用的规范,然后自己在该规范上再开发一 套符合自己平台特性的API,并配有一些特定的tool/command来协同编译,生成自己平台的中间代码,然后Runtime环境执行这个自己平台特 有的中间代码来运行程序。比如Android平台支持Java标准规范(并非Sun的J2SE/J2ME),并配有自己的Dalvik virtual machine, 编译代码成Dalvik Executable(.dex)格式,这就好像是J2ME平台下的Java bytecode,只是这个.dex是Android Dalvik virtual machine所特有的。
在 当今移动行业平台如此繁杂的情况下,是不可能允许编程人员完全重头开始使用该公司的特有API来实现自己的应用程序(当然如果为了寻求性能,就要尽可能多 的采用平台特有的API),而可以找到对应于该平台实现规范平台的一个类似的平台产品(比如都支持Java),稍作修改来移植到新的平台上面。我们所需要 做的就是修改原有的代码,实现一些平台特有的属性及实现,诸如应用程序的Entry Point,EventListener等。这样就可以最快速的开发出满足行业要求的新平台的产品。