隨著Google的Android手機和蘋果的iPhone手機的逐漸普及,越來越多開發人員加入到行動裝置 App開發的大軍當中。目前移動終端中的冠亞軍Android,應用是基於Java語言基礎上進行開發的;而蘋果公司的iPhone則是基於C語言開發的。如果開發人員編寫的應用需要同時在不同的行動裝置上啟動並執行話,則必須要掌握多種開發語言,這已經成為Team Dev的一大難題,在51CTO專訪國內著名移動軟體尚郵的首席架構師時也提到過跨平台軟體開發的困難。而為了進一步簡化行動裝置 App的編程,很多公司推出解決方案,Adobe推出的“AIR for Android”,使Flash為Android開發本地應用成為可能。而Nitobi公司推也出了一套開源的行動裝置 App解決方案PhoneGap。
PhoneGap是一款開源的手機應用開發平台,它僅僅只用HTML和JavaScript語言就可以製作出能在多個行動裝置上啟動並執行應用。PhoneGap將行動裝置本身提供的複雜的API進行了抽象和簡化,提供了一系列豐富的API供開發人員調用,只要你會HTML和Javascript或者Java語言,就可以利用PhoneGap提供的API去調用各種功能,PhoneGap就能讓你可以製作出在各種手機平台上啟動並執行應用,這對行動裝置 App開發人員來說無疑是個福音。 目前,PhoneGap已實現對iPhone/ipad、Android、Symbian,Palm、黑莓各版本絕大部分功能的支援,其中官方文檔中對其支援的詳細說明如所示:
在本文中,將以一個簡單的能在Android平台上啟動並執行HelloWorld的樣本,講解如何安裝PhoneGap的開發架構並配合Eclipse進行開發的過程。
基於Android SDK安裝PhoneGap架構
首先,要明白一點,就是要利用PhoneGap架構開發行動裝置 App時,也是必須在開發環境上安裝對應行動裝置應用的SDK的。比如你要開發一個運行在Android上的應用,則必須安裝 Android的SDK包,開發iPhone應用,就要安裝iPhone sdk。本文將介紹如何安裝基於Android SDK下安裝PhoneGap。
無論是開發基於哪種平台的行動裝置 App,首先要到PhoneGap的官方網站下載
PhoneGap包()。目前最新的版本是0.9.1,下載之後,解壓縮後,會發現如所示的若干個檔案夾:
這裡,由於我們是構建Android應用,因此只有phonegap-android對我們是有用的。
由於PhoneGap是通過Ruby語言以及所開發的目標行動裝置的SDK一起搭配工作的,因此除了下載PhoneGap外,開發人員還必須安裝如下的軟體(以Android為例)
◆Android SDK,建議安裝最新的版本,比如Android 2.1或者2.2
◆Eclipse IDE
◆Apache Ant 1.8.1
◆JDK 1.5以上
◆Android 的Eclipse開發外掛程式ADT
◆Ruby 1.9.1,建議到官網直接下載1.9.1的版本直接安裝。
此外,我們還要對windows下的運行環境變數進行設定。首先我們到控制台-系統-環境變數中,增加如下幾個系統內容變數。
◆JAVA_HOME:指向所安裝的JDK的目錄,比如c:/jdk15
◆ANT_HOME:指向所安裝的Apache_ANT目錄,比如d:/ant
◆ANDROID_HOME;指向所安裝的Android SDK目錄,比如d:/androidsdk
對Path進行設定,分別將ruby,jdk,android sdk,ant加入到原有的path中,如:
- c:/ruby/bin;c:/jdk15/bin;d:/ant/bin;d:/androidsdk/tools
-
其中,下載Ruby 1.9.1的Windows版本後,直接選擇安裝到指定目錄即可。
在完成上面的這些工作後,我們接下來就通過PhoneGap架構的腳手架功能,快速產生一個android的原型程式。
通過PhoneGap產生基於Android的原型程式
1 進入PhoneGap-Android目錄,並進入MS-DOS方式,在命令列下,按如下格式執行該命令:
- ruby bin/droidgap "[android_sdk_path]" [name] [package_name] "[www]" "[path]"
-
上述參數說明如下:
其中android_sdk_path指定了android sdk的安裝位置,比如:
d:/androidsdk,注意這裡不要寫成“/”,應該是“/”作為分隔字元。
Name:要產生的android應用的名字。
Package_name:產生的android應用中原始碼中的包名,注意必須至少有一層的包關係,即com.XXXX的形式。
WWW:這裡指應用中存放HTML,Javascipt,CSS的位置目錄名稱。
PATH:這裡指通過PhoneGap產生的項目原型工程的目錄位置,注意的是,該目錄位置不能指定為eclipse的workspace工作空間內。
下面是一個例子:
- ruby bin/droidgap “d:/androidsdk” HelloWorldGap com.phonegap www
- “d:/HelloWorldGap”
-
運行上述命令後,會發現在D盤會產生一個HelloWolrdGap的工程目錄,phonegap已經為我們產生了項目的架構了。
將工程匯入到Eclipse中
如果安裝了Android for eclipse的外掛程式ADT後,我們可以將PhoneGap產生的工程匯入到Eclipse中去。首先我們開啟Eclipse,建立一個Android Project,如
其中輸入Project name的名稱為HelloGapAndroid,其中在Create project from existing source中選擇上文中用PhoneGap產生的項目的目錄。之後在Eclipse中則會看到如下結構的
可以看到其中assets下的www目錄存放了工程中需要用到的HTML、Javascript和CSS檔案。此外,還要確認工程的lib目錄下面,存在phonegap.jar檔案。
接下來我們試著運行下這個工程,會在模擬器中看到如下效果:
啟動並執行結果是顯示了PhoneGap中預設顯示的index.html頁面,其中示範了其中的一些功能,大家可以嘗試去實驗一下。
編寫HelloWorld程式
接下來,我們來在此基礎上編寫HelloWorld程式。我們切換到index.html中去,在代碼模式下,刪除原來phonegap產生的程式碼,寫入如下代碼:
- <!DOCTYPE HTML>
- <html>
- <head>
- <meta name="viewport" content="width=320; user-scalable=no" /> <meta http-equiv="Content-type" content="text/html; charset=utf-8">
- <title>PhoneGap Android App</title>
- <script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
- <script type="text/javascript" charset="utf-8">
- var showMessageBox = function() {
- navigator.notification.alert("Hello World of PhoneGap");
- }
- function init(){
- document.addEventListener("deviceready", showMessageBox, true);
- }
- </script>
- </head>
- <body onload="init();" >
- </body>
- </html>
-
可以看到,這其實是普通的HTML和Javascript代碼。首先在onload觸發的方法init中,通過Javascript的回調方法中調用了phonegap封裝好的事件
deviceready,這個事件含義是當裝置在將其應用程式載入完畢後觸發的。在引入phonegap提供的API時,必須通過 的方式引入進行調用。在這裡的回呼函數showMessageBox中,就調用了phonegap封裝好的方法 navigator.notification.alert,這個方法實際上是
顯示了一個帶文本的提示框,運行結果如:
改進HelloWorld程式
接下來我們改進下這個程式,實現的功能是我們可以在文字框裡輸入名字,然後點確定按鈕後,彈出提示視窗顯示Hello+你輸入的名字。修改程式碼如下:
- <!DOCTYPE HTML>
-
- <html>
-
- <head>
-
- <meta name="viewport" content="width=320; user-scalable=no" />
-
- <meta http-equiv="Content-type" content="text/html; charset=utf-8">
-
- <title>PhoneGap</title>
-
- <script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
-
- <script type="text/javascript" charset="utf-8">
-
- var displayHello = function() {
-
- var name = document.getElementById("firstname").value;
-
- navigator.notification.alert("name" + name);
-
- }
-
- </script>
-
- </head>
-
- <body onload="init();" id="bdy" >
-
- <div id="txt">
-
- <input type="text" name="firstname" id="firstname" />
-
- </div>
-
- <div id ="btn">
-
- <a href="#" class="btn" onclick="displayHello();">Say Hello</a>
-
- </div>
-
- </div>
-
- </body>
-
- </html>
-
如果你懂得HTML和Javascript的話,上面的程式實在容易理解。其中我們添加了一個名為firstname的文字框,並且在按鈕的onclick事件中調用的displayHello()方法中通過document.getElementById的Javascript方法獲得了使用者輸入的名字,然後同樣用navigator.notification.alert的方法輸出結果,輸入的介面和輸出的結果如所示:
總結
通過PhoneGap這套開源架構對開發行動裝置SDK的封裝,我們今後在開發行動裝置 App時,只需要調用PhoneGap封裝好的API,結合已有的Java、HTML、CSS和Javascript技術,就可以很方便地進行開發了,更多的資料請查看PhoneGap的協助文檔。
瞭解Android開發更多內容請看