看這裏:使用Intellij Idea 搭建PhoneGap Android開發環境javascript
最近幾天在學習使用phonegap進行android應用的開發,首先固然是phonegap android開發環境的搭建,網上的資料比較亂,cordova和phonegap也有點分不清,我的參考了不少資料,也試驗了不少次,一直在摸索,總算小有心得,這裏簡單的整理一下,使用Intellij Idea 搭建PhoneGap Android開發環境。css
首先須要理清楚phonegap和cordova的關係,如下內容引自百度百科:html
本篇使用的是Phonegap 2.9.0搭建,官方最新的版本是2.9.1,Cordova 提供的最新版本爲4.0.0,使用仍是有差別的,使用的開發工具是Intellij,默認集成了Android的插件,只須要簡單的配置下SDK就能夠了,關於Eclipse Android開發環境的搭建,請諮詢度娘,這裏再也不贅述。java
使用Intellij Idea,經過File-->New Module,建立一個Android Application Module,以下圖所示:android
選擇Next,在這裏定義你的應用名稱Hello PhoneGap和包名com.phonegap.hello,以及程序的入口MainActivity,以下所示:git
繼續選擇Next,進入設置頁面,設置程序的路徑,以及模擬器的target,因爲我使用的是Genymotion模擬器,這裏選擇User Device,關於Genymotion模擬器的安裝及使用,請參見這裏。web
選擇Finish,即完成了Hello PhoneGap最基本Android應用程序的開發,固然本篇使用的是Phonegap移動開發框架,經過編寫html+javascript+css 代碼完成Android應用程序的開發,首先爲咱們的module引入cordova-2.9.0.jar,在module的libs目錄增長相應的 jar包,做爲類庫引入,以下:
apache
這樣,咱們就能夠在咱們的java類中使用phonegap提供的API了,接下來,咱們須要在module的assets目錄下建立www文件夾,之 後,咱們大部分的開發過程都須要在www文件夾下面進行,包括編寫js+html+css文件等,爲了分包明確,在www文件夾建立 html,css,js文件夾,一樣的咱們須要在js目錄引入cordova.js,以及在html目錄新建一個基本的html,html的內容以下:api
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script type="text/javascript" charset="utf-8" src="../js/cordova.js"></script> <title>Hello PhoneGap</title> </head> <body> <h1>Hello PhoneGap</h1> </body> </html>
另外,須要在Android的res資源目錄下,新建xml目錄,引入phonegap的config.xml,主要是配置一些phonegap提供的插件,完整xml文件以下:app
<widget id="com.phonegap.hello" version="2.0.0" xmlns="http://www.w3.org/ns/widgets"> <name> Hello PhoneGap </name> <description> A Hello World PhoneGap application. </description> <author email="hsp62692180@126.com" href="http://www.xx566.com"> www.xx566.com </author> <access origin="*"/> <!-- <content src="http://mysite.com/myapp.html" /> for external pages --> <content src="index.html"/> <preference name="loglevel" value="DEBUG"/> <!-- <preference name="splashscreen" value="resourceName" /> <preference name="backgroundColor" value="0xFFF" /> <preference name="loadUrlTimeoutValue" value="20000" /> <preference name="InAppBrowserStorageEnabled" value="true" /> <preference name="disallowOverscroll" value="true" /> --> <feature name="App"> <param name="android-package" value="org.apache.cordova.App"/> </feature> <feature name="Geolocation"> <param name="android-package" value="org.apache.cordova.GeoBroker"/> </feature> <feature name="Device"> <param name="android-package" value="org.apache.cordova.Device"/> </feature> <feature name="Accelerometer"> <param name="android-package" value="org.apache.cordova.AccelListener"/> </feature> <feature name="Compass"> <param name="android-package" value="org.apache.cordova.CompassListener"/> </feature> <feature name="Media"> <param name="android-package" value="org.apache.cordova.AudioHandler"/> </feature> <feature name="Camera"> <param name="android-package" value="org.apache.cordova.CameraLauncher"/> </feature> <feature name="Contacts"> <param name="android-package" value="org.apache.cordova.ContactManager"/> </feature> <feature name="File"> <param name="android-package" value="org.apache.cordova.FileUtils"/> </feature> <feature name="NetworkStatus"> <param name="android-package" value="org.apache.cordova.NetworkManager"/> </feature> <feature name="Notification"> <param name="android-package" value="org.apache.cordova.Notification"/> </feature> <feature name="Storage"> <param name="android-package" value="org.apache.cordova.Storage"/> </feature> <feature name="FileTransfer"> <param name="android-package" value="org.apache.cordova.FileTransfer"/> </feature> <feature name="Capture"> <param name="android-package" value="org.apache.cordova.Capture"/> </feature> <feature name="Battery"> <param name="android-package" value="org.apache.cordova.BatteryListener"/> </feature> <feature name="SplashScreen"> <param name="android-package" value="org.apache.cordova.SplashScreen"/> </feature> <feature name="Echo"> <param name="android-package" value="org.apache.cordova.Echo"/> </feature> <feature name="Globalization"> <param name="android-package" value="org.apache.cordova.Globalization"/> </feature> <feature name="InAppBrowser"> <param name="android-package" value="org.apache.cordova.InAppBrowser"/> </feature> </widget>
一樣的,咱們須要在AndroidManifest.xml文件中增長如下內容,以開啓相應的權限,以下:
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true"/> <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.RECEIVE_SMS"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.RECORD_VIDEO"/> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> <uses-permission android:name="android.permission.READ_CONTACTS"/> <uses-permission android:name="android.permission.WRITE_CONTACTS"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.GET_ACCOUNTS"/> <uses-permission android:name="android.permission.BROADCAST_STICKY"/>
並將如下內容添加到AndroidManifest.xml文件的activity標籤中:
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
最後,咱們須要修改入口MainActivity文件,使其繼承DroidGap,去除setContentView(R.layout.main),使用super.loadUrl加載入口頁面,以下:
public class MainActivity extends DroidGap { /** * Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.main); super.loadUrl("file:///android_asset/www/html/index.html"); } }
在模擬器中,運行此module,人品正常的話,你能夠看到這樣的畫面,表示基本的phoneGap Android開發環境搭建完成,撒花ing...
phoneGap提供了一些js的api,用於調用設備的GPS獲取經緯度信息,以及調用攝像頭進行拍照等,我將在接下來的文章中整理介紹,敬請期待。