码迷,mamicode.com
首页 > 其他好文 > 详细

Phonegap学习入门篇

时间:2015-03-28 23:00:21      阅读:306      评论:0      收藏:0      [点我收藏+]

标签:

安装Node.js

安装Git

置代理
公司内网使用时可能需要置代理
·设CMD代理

set http_proxy=http://127.0.0.1:8080

set https_proxy=http://127.0.0.1:8080
·设npm代理

npm config set registry http://registry.npmjs.org

npm config set proxy="http://127.0.0.1:8080"

npm config set https-proxy="http://127.0.0.1:8080"
·设git代理

git config --global url."https://".insteadOf git://

git config --global http.proxy http://127.0.0.1:8080

·安装phonegap

npm install -g phonegap

·配置Android平台

安装最新JDK
http://www.oracle.com

Android SDK
http://developer.android.com/sdk/index.html

Apache Ant
http://ant.apache.org/bindownload.cgi

配置

 ANDROID_HOME

 C:\Program Files\adt-bundle-windows-x86_64-20140321\sdk

 ANT_HOME

 C:\Program Files\apacheant

 JAVA_HOME

 C:\Program Files\Java\jdk1.8.0_05

 添加Path

 %JAVA_HOME%\bin;%ANT_HOME%\bin;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;

Android
Android SDK的安装目中,有SDK Manager.exe程序,在命令行中动该程序。
Tools->Manage AVDs中,建一个新的Android器。

第一个phonegap App

$ phonegap create my-app

$ cd my-app

$ phonegap run android

深入
上面的App示的画面,其就是我们创建的目中的www下的index.html
一个跨平台的用程序,只是需要我www下,做好web app就可以了。
里的选择就更多了,可以使用BootStrap, JqueryMobile……
外,需要再系一下PhoneGap中的如何用系API.

方法1:通CLI安装

模糊搜索插件

$ phonegap plugin search bar code

com.phonegap.plugins.barcodescanner - Scans Barcodes

安装插件

$ phonegap plugin add org.apache.cordova.device

$ phonegap plugin add org.apache.cordova.network-information

$ phonegap plugin add org.apache.cordova.battery-status

$ phonegap plugin add org.apache.cordova.device-motion

$ phonegap plugin add org.apache.cordova.device-orientation

$ phonegap plugin add org.apache.cordova.geolocation

$ phonegap plugin add org.apache.cordova.camera

$ phonegap plugin add org.apache.cordova.media-capture

$ phonegap plugin add org.apache.cordova.media

$ phonegap plugin add org.apache.cordova.file

$ phonegap plugin add org.apache.cordova.file-transfer

$ phonegap plugin add org.apache.cordova.dialogs

$ phonegap plugin add org.apache.cordova.vibration

$ phonegap plugin add org.apache.cordova.contacts

$ phonegap plugin add org.apache.cordova.globalization

$ phonegap plugin add org.apache.cordova.splashscreen

$ phonegap plugin add org.apache.cordova.inappbrowser

$ phonegap plugin add org.apache.cordova.console

看已安装插件

$ phonegap plugin ls    # or ‘plugin list‘

[ ‘org.apache.cordova.console‘ ]

除插件

$ phonegap plugin rm org.apache.cordova.console

$ phonegap plugin remove org.apache.cordova.console    # same

安装/除多个插件

 $ cordova plugin add org.apache.cordova.console org.apache.cordova.device

 $ cordova plugin rm org.apache.cordova.console org.apache.cordova.device

安装指定版本号的插件

 $ phonegap plugin add org.apache.cordova.console@latest

 $ phonegap plugin add org.apache.cordova.console@0.2.1

方法2:通plugman安装

首先通npm安装plugman

$ npm install -g plugman

安装插件

$ plugman --platform <ios|amazon-fireos|android|blackberry10|wp7|wp8> --project <directory> --plugin <name|url|path> [--plugins_dir <directory>] [--www <directory>] [--variable <name>=<value> [--variable <name>=<value> ...]]

除插件

$ plugman --uninstall --platform <ios|amazon-fireos|android|blackberry10|wp7|wp8> --project <directory> --plugin <id> [--www <directory>] [--plugins_dir <directory>]

搜索插件

plugman search <plugin keywords>

更改registry

plugman config set registry <url-to-registry>

plugman config get registry

安装主要插件

cordova-plugin-battery-status plugman --platform --project --plugin org.apache.cordova.battery-status

cordova-plugin-camera plugman --platform --project --plugin org.apache.cordova.camera

cordova-plugin-console plugman --platform --project --plugin org.apache.cordova.console

cordova-plugin-contacts plugman --platform --project --plugin org.apache.cordova.contacts

cordova-plugin-device plugman --platform --project --plugin org.apache.cordova.device

cordova-plugin-device-motion (accelerometer) plugman --platform --project --plugin org.apache.cordova.device-motion

cordova-plugin-device-orientation (compass) plugman --platform --project --plugin org.apache.cordova.device-orientation

cordova-plugin-dialogs plugman --platform --project --plugin org.apache.cordova.dialogs

cordova-plugin-file plugman --platform --project --plugin org.apache.cordova.file

cordova-plugin-file-transfer plugman --platform --project --plugin org.apache.cordova.file-transfer

cordova-plugin-geolocation plugman --platform --project --plugin org.apache.cordova.geolocation

cordova-plugin-globalization plugman --platform --project --plugin org.apache.cordova.globalization

cordova-plugin-inappbrowser plugman --platform --project --plugin org.apache.cordova.inappbrowser

cordova-plugin-media plugman --platform --project --plugin org.apache.cordova.media

cordova-plugin-media-capture plugman --platform --project --plugin org.apache.cordova.media-capture

cordova-plugin-network-information plugman --platform --project --plugin org.apache.cordova.network-information

cordova-plugin-splashscreen plugman --platform --project --plugin org.apache.cordova.splashscreen

cordova-plugin-vibration plugman --platform --project --plugin org.apache.cordova.vibration

例:

plugman --platform android --project HelloWorld --plugin org.apache.cordova.device

如果网络问题导致安装超,也可以通本地安装方法安装插件

方法3:通本地安装

安装命令:phonegap local plugin add /*path of plugin*/

>phonegap local plugin add E:\flashair\cordova-plugin-camera

插件可以通过访问git:
Camera
https://github.com/apache/cordova-plugin-camera/tree/b76b5ae670bdff4dd4c716e889ab12e049f9c733
FileSystem
https://github.com/apache/cordova-plugin-file
FileTransfer
https://github.com/chanthus/cordova-plugin-file-transfer-gcs/tree/3a89374d9b834196fb0d40a40fecd7d76db3afb9

插件可以通官方网址查询

全部插件
https://build.phonegap.com/plugins

camera插件
https://build.phonegap.com/plugins/768

FileSystem插件
https://build.phonegap.com/plugins/617

FileTransfer插件
https://build.phonegap.com/plugins/618

phonegap Camera插件的使用教程:
http://blog.csdn.net/aaawqqq/article/details/20125837

安装Camera插件

phonegap plugin add org.apache.cordova.camera 

部分,参照Phonegap API文档,或者上面的使用教程

插件安装

$ phonegap plugin add org.apache.cordova.camera 

$ phonegap plugin add org.apache.cordova.file

$ phonegap plugin add org.apache.cordova.file-transfer

camera插件的sample

HTML部分:

<div id="gallery">

   <img id="smallImage">

 </div>

 <button onclick="getPhoto()">拍照</button>

 <button onclick="getFile()">选择文件</button>

JS部分:

/**

 * 拍照

 */

 function getPhoto() { 

     navigator.camera.getPicture(captureSuccess, captureFail, {

         quality: 50,

         destinationType: Camera.DestinationType.FILE_URI,

         saveToPhotoAlbum: true,

         correctOrientation: true

     });

 }

 // 拍照成功后触此函数

 function captureSuccess(imageURI) {

     showPicture(imageURI);

 }

 // 当有错误发此函数 

 function captureFail(error) { 

     alert(‘Failed because: ‘ + error.code); 

 }

 /**

 * 相册,供用户选择图片。

 */

 function getFile() {

     navigator.camera.getPicture(selectSuccess, selectFail, {

         quality : 50,

         destinationType : Camera.DestinationType.FILE_URI,

         sourceType : Camera.PictureSourceType.PHOTOLIBRARY

     });

 }

 // 选择成功后触此函数

 function selectSuccess(fileURI) {

     showPicture(fileURI);

 }

 // 错误发此函数

 function selectFail(error) {

     alert("select file fail Code = " + error.code);

 }

 function showPicture(fileURI) {

     var image = new Image();

     var targetImage = document.getElementById(‘smallImage‘);

     var imageObj = {};

     var widthScale = 1, heightScale = 1, scale;

     var WIDTH = 600;

     var HEIGHT = 400;

     image.src = fileURI;

     image.onload = function() {

         widthScale = image.width / WIDTH;

         heightScale = image.height / HEIGHT;

         if (widthScale <= 1 && heightScale <= 1) {

             imageObj.width = image.width;

             imageObj.height = image.height;

         } else {

             scale = Math.max(widthScale, heightScale);

             imageObj.width = image.width / scale;

             imageObj.height = image.height / scale;

         }

         targetImage.width = imageObj.width;

         targetImage.height = imageObj.height;

         targetImage.src = fileURI;

     }

 }

file-transfer插件的sample

明:上的是上一个例子中idsmallImage<img>标签中的片。

HTML

<button onclick="uploadPic()">送到服</button>

JS

 /**

   * file-transfer插件上传图

   */ 

 function uploadPic() {

    var options = new FileUploadOptions();

    var imageURI = document.getElementById(‘smallImage‘).src;

    options.fileKey="file";

    var params = new Object();

    params.value1 = "test";

    params.value2 = "param"

    options.params = params; 

    var ft = new FileTransfer();

    // resolveLocalFileSystemURI可以得到文件的绝对路径。

    window.resolveLocalFileSystemURI(imageURI, function(imageURI) {

        imageURI = imageURI.toURI();

        options.fileName="app_" + imageURI.substr(imageURI.lastIndexOf(‘/‘)+1);

        ft.upload(imageURI, encodeURI("http://flashair/upload.cgi"), uploadWin, uploadFail, options);

    });

 }           

 //用成功触此函数

 function uploadWin(r) {

      alert("upload successful");

      console.log("Code = " + r.responseCode);

      console.log("Response = " + r.response);

      console.log("Sent = " + r.bytesSent);

 }

 //用失此函数

 function uploadFail(error) {

      alert("An error has occurred: Code = " = error.code);

 }

phonegap file-system插件

https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md

HTML5 file-system-api

http://www.html5rocks.com/en/tutorials/file/filesystem/
http://www.w3.org/TR/2011/WD-file-system-api-20110419/

HTML5 file-writer

http://www.w3.org/TR/2012/WD-file-system-api-20120417/#dfn-filewriter

HTML5 文件操作API(中文翻

http://blog.csdn.net/fwwdn/article/details/8349657/

于路径

测试

 console.log("cordova.file.applicationDirectory :" + cordova.file.applicationDirectory);

 console.log("cordova.file.applicationStorageDirectory :" + cordova.file.applicationStorageDirectory);

 console.log("cordova.file.dataDirectory :" + cordova.file.dataDirectory);

 console.log("cordova.file.cacheDirectory :" + cordova.file.cacheDirectory);

 console.log("cordova.file.externalApplicationStorageDirectory :" + cordova.file.externalApplicationStorageDirectory);

 console.log("cordova.file.externalDataDirectory :" + cordova.file.externalDataDirectory);

 console.log("cordova.file.externalCacheDirectory :" + cordova.file.externalCacheDirectory);

 console.log("cordova.file.externalRootDirectory :" + cordova.file.externalRootDirectory);

android上的出:

 cordova.file.applicationDirectory                :file:///android_asset/

 cordova.file.applicationStorageDirectory         :file:///data/data/com.phonegap.myApp/

 cordova.file.dataDirectory                       :file:///data/data/com.phonegap.myApp/files/

 cordova.file.cacheDirectory                      :file:///data/data/com.phonegap.myApp/cache/

cordova.file.externalApplicationStorageDirectory :file:///mnt/sdcard/Android/data/com.phonegap.myApp/ cordova.file.externalDataDirectory               :file:///mnt/sdcard/Android/data/com.phonegap.myApp/files/ cordova.file.externalCacheDirectory              :file:///mnt/sdcard/Android/data/com.phonegap.myApp/cache/

 cordova.file.externalRootDirectory               :file:///mnt/sdcard/

file-systemAPI中可以直接使用上面的量,得到当前机器的可写路径

取文件

 // 错误处

 function errorHandler(e) {

    var msg = ‘‘;

    switch (e.code) {

    case FileError.QUOTA_EXCEEDED_ERR:

      msg = QUOTA_EXCEEDED_ERR;

      break;

    case FileError.NOT_FOUND_ERR:

      msg = NOT_FOUND_ERR;

      break;

    case FileError.SECURITY_ERR:

      msg = SECURITY_ERR;

      break;

    case FileError.INVALID_MODIFICATION_ERR:

      msg = INVALID_MODIFICATION_ERR;

      break;

    case FileError.INVALID_STATE_ERR:

      msg = INVALID_STATE_ERR;

      break;

    default:

      msg = Unknown Error;

      break;

    }

    console.log(Error: + msg);

 }

 // 操作fileEntry

 function testReader(fileEntry) {

    // Get a File object representing the file, 

    // then use FileReader to read its contents. 

    console.log(testReader.);

    fileEntry.file(function (file) {

      var reader = new FileReader();

      reader.onloadend = function (e) {

        console.log(read result: + this.result);

        var txtArea = Ext.ComponentQuery.query("textareafield")[1];

        txtArea.setValue(this.result);

        // txtArea.value = this.result;

      };

      console.log(read file: + file.name);

      reader.readAsText(file);

    }, errorHandler);

 }

 // 操作file-system

 function testFileSystem() {

    function onInitFs(fs) {

      console.log(Opened file system: + fs.name);

      // 使用phonegap提供的全局量,操作可写文件。

      var file = cordova.file.externalDataDirectory + log.txt;

      // 使用phonegap提供的resolveLocalFileSystemURL函数,得到directoryEntry

      resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function (newEntry) {

        console.log("Successfully resolved.");

        console.log(newEntry.toURL());

        // 操作directoryEntry

        newEntry.getFile(log.txt, {

          create: true,

          exclusive: false

        }, function (fileEntry) {

          console.log(name: + fileEntry.name);

          console.log(fullPath: + fileEntry.fullPath);

          console.log(isFile: + fileEntry.isFile);

          console.log(isDirectory: + fileEntry.isDirectory);

          console.log("Temporary file is at " + fileEntry.toURL());

          testReader(fileEntry);

        }, errorHandler);

      }, console.error("resolveLocalFileSystemURL"));

    }

    window.requestFileSystem(window.PERSISTENT, 5 * 1024 * 1024 /*5MB*/ , onInitFs, errorHandler);

 }

 testFileSystem();

写入文件

 // 错误处

 function errorHandler(e) {

    var msg = ‘‘;

    switch (e.code) {

    case FileError.QUOTA_EXCEEDED_ERR:

      msg = QUOTA_EXCEEDED_ERR;

      break;

    case FileError.NOT_FOUND_ERR:

      msg = NOT_FOUND_ERR;

      break;

    case FileError.SECURITY_ERR:

      msg = SECURITY_ERR;

      break;

    case FileError.INVALID_MODIFICATION_ERR:

      msg = INVALID_MODIFICATION_ERR;

      break;

    case FileError.INVALID_STATE_ERR:

      msg = INVALID_STATE_ERR;

      break;

    default:

      msg = Unknown Error;

      break;

    }

    console.log(Error: + msg);

 }

 // 操作fileEntry写入文件

 function testWriter(fileEntry) {

    // Create a FileWriter object for our FileEntry (log.txt). 

    console.log(testWriter.);

    fileEntry.createWriter(function (fileWriter) {

      fileWriter.onwriteend = function (e) {

        console.log(Write completed.);

      };

      fileWriter.onerror = function (e) {

        console.log(Write failed: + e.toString());

      };

      fileWriter.onwrite = function (evt) {

        console.log("writting");

      };

      var txtArea = Ext.ComponentQuery.query("textareafield")[0];

      var text = txtArea.getValue();

      console.log(Write string: + text);

      fileWriter.write(text);

    }, errorHandler);

 }

 // 操作file-system

 function testFileSystem() {

    function onInitFs(fs) {

      console.log(Opened file system: + fs.name);

      console.log("Temporary root is(toURL) at " + fs.root.toURL());

      console.log("Temporary root(toInternalURL) is at " + fs.root.toInternalURL());

      //** 下面的方法等同于:resolveLocalFileSystemURL(cordova.file.externalDataDirectory)

      // fs.root.getDirectory(cordova.file.externalDataDirectory, {

      //   create: true,

      //   exclusive: false

      // }, function (directoryEntry) {

      //   console.log(‘getDirectory success!‘);

      // }, errorHandler);

      var file = cordova.file.externalDataDirectory + log.txt;

      console.log(will create file: + file);

      // 使用phonegap提供的resolveLocalFileSystemURL函数,得到directoryEntry

      resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function (newEntry) {

        console.log("Successfully resolved.");

        console.log(newEntry.toURL());

        newEntry.getFile(log.txt, {

          create: true,

          exclusive: false

        }, function (fileEntry) {

          console.log(name: + fileEntry.name);

          console.log(fullPath: + fileEntry.fullPath);

          console.log(isFile: + fileEntry.isFile);

          console.log(isDirectory: + fileEntry.isDirectory);

          console.log("Temporary file is at " + fileEntry.toURL());

          testWriter(fileEntry);

        }, errorHandler);

      }, console.error("resolveLocalFileSystemURL"));

    }

    window.requestFileSystem(window.PERSISTENT, 5 * 1024 * 1024 /*5MB*/ , onInitFs, errorHandler);

 }

 testFileSystem();

phonegap命令

E:\Work\workspace\phonegap>phonegap help                                                                                 

Usage: node C:\Users\gufsh.DL\AppData\Roaming\npm\node_modules\phonegap\bin\phonegap.js [options] [commands]            

Description:                                                                                                             

 PhoneGap command-line tool.                                                                                            

Commands:                                                                                                                

 create <path>        create a phonegap project                                                                        

 serve                serve a phonegap project                                                                         

 build <platform>     build the project for a specific platform                                                        

 install <platform>   install the project on for a specific platform                                                   

 run <platform>       build and install the project for a specific platform                                            

 local [command]      development on local system                                                                      

 remote [command]     development in cloud with phonegap/build                                                         

 platform [command]   update a platform version                                                                        

 plugin [command]     add, remove, and list plugins                                                                    

 help [command]       output usage information                                                                         

 version              output version number                                                                             

Options:                                                                                                                 

 -d, --verbose        allow verbose output                                                                              

 -v, --version        output version number                                                                            

 -h, --help           output usage information                                                                          

Platforms:                                                                                                              

 

 keyword            | local environment   | remote environment                                                          

 -------------------|---------------------|-------------------                                                         

 android            | Yes                 | Yes                                                                         

 ios                | Yes                 | Yes                                                                        

 wp8                | Yes                 | Yes                                                                        

 Blackberry 10      | Yes                 | No                                                                          

Examples:                                                                                                                

 $ node C:\Users\gufsh.DL\AppData\Roaming\npm\node_modules\phonegap\bin\phonegap.js help create                        

 $ node C:\Users\gufsh.DL\AppData\Roaming\npm\node_modules\phonegap\bin\phonegap.js help remote build                  

 $ node C:\Users\gufsh.DL\AppData\Roaming\npm\node_modules\phonegap\bin\phonegap.js create path/to/my-app              

 $ node C:\Users\gufsh.DL\AppData\Roaming\npm\node_modules\phonegap\bin\phonegap.js remote build android               

使用例

$ phonegap create my-app

$ cd my-app

$ phonegap run android

phonegap create

Description:

 Creates a new application at the provided path.

 The application name and package ID can also be customized.

 These values are set in the app manifest (www/config.xml) and are used when

 creating a native project (platforms/<platform>/).

Options:

 --name, -n <name>    application name (default: "Hello World")

 --id, -i <package>   package name (default: "com.phonegap.hello-world")

Examples:

 phonegap create path/to/my-app

 phonegap create path/to/my-app "com.example.app" "My App"

 phonegap create path/to/my-app --id "com.example.app" --name "My App"

phonegap安装插件

phonegap plugin add org.apache.cordova.camera org.apache.cordova.file org.apache.cordova.file-transfer

描述

http://docs.sencha.com/cmd/5.x/cordova_phonegap.html

http://www.sencha.com/blog/getting-started-with-sencha-touch-2-build-a-weather-utility-app-part-3/

http://phonegap.com/blog/2013/11/20/SenchaPhoneGap/

http://sensai-touch.com/building-an-ios-and-android-app-with-sencha-touch-2-3-and-cordova/

app

$ sencha -sdk /path/to/touch generate app MyApp .

/path/to/touch sencha touch的解路径.
MyApp 用的名字
.
用的路径

或者,

$ cd /path/to/touch

$ sencha -sdk /path/to/touch generate app MyApp E:/path/appName

追加phonegap的支持

添加config.xml到根目

参照:
https://github.com/phonegap/phonegap-start/blob/master/www/config.xml

phonegap支持

//sencha phonegap init [APP_ID] [APP_NAME]

$ sencha phonegap init com.mycompany.MyApp MyApp

建立:phonegap.local.properties

在根目下追加文件:phonegap.local.properties

# The following are supported platforms for local building (blackberry is version 10)

# android, blackberry, ios, wp7, wp8

#

# The following are supported platforms for remote building (blackberry is version 6)

# android, blackberry, ios, symbian, webos, wp7

 

# This property can be a single platform or a space delimited list

phonegap.platform=android

 

# This determines if build is remote (phonegap build) or local

phonegap.build.remote=false

 

# Username for PhoneGap Build

phonegap.build.remote.username={username}

# Password for PhoneGap Build

phonegap.build.remote.password={password}

sencha app build -run native

编辑APP

修改根目
index.html
APP/*
resources/*

PhoneGap Developer app 是一个 Web 者和设计者提供的测试工具,使用 PhoneGap 框架。安装后可接到 PhoneGap 面到一个即时视图并在设备测试

相当于是在移动设备调试 PhoneGap 用的工具,不需要次打包、安装就可以直接在手机上调试 PhoneGap 用。

使用用,需要他(或)的机上有 PhoneGap CLI,并从 iOS用商店或Google Play安装PhoneGap Developer App。通在一个特定的移动应用上PhoneGap CLI serve指令,能把成一台服器,它通WiFi与一台移动设备上的PhoneGap台服控代变动,并把它送到那台设备上,而不用行本地编译或代码签名。一位Adobe PhoneGapRaymond Camden这样甚至就可以在Windows机器上测试iOS用了。

PhoneGap Developer App包括PhoneGap核心插件,所以任何人都不必再独地安装它。而且,所以任何人都可以展它,增加第三方插件。

当前,代修改会被送到设备上,面会被重新入。而且,Safari Chrome调试无法用于Developer App,但可以使用 WeinreCamden

方法能做到似的事,那就是使用LiveReloadGapReload,它都是源的。LiveReload能用于网络应用,能很神奇地在iOS设备Windows间传送代,在下一个版本中将支持Android款工具之父Andrey TarantsovGapReload是一款LiveReload插件,它增加了PhoneGapCordova用的特殊支持。LiveReload点是某些修改不需要重新面。Sebastien Paul,“如果修改一个CSS文件,LiveReload不会做整个面的刷新,它将快速注入新的规则真的很快捷。”

使用方法:

官方主

http://app.phonegap.com/

使用方法

安装面版的phonegap

并安装APP

com.adobe.phonegap.app.apk(官方版)
PhoneGap-debug.apk(
编译)

线app

APP,必线,否可能无法android

机跟手机要在同一无线环境下

机的app根目行以下命令。

phonegap serve

在手机端的app机的ip地址。

调试

只需修改本地的jshtmlcss即可,手机端的app会自最新代

Remote Web Inspector

1.Chrome Remote Debugging

2.GapDebug

3.Weinre

Log Messages

console.log(‘...‘)

alert(‘...‘)

Log Messages

在命令行下过滤adb logcat

adb logcat | grep Console #consolelog

adb logcat | grep MyApp #MyApplog

adb logcat | grep -i myapp #忽略大小写。

adb logcat | grep --color=auto -i myapp #置匹配字符串色。更多请查 grep 助。

windows没有grep命令,
所以先安装grep命令。

http://sourceforge.net/projects/unxutils/

到某

将以下追加到path
:\UnxUtils\usr\local\wbin

参考:
http://blog.csdn.net/listening_music/article/details/7518990

 

Phonegap学习入门篇

标签:

原文地址:http://www.cnblogs.com/ld1024/p/4374917.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!