專利名稱:在Android手機上實現(xiàn)WinCE/Android混合API的方法
技術領域:
本發(fā)明涉及一種Android手機領域,尤其是一種在Android手機上實現(xiàn)WinCE/ Android混合API的方法,其顯著的特點是使程序員在開發(fā)Android應用軟件時在程序中既 可以調用WinCE的功能,又可以調用Android本身的功能。
背景技術:
以手機為代表的智能化移動終端設備既是計算機技術的一個重要發(fā)展方向,又是 一個競爭十分激烈的市場。自從谷歌公司和開放手機聯(lián)盟推出Android操作系統(tǒng)和基于 Android的手機以來,很快就在世界手機市場上占有了不小的份額,各種Android手機層出 不窮,由中國移動開發(fā)并推出的OPhone也是基于Android的,也是一種Android手機。所謂Android操作系統(tǒng),實際上是對Linux操作系統(tǒng)的一種改編和擴充,它的內(nèi)核 基本上就是Linux的內(nèi)核,但是在用戶空間卻專門針對手機和移動終端設備的特點作了大 幅的改進和增強,這些改動大都與編程模式和圖形界面、即圖形化用戶界面(GUI)有關。另一種常用于手機的操作系統(tǒng)是微軟的WinCE和麗、即Windows Mobile,這是在 微軟的Windows操作系統(tǒng)上發(fā)展起來的?;赪inCE/WM的手機也在市場上占不小的份額, 并且開發(fā)出了數(shù)量不小的WinCE/WM應用軟件。如果能把這些應用軟件拿到Android手機 上運行,對于提高Android手機的市場占有率顯然是有利的。通過把開源軟件Wine移植到Android手機上,把本應由Windows提供的支撐 嫁接到Linux上,并對其加以擴充、使其支持WinCE/WM,可以讓WinCE/WM應用軟件直接 在Android手機上運行、實際上是在Android手機的Linux內(nèi)核上運行。這樣,原來熟悉 WinCE/WM軟件開發(fā)的人就可以按原來的模式、在原來的開發(fā)環(huán)境中、使用原來的開發(fā)工具、 像開發(fā)WinCE/WM軟件一樣地開發(fā)Android軟件,而且開發(fā)出來的軟件既是WinCE/WM軟件 又可以在Android手機上運行,這對于開發(fā)者也是很有利的。可是,這樣開發(fā)出來的軟件實質上仍是純粹的WinCE/WM軟件,其基礎是由WinCE/ WM承諾提供的各項功能。事實上,沒有一種應用軟件能事無巨細完全由自己提供所有的功 能,都是建立在別的軟件如操作系統(tǒng)、基礎平臺、中間件等等所提供的更為基本的功能的基 礎上。反過來,凡是承諾為別的軟件提供某些功能的軟件,則要定義、即明確說明自己能提 供一些什么樣的功能,以及怎樣調用這些功能。這樣的定義稱為“應用程序編程界面”、即 API。另一方面,軟件的功能是由“函數(shù)”實現(xiàn)和提供的,這樣的軟件既然要為別的軟件提供 某些功能,就必須提供一個實際上實現(xiàn)了這些功能的函數(shù)集合,所以API的另一個意思就 是指這樣的一個函數(shù)集合??梢姡鲜鰹閃inCE/WM平臺開發(fā)的應用軟件都是基于WinCE/WM 的API。而“正宗”的Android軟件,則是基于Android自己的API。移植了 Wine以后,這 兩種應用軟件雖然都能在Android上運行,實際上卻是井水不犯河水、互不相干。從原理上 說,WinCE/WM的API與Android的API在功能方面應該是等價的對應物,但是實際上只能 是大體上如此,二者還是有些區(qū)別,所以即使是針對Android手機而開發(fā)的WinCE/WM應用, 也不能充分利用Android的優(yōu)勢。因為這些功能是在Android框架的內(nèi)部運行,而WinCE/WM軟件雖然能在Android手機的Linux內(nèi)核上面運行,卻是在Android框架的外部。更重 要的是,Android是個開放的系統(tǒng),不斷有許多新的基本功能被創(chuàng)造出來并增添到Android 的API中,可是在為WinCE/WM編寫的程序中就不能調用這些功能了??梢韵胂瘢悄転閃inCE/WM應用的開發(fā)者提供一個“混合API ”,使他們在程序 中既能如常調用由WinCE/WM的API所提供的功能,又能調用由Android提供的一些特殊或 新穎的功能,這些開發(fā)者們就可以為Android開發(fā)出更多更好的應用軟件。舉例言之,對于 來自Google的Android,地圖功能是它的一個強項,如果開發(fā)的是“正宗”的Android應用, 在程序中調用與地圖有關的功能是比較容易的。但是,如果開發(fā)的是WinCE/WM模式的應 用,盡管目的也是在Android手機上運行,卻無法調用這些功能。由此可見,提供一個混合 API,使WinCE/WM模式的應用也可以在程序中調用Android所特有的功能,是很有意義的。但是,要提供這樣的API并非易事。
發(fā)明內(nèi)容
為解決提供混合API的問題,本發(fā)明提供了 一種在Android手機上實現(xiàn)WinCE/ Android混合API的方法,是一種采用代理機制的方法,在Android系統(tǒng)中為運行于 Android外部的WinCE/WM應用提供一個作為Android進程的代理進程,并為其提供一個虛 擬的API中介層,將應用程序對Android API函數(shù)的調用轉化成操作請求并發(fā)送給代理進 程,由代理進程調用相應的Android功能并將結果發(fā)回給應用進程。本發(fā)明解決其技術問題采用的技術方案本發(fā)明所述的這種在Android手機上實 現(xiàn)WinCE/WM和Android混合API的方法,要點為 每當要在Android手機上啟動一個WinCE/WM應用時,就在Android系統(tǒng)中為其 創(chuàng)建一個代理進程AppProxy,這個進程與實際的應用進程“同生共死”,有著相同的生存期。 實際的應用進程和代理進程都跟TinyX服務進程有socket連接。 在Android外部為WinCE/WM應用提供一個虛擬的Android API中介模塊,由這 個中介模塊提供與Android功能相對應的API函數(shù)。這個中介模塊與原有的Wine模塊合 在一起既提供WinCE/WM的API,也提供Android的API,所以稱為“混合API ”。 每當WinCE/WM應用程序調用由API中介層模塊提供的Android API函數(shù)時,中 介層模塊將其轉化成操作請求,并將其發(fā)送給TinyX服務進程。· TinyX服務進程將操作請求轉發(fā)給代理進程。 代理進程根據(jù)操作請求在Android框架內(nèi)部調用相應的Android功能,并將運 行結果經(jīng)由TinyX服務進程發(fā)回給Android外部的應用進程。 應用進程從對Android API函數(shù)的調用中返回。這里的操作請求和運行結果之所以要由TinyX服務進程轉發(fā),是因為應用進程本 來就與TinyX服務進程有socket連接,而代理進程要與TinyX服務進程建立socket連接 又很方便。在Linux平臺上,TinyX或X服務進程是為Linux應用統(tǒng)一提供圖形顯示和人 機交互輸入的服務進程。不過,TinyX服務進程這一個環(huán)節(jié)也可以跳過,改成由應用進程和 代理進程直接建立socket連接并直接通信。這樣,雖然WinCE/WM應用是在Android框架的外部運行,但是對Android所提供 功能的調用卻是由代理進程在Android框架的內(nèi)部完成的。相比之下,應用程序對WinCE/麗API函數(shù)的調用則與Android無關。從程序設計的角度看,WinCE/WM應用可以利用的 API是個混合API。本發(fā)明有益的效果是使程序員們可以為WinCE/WM模式應用的開發(fā)提供一個混 合API,使這些應用可以在程序中調用由Android提供的功能。本發(fā)明直接的目的是為在 Android手機上運行的WinCE/WM應用提供混合API、即由WinCE/WM API和Android API 混合構成的API ;但是實際上也可以用來為在Android手機上運行的Linux應用提供混合 API、即由 Linux API 和 Android API 混合構成的 API。
圖1是按本發(fā)明所述方法提供混合API之前的系統(tǒng)示意圖;圖2是按本發(fā)明所述方法提供混合API之后的系統(tǒng)示意圖;圖3是AppProxy的程序流程圖。
具體實施例方式下面結合附圖和實施例對本發(fā)明作進一步說明圖1中的豎直虛線將系統(tǒng)分成兩半,右邊是Android系統(tǒng)及其應用,左邊是Linux 本身的應用,二者共用同一個Linux內(nèi)核。圖中的右邊有兩個Android進程,它們都通過 Android的API調用由Android提供的各種基本功能,而Android則又通過Linux內(nèi)核的 API (稱為“系統(tǒng)調用”)調用由內(nèi)核提供的更基本的功能。相比之下,左邊是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這一邊對這些功能實際上加以實現(xiàn),而是 通過Socket連接向Android這一邊的代理進程AppProxy發(fā)出操作請求,由AppProxy在 Android的框架中予以實現(xiàn)。這樣,由中介模塊提供的API,加上由Wine模塊提供的API,合 在一起就構成了一個混合API。實際上,由中介模塊提供的API不必是完整的Android API,而只需是后者的一個 子集,因為AndroidAPI所提供的大部分功能在WinCE/WM API中都有,需要由中介模塊提供 的只是Android API中一些比較有特色的功能。圖3中,當用戶要啟動一個帶圖形界面的Linux應用時,實際啟動的是AppProxy, 原本用來啟動Linux應用所需的命令行則作為(對于AppProxy的)命令行參數(shù)傳給 AppProxy。啟動之后,AppProxy就進入一個循環(huán),在循環(huán)中等待來自WinCE/WM應用的請求, 一旦有請求到來就加以解析和執(zhí)行,并將結果發(fā)回給WinCE/WM應用,然后就進入下一輪循 環(huán)。在本方法的具體實施中,WinCE/WM應用進程與代理進程AppProxy之間的通信都經(jīng)過TinyX服務進程的中轉。這是因為,現(xiàn)在的Linux平臺都是帶圖形化人機交互界面 (⑶I)的,一般的Linux應用(除Android外)在運行時都得與提供人機交互界面的TinyX 服務進程打交道。這些Linux應用進程在啟動時就自動與TinyX服務進程建立Socket連 接。而代理進程AppProxy,也很容易跟TinyX服務進程建立起Socket連接,因為后者本來 就是個服務進程,本來就在等待別的進程跟它建立連接。所以,本方法的具體實施涉及對 TinyX即X的源代碼的修改,X是開源軟件,其源代碼可從有關網(wǎng)站獲取。假定Android的API中定義了一個功能,是播放一段背景音樂,我們想讓WinCE/ 麗應用中可以調用這個功能。Android的框架采用Java語言,一個功能稱為一個“方法 (Method) ”,這個方法的名稱是start_music,在API中的定義是public boolean start_music(String[]filename, int volume);這個“方法”有兩個參數(shù),第一個是音頻文件的文件名,第二個是播放的音量。我 們的目的是將Android API中的這個功能作為混合API中的一個函數(shù)提供給WinCE/WM應下面分五個方面說明本方法的一個實施例。注意同一個方法可以有多種不同的實 施,這里所提供的只是其中之一。1、作為應用代理的可執(zhí)行程序AppProxy為在Android框架中執(zhí)行來自WinCE/麗應用和中介模塊的Android API函數(shù)操 作請求,需要在Android這一邊創(chuàng)建一個代理進程,由這個代理進程在Android這一邊調用 Android API所提供的各種函數(shù)。在Android系統(tǒng)中,一個應用進程稱為一個Activity,是一個Java語言中的“類 (Class) ”,將這種類擴展成一個自定義的類,就是一個Android應用,最后在Android的顯 示屏上就會有一個圖標,點擊這個圖標就會執(zhí)行這個類中的“方法(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()); //啟動執(zhí)行 Linux 那一邊的 App
權利要求
1. 一種在Android手機上實現(xiàn)WinCE/WM和Android混合API的方法,其特征是1. 1)每當要在Android手機上啟動一個WinCE/WM應用時,就在Android系統(tǒng)中為其創(chuàng) 建一個代理進程,代理進程與實際的應用進程有相同的生存期,兩個進程都跟TinyX服務 進程有socket連接;1. 2)在Android外部為WinCE/WM應用提供一個虛擬的Android API中介模塊,由這個 中介模塊提供與Android功能相對應的API ;這個中介模塊與原有的Wine模塊合在一起既 提供WinCE/WM的API,也提供Android的API,稱為“混合API,,;1. 3)每當WinCE/WM應用程序調用由中介模塊提供的Android API函數(shù)時,中介模塊將 其轉化成操作請求,并將其發(fā)送給TinyX服務進程;1. 4) TinyX服務進程將操作請求轉發(fā)給代理進程;1.5)代理進程根據(jù)操作請求在Android框架內(nèi)部調用相應的Android功能,并將運行 結果經(jīng)由TinyX服務進程發(fā)回給Android外部的應用進程。
2.根據(jù)權利要求1所述的在Android手機上實現(xiàn)WinCE/WM和Android混合API的方 法,其特征是該方法用于X視窗圖形界面與Android相整合。
3.根據(jù)權利要求1所述的在Android手機上實現(xiàn)WinCE/WM和Android混合API的方 法,其特征是應用進程和代理進程之間直接建立socket連接并直接通信,不經(jīng)TinyX服務 進程轉發(fā)。
全文摘要
本發(fā)明涉及一種在Android手機上實現(xiàn)WinCE/WM和Android混合API的方法,在Android系統(tǒng)中為運行于Android外部的WinCE/WM應用提供一個作為Android進程的代理進程,并為其提供一個虛擬的API中介層,將應用程序對Android API函數(shù)的調用轉化成操作請求并發(fā)送給代理進程,由代理進程調用相應的Android功能并將結果發(fā)回給應用進程。本發(fā)明有益的效果是使程序員們可以為WinCE/WM模式應用的開發(fā)提供一個混合API,使這些應用可以在程序中調用由Android提供的功能。
文檔編號G06F9/44GK102123196SQ201010622298
公開日2011年7月13日 申請日期2010年12月29日 優(yōu)先權日2010年12月29日
發(fā)明者毛德操, 王承志, 金濤 申請人:浙大網(wǎng)新科技股份有限公司