在Android手机上实现WinCE/Android混合API的方法

文档序号:6341288阅读:547来源:国知局
专利名称:在Android手机上实现WinCE/Android混合API的方法
技术领域
本发明涉及一种Android手机领域,尤其是一种在Android手机上实现WinCE/ Android混合API的方法,其显著的特点是使程序员在开发Android应用软件时在程序中既 可以调用WinCE的功能,又可以调用Android本身的功能。
背景技术
以手机为代表的智能化移动终端设备既是计算机技术的一个重要发展方向,又是 一个竞争十分激烈的市场。自从谷歌公司和开放手机联盟推出Android操作系统和基于 Android的手机以来,很快就在世界手机市场上占有了不小的份额,各种Android手机层出 不穷,由中国移动开发并推出的OPhone也是基于Android的,也是一种Android手机。所谓Android操作系统,实际上是对Linux操作系统的一种改编和扩充,它的内核 基本上就是Linux的内核,但是在用户空间却专门针对手机和移动终端设备的特点作了大 幅的改进和增强,这些改动大都与编程模式和图形界面、即图形化用户界面(GUI)有关。另一种常用于手机的操作系统是微软的WinCE和丽、即Windows Mobile,这是在 微软的Windows操作系统上发展起来的。基于WinCE/WM的手机也在市场上占不小的份额, 并且开发出了数量不小的WinCE/WM应用软件。如果能把这些应用软件拿到Android手机 上运行,对于提高Android手机的市场占有率显然是有利的。通过把开源软件Wine移植到Android手机上,把本应由Windows提供的支撑 嫁接到Linux上,并对其加以扩充、使其支持WinCE/WM,可以让WinCE/WM应用软件直接 在Android手机上运行、实际上是在Android手机的Linux内核上运行。这样,原来熟悉 WinCE/WM软件开发的人就可以按原来的模式、在原来的开发环境中、使用原来的开发工具、 像开发WinCE/WM软件一样地开发Android软件,而且开发出来的软件既是WinCE/WM软件 又可以在Android手机上运行,这对于开发者也是很有利的。可是,这样开发出来的软件实质上仍是纯粹的WinCE/WM软件,其基础是由WinCE/ WM承诺提供的各项功能。事实上,没有一种应用软件能事无巨细完全由自己提供所有的功 能,都是建立在别的软件如操作系统、基础平台、中间件等等所提供的更为基本的功能的基 础上。反过来,凡是承诺为别的软件提供某些功能的软件,则要定义、即明确说明自己能提 供一些什么样的功能,以及怎样调用这些功能。这样的定义称为“应用程序编程界面”、即 API。另一方面,软件的功能是由“函数”实现和提供的,这样的软件既然要为别的软件提供 某些功能,就必须提供一个实际上实现了这些功能的函数集合,所以API的另一个意思就 是指这样的一个函数集合。可见,上述为WinCE/WM平台开发的应用软件都是基于WinCE/WM 的API。而“正宗”的Android软件,则是基于Android自己的API。移植了 Wine以后,这 两种应用软件虽然都能在Android上运行,实际上却是井水不犯河水、互不相干。从原理上 说,WinCE/WM的API与Android的API在功能方面应该是等价的对应物,但是实际上只能 是大体上如此,二者还是有些区别,所以即使是针对Android手机而开发的WinCE/WM应用, 也不能充分利用Android的优势。因为这些功能是在Android框架的内部运行,而WinCE/WM软件虽然能在Android手机的Linux内核上面运行,却是在Android框架的外部。更重 要的是,Android是个开放的系统,不断有许多新的基本功能被创造出来并增添到Android 的API中,可是在为WinCE/WM编写的程序中就不能调用这些功能了。可以想像,要是能为WinCE/WM应用的开发者提供一个“混合API ”,使他们在程序 中既能如常调用由WinCE/WM的API所提供的功能,又能调用由Android提供的一些特殊或 新颖的功能,这些开发者们就可以为Android开发出更多更好的应用软件。举例言之,对于 来自Google的Android,地图功能是它的一个强项,如果开发的是“正宗”的Android应用, 在程序中调用与地图有关的功能是比较容易的。但是,如果开发的是WinCE/WM模式的应 用,尽管目的也是在Android手机上运行,却无法调用这些功能。由此可见,提供一个混合 API,使WinCE/WM模式的应用也可以在程序中调用Android所特有的功能,是很有意义的。但是,要提供这样的API并非易事。

发明内容
为解决提供混合API的问题,本发明提供了 一种在Android手机上实现WinCE/ Android混合API的方法,是一种采用代理机制的方法,在Android系统中为运行于 Android外部的WinCE/WM应用提供一个作为Android进程的代理进程,并为其提供一个虚 拟的API中介层,将应用程序对Android API函数的调用转化成操作请求并发送给代理进 程,由代理进程调用相应的Android功能并将结果发回给应用进程。本发明解决其技术问题采用的技术方案本发明所述的这种在Android手机上实 现WinCE/WM和Android混合API的方法,要点为 每当要在Android手机上启动一个WinCE/WM应用时,就在Android系统中为其 创建一个代理进程AppProxy,这个进程与实际的应用进程“同生共死”,有着相同的生存期。 实际的应用进程和代理进程都跟TinyX服务进程有socket连接。 在Android外部为WinCE/WM应用提供一个虚拟的Android API中介模块,由这 个中介模块提供与Android功能相对应的API函数。这个中介模块与原有的Wine模块合 在一起既提供WinCE/WM的API,也提供Android的API,所以称为“混合API ”。 每当WinCE/WM应用程序调用由API中介层模块提供的Android API函数时,中 介层模块将其转化成操作请求,并将其发送给TinyX服务进程。· TinyX服务进程将操作请求转发给代理进程。 代理进程根据操作请求在Android框架内部调用相应的Android功能,并将运 行结果经由TinyX服务进程发回给Android外部的应用进程。 应用进程从对Android API函数的调用中返回。这里的操作请求和运行结果之所以要由TinyX服务进程转发,是因为应用进程本 来就与TinyX服务进程有socket连接,而代理进程要与TinyX服务进程建立socket连接 又很方便。在Linux平台上,TinyX或X服务进程是为Linux应用统一提供图形显示和人 机交互输入的服务进程。不过,TinyX服务进程这一个环节也可以跳过,改成由应用进程和 代理进程直接建立socket连接并直接通信。这样,虽然WinCE/WM应用是在Android框架的外部运行,但是对Android所提供 功能的调用却是由代理进程在Android框架的内部完成的。相比之下,应用程序对WinCE/丽API函数的调用则与Android无关。从程序设计的角度看,WinCE/WM应用可以利用的 API是个混合API。本发明有益的效果是使程序员们可以为WinCE/WM模式应用的开发提供一个混 合API,使这些应用可以在程序中调用由Android提供的功能。本发明直接的目的是为在 Android手机上运行的WinCE/WM应用提供混合API、即由WinCE/WM API和Android API 混合构成的API ;但是实际上也可以用来为在Android手机上运行的Linux应用提供混合 API、即由 Linux API 和 Android API 混合构成的 API。


图1是按本发明所述方法提供混合API之前的系统示意图;图2是按本发明所述方法提供混合API之后的系统示意图;图3是AppProxy的程序流程图。
具体实施例方式下面结合附图和实施例对本发明作进一步说明图1中的竖直虚线将系统分成两半,右边是Android系统及其应用,左边是Linux 本身的应用,二者共用同一个Linux内核。图中的右边有两个Android进程,它们都通过 Android的API调用由Android提供的各种基本功能,而Android则又通过Linux内核的 API (称为“系统调用”)调用由内核提供的更基本的功能。相比之下,左边是Linux本身的 应用,图中的Wine模块把本来只能在WinCE/WM上运行的应用转化成Linux应用,或者说 WinCE/丽应用+Wine = Linux应用。但是,尽管如此,WinCE/WM应用与Wine之间的界面却 仍旧是WinCE/WM的API。这样,那怕Android的API提供了很好的功能,在WinCE/丽应用 里面也无法加以调用。图2中在Android这一边多了一个应用代理进程AppProxy,这个代理进程相当于 一个Android应用,它可以调用Android的API所提供的任何一种功能。而在Linux这一 边,则多了一个中介模块。这个中介模块在Linux这一边提供一个虚拟的Android API。之 所以说虚拟,是因为这个模块并不真的在Linux这一边对这些功能实际上加以实现,而是 通过Socket连接向Android这一边的代理进程AppProxy发出操作请求,由AppProxy在 Android的框架中予以实现。这样,由中介模块提供的API,加上由Wine模块提供的API,合 在一起就构成了一个混合API。实际上,由中介模块提供的API不必是完整的Android API,而只需是后者的一个 子集,因为AndroidAPI所提供的大部分功能在WinCE/WM API中都有,需要由中介模块提供 的只是Android API中一些比较有特色的功能。图3中,当用户要启动一个带图形界面的Linux应用时,实际启动的是AppProxy, 原本用来启动Linux应用所需的命令行则作为(对于AppProxy的)命令行参数传给 AppProxy。启动之后,AppProxy就进入一个循环,在循环中等待来自WinCE/WM应用的请求, 一旦有请求到来就加以解析和执行,并将结果发回给WinCE/WM应用,然后就进入下一轮循 环。在本方法的具体实施中,WinCE/WM应用进程与代理进程AppProxy之间的通信都经过TinyX服务进程的中转。这是因为,现在的Linux平台都是带图形化人机交互界面 (⑶I)的,一般的Linux应用(除Android外)在运行时都得与提供人机交互界面的TinyX 服务进程打交道。这些Linux应用进程在启动时就自动与TinyX服务进程建立Socket连 接。而代理进程AppProxy,也很容易跟TinyX服务进程建立起Socket连接,因为后者本来 就是个服务进程,本来就在等待别的进程跟它建立连接。所以,本方法的具体实施涉及对 TinyX即X的源代码的修改,X是开源软件,其源代码可从有关网站获取。假定Android的API中定义了一个功能,是播放一段背景音乐,我们想让WinCE/ 丽应用中可以调用这个功能。Android的框架采用Java语言,一个功能称为一个“方法 (Method) ”,这个方法的名称是start_music,在API中的定义是public boolean start_music(String[]filename, int volume);这个“方法”有两个参数,第一个是音频文件的文件名,第二个是播放的音量。我 们的目的是将Android API中的这个功能作为混合API中的一个函数提供给WinCE/WM应下面分五个方面说明本方法的一个实施例。注意同一个方法可以有多种不同的实 施,这里所提供的只是其中之一。1、作为应用代理的可执行程序AppProxy为在Android框架中执行来自WinCE/丽应用和中介模块的Android API函数操 作请求,需要在Android这一边创建一个代理进程,由这个代理进程在Android这一边调用 Android API所提供的各种函数。在Android系统中,一个应用进程称为一个Activity,是一个Java语言中的“类 (Class) ”,将这种类扩展成一个自定义的类,就是一个Android应用,最后在Android的显 示屏上就会有一个图标,点击这个图标就会执行这个类中的“方法(Method),,onCreate ()。 所以,onCreateO就相当于C程序中的main()。下面给出有关的伪代码
public class RunAppActivity extends Activity {
......//这个自定义类中扩充出来的其它方法
private JniMethod raJniMethod = new JniMethod(); //需要用到 JNI
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedlnstanceState) { //相当于C程序中的main() super.onCreate(savedlnstanceState);
JniMethod.startApp(StartAppName.getBytes()); //启动执行 Linux 那一边的 App
权利要求
1. 一种在Android手机上实现WinCE/WM和Android混合API的方法,其特征是1. 1)每当要在Android手机上启动一个WinCE/WM应用时,就在Android系统中为其创 建一个代理进程,代理进程与实际的应用进程有相同的生存期,两个进程都跟TinyX服务 进程有socket连接;1. 2)在Android外部为WinCE/WM应用提供一个虚拟的Android API中介模块,由这个 中介模块提供与Android功能相对应的API ;这个中介模块与原有的Wine模块合在一起既 提供WinCE/WM的API,也提供Android的API,称为“混合API,,;1. 3)每当WinCE/WM应用程序调用由中介模块提供的Android API函数时,中介模块将 其转化成操作请求,并将其发送给TinyX服务进程;1. 4) TinyX服务进程将操作请求转发给代理进程;1.5)代理进程根据操作请求在Android框架内部调用相应的Android功能,并将运行 结果经由TinyX服务进程发回给Android外部的应用进程。
2.根据权利要求1所述的在Android手机上实现WinCE/WM和Android混合API的方 法,其特征是该方法用于X视窗图形界面与Android相整合。
3.根据权利要求1所述的在Android手机上实现WinCE/WM和Android混合API的方 法,其特征是应用进程和代理进程之间直接建立socket连接并直接通信,不经TinyX服务 进程转发。
全文摘要
本发明涉及一种在Android手机上实现WinCE/WM和Android混合API的方法,在Android系统中为运行于Android外部的WinCE/WM应用提供一个作为Android进程的代理进程,并为其提供一个虚拟的API中介层,将应用程序对Android API函数的调用转化成操作请求并发送给代理进程,由代理进程调用相应的Android功能并将结果发回给应用进程。本发明有益的效果是使程序员们可以为WinCE/WM模式应用的开发提供一个混合API,使这些应用可以在程序中调用由Android提供的功能。
文档编号G06F9/44GK102123196SQ201010622298
公开日2011年7月13日 申请日期2010年12月29日 优先权日2010年12月29日
发明者毛德操, 王承志, 金涛 申请人:浙大网新科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1