±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚcnblogs£¬ÎÄÕ½éÉÜÁËCordova°²×°ºÍÅäÖÃ,ÒÔ¼°ÏîÄ¿µÄ´´½¨ºÍ²Ù×÷£¬CordovaÏîĿĿ¼½á¹¹µÈÏà¹ØÄÚÈÝ¡£ |
|
CordovaÈëÃÅ
¹«Ë¾ÐèÒª¸ã¿çƽ̨¿ª·¢£¬Ö®Ç°µÄ¾ÉÏîÄ¿ÊDzÉÓÃIonic£¨ÁíÒ»ÖÖ¿çÆ½Ì¨·½°¸£©ÊµÏֵ쬵±³õһͷÔú½øÈ¥Ñ§Ï°ionic£¬·¢ÏÖÊǸö´ó¿Ó£¬ºóÀ´²Å·¢ÏÖ£¬IonicÄÚ²¿ºËÐÄÒ²ÊÇCordovaʵÏֵģ¬ËùÒÔÓÖһͷÔú½øÈ¥£¬·¢ÏÖ¡£¡£¡£¡£
ÎÞÂÛÈçºÎ£¬×öϱʼÇ
Cordova°²×°ºÍÅäÖÃ
ÒòΪCordovaÊÇÓÉnpm¹ÜÀíµÄ£¬ËùÒÔÐèÒª°²×°Nodejs»·¾³£¬×îºÃÊÇ×îеģ¬ÔÚ°²×°Ö®Ç°²é¿´Ò»ÏÂ×Ô¼ºÊÇ·ñÒѾ°²×°¹ýNodeJsÁË£¨ÖÕ¶ËÊäÈënode
-v£¬ÓÐÊä³öÔòÓа²×°£©
Èç¹ûÓеϰ£¬±ð¹Üʲô°æ±¾ÁË£¬Ð¶ÔØÁ˰ɣ¬ÎÒ±£Ö¤±ÈÄã¿ÉÄÜ»áÓÐÁ½¸önodejs°æ±¾»òÕß°²×°ÁËÒ»¸öIonic1£¨»¹ÓÐIonic2£¬Ionic3£©µÄʱºò¸Ðµ½ÇáËÉ¡£
È»ºó
°²×°×îеÄnodejs£¬Ëû»á×Ô¶¯°üº¬npmÁË
ÖÕ¶Ënpm install cordova -g
°²×°Íê±Ï¡£over
Cordova´´½¨ÏîÄ¿
¿ÉÒԺܼòµ¥
Öն˽øÈëÄã²å¼þÏîÄ¿µÄĿ¼cd ????
ÔËÐÐionic create CordovaDemo
CordovaDemo:ÄãÏîÄ¿µÄÃû×Ö£¬ÏîÄ¿°üÃû£¬ÏîÄ¿Îļþ¼ÐÃû
Ò²¿ÉÒÔÉÔ΢¸´ÔÓÒ»µã
Öն˽øÈëÄã²å¼þÏîÄ¿µÄĿ¼cd ????
ÔËÐÐionic create CordovaDemo com.cordova.app HelloWorld
CordovaDemo:ÏîÄ¿Îļþ¼ÐÃû
com.first.helloworld:ÏîÄ¿°üÃû
Helloworld:ÏîÄ¿µÄÃû×Ö
´´½¨Íê±Ï¡£over
Ìí¼Óƽ̨
´´½¨µÄCordovaĬÈÏÊÇûÓÐÈÎºÎÆ½Ì¨µÄ£¬ÎÒÃÇÐèҪΪÏîÄ¿Ìí¼ÓÎÒÃÇÐèÒªµÄƽ̨£º
½øÈëĿ¼cd CordovaDemo
Ìí¼Ó°²×¿Æ½Ì¨cordova platform add android
Ìí¼ÓiOSƽ̨cordova platform add ios
Ò»°ã¾ÍÕâÁ½¸öƽ̨ÁË
ÔËÐÐ
Ò²ÊǺܼòµ¥µÄ¡£ÔËÐа²×¿cordova run android£¬ÔËÐÐioscordova run ios
ÕâÀïÐèҪעÒâµÄÊÇÔËÐÐiosµÄʱºòÎÒ¹À¼ÆÊÇÐèÒªÖ¤ÊéµÈÔÒò£¬·´ÕýÎÒûÄܹ»ÔÚÖÕ¶ËÉÏÖ±½ÓÔËÐеġ£ÎҵĽâ¾ö°ì·¨ÊÇ£¬ÎÒÓÐXCode£¨iOS¿ª·¢¹¤¾ß£©~~
Ö±½Ó½øÈëĿ¼½øÈëplatforms£¬¿ÉÒÔ¿´µ½ÄãµÄ°²×¿ºÍiOSƽ̨£¬´ò¿ªiOSÀïÃæÆäʵ¾ÍÊÇÒ»¸öiOSÏîÄ¿À´µÄÁË¡£ÎÒÃÇ¿ÉÒÔÖ±½Ó´ò¿ª.xcworkspaceºó׺µÄÎļþ¾Í»áÔËÐÐxcodeÁË£¬È»ºó¾ÍÊÇÎÒµÄÄÜ×öµÄÊÂÇéÁË¡£
CordovaÏîĿĿ¼½á¹¹
¸Õ¸ÕÎÒÃǰ²×°ºÍÅäÖúÃÒ»¸öCordovaÏîĿ֮ºó£¬ÎÒÃÇ´ò¿ªÏîÄ¿Îļþ¼þÓ¦¸ÃÕâÑùµÄÎļþ½á¹¹

Ò»¸ö¸öÀ´½éÉÜ
config.xml
Õâ¸öÎļþÊÇcordovaÏîÄ¿µÄÅäÖÃÎļþ£¬¸ºÔðÕû¸öÏîÄ¿µÄһЩÅäÖÃÐÅÏ¢£¬¼òµ¥¿´Ò»ÏÂÎÒµÄÒ»¸öÏîÄ¿µÄÐÅÏ¢£º
<?xml version='1.0'
encoding='utf-8'?>
<widget id="io.cordova.hellocordova"
version="1.0.0" xmlns="http://www.w3.org/ns/widgets"
xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>HelloCordova</name> <description>
A sample Apache Cordova application that responds
to the deviceready event. </description>
<author email="dev@cordova.apache.org"
href="http://cordova.io">
Apache Cordova Team </author> <content
src="index.html" /> <access
origin="*" /> <allow-navigation
href="http://ionic.local/*" />
<allow-navigation href="http://*/*"
/> <allow-navigation href="*"
/> <allow-intent href="http://*/*"
/> <allow-intent href="https://*/*"
/> <allow-intent href="tel:*"
/> <allow-intent href="sms:*"
/> <allow-intent href="mailto:*"
/> <allow-intent href="geo:*"
/> <platform name="android">
<allow-intent href="market:*" />
</platform> <platform name="ios">
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*"
/> </platform> <engine name="android"
spec="^6.2.3" /> <engine name="ios"
spec="^4.4.0" /> <plugin name="com.telerik.plugins.nativepagetransitions"
spec="git+https://github.com/Telerik-Verified-Plugins/NativePageTransitions.git"
/> <plugin name="cordova-plugin-whitelist"
spec="^1.3.2" />
</widget> |
½²Ò»Ð©Ö÷ÒªµÄ±êÇ©°É£º
widget£ºid´ú±íÏîÄ¿°üÃû version´ú±í°æ±¾
name£ºÏîÄ¿Ãû
description£ºÏîÄ¿ÃèÊö
author£º×÷ÕßÐÅÏ¢
content£ºsrc´ú±íÎļþÈë¿Ú£¬Ä¬ÈÏÊÇwwwĿ¼ÏµÄindex.htmlÎļþ£¬Ò²¿ÉÒÔÖ¸¶¨ÎªÓòÃû¡£Ò²¾ÍÊÇÎÒÃÇËù˵µÄÖ±½ÓÒ»¸öwebview¼ÓÔØÍøÕ¾±äÉíÓ¦ÓÃÁË
allow-navigation£ºÒ³ÃæÌø×ªµÄʱºòÊÇÄܹ»ÔÚÓ¦ÓÃÄÚ´ò¿ªµÄµØÖ·£¨ÀýÈ磺Èç¹ûÉÏÃæµÄÈë¿ÚÊÇbaidu.com£¬Èç¹ûÄãûÌí¼ÓÕâ¸öµÄ»°£¬Ã¿´Î¶¼»á´ò¿ªÊÖ»úµÄä¯ÀÀÆ÷´ò¿ªÍøÒ³£©
platform£ºÆ½Ì¨
allow-itent£ºÆ½Ì¨ÏµķþÎñ
plugin£º²å¼þÐÅÏ¢
Ö÷ÒªÐ޸ĵĶ«Î÷ÓУºÏîÄ¿µÄ°üÃû£¨´ò°üʱºòÓõ½£©£¬ÏîÄ¿Ãû£¬Èë¿ÚÎļþ£¬allow-navigation¡£ÆäÓàµÄÒ»°ãͨ¹ýÃüÁîÐÐÌí¼Ó×Ô¶¯Éú³É¡£
hooks
²»ÖªµÀ£¬Ã»Óùý£¬¿´¹Ù·½½éÉܰɣ¬ÎÒ²»ÓÃÕâ¸ö¶«Î÷ÒÀÈ»ÄÜ×ö¸öÏîÄ¿£¨¼òµ¥µÄ£©¡£
˵µ½ÕâÀ´ó¼Ò¿´¹ÙÍøµÄʱºò·¢ÏÖ¿ÉÒÔÑ¡ÔñÓïÑԵģ¬ÕâÀィÒéÑ¡ÔñÓ¢ÎÄ԰棬ÒòΪ¡£¡£¡£¡£¡£ÖÐÎİæµÄÊÇÓÐǷȱµÄ¡£¡£¡£¡£¹ÙÍø¡£¡£¡£¡£
node_modules
Óùýnpm¶¼ÖªµÀÕâ¸ö¶«Î÷ÊÇʲôÀ´µÄÁË¡£Ö÷ÒªÊÇnpmÓÃÀ´½â¾öÒýÈëһЩ°üµÄ£¬¿ÉÒÔ²»ÓÃÌØ±ðÔÚÒ⣬ʹÓð汾¹ÜÀíÆ÷µÄʱºòÒ²»áºöÂÔÕâ¸öÎļþ¼ÐÄڵĹÜÀí£¬ÒòΪ²»Í¬Æ½Ì¨£¨mac£¬window£¬linus£©ÏµİüÃ²ËÆ»á²»Í¬£¬Ëû»á½«ÒÀÀµµÄ°üдÈëÒ»¸öÎļþÄÚ£¬µÈµ½ÏÂÔØÏîÄ¿µÄʱºòÔÙ¸ù¾Ý»·¾³µ¼È벻ͬµÄ°ü¡£
ËùÒԲž³£¿´µ½´ÓgithubÉÏÃæÏÂÔØÒ»Ð©ÏîÄ¿ÏÂÀ´£¬¶¼ÐèÒªÎÒÃÇnpm installÁË£¬Õâ¾äÃüÁî¾ÍÊǸù¾ÝËûµÄÎļþÒýÈë¶ÔÓ¦»·¾³µÄ°üÁË¡£
package.json
Õâ¸öÎļþÊÇÒ»¸öÃèÊöÎļþ£¬ËûÊÇnodeµÄ²úÎï¡£¼òµ¥¿´Ò»Ï£º
{ "name":
"helloworld", "displayName":
"HelloCordova", "version":
"1.0.0", "description":
"A sample Apache Cordova application that
responds to the deviceready event.",
"main": "index.js", "scripts":
{ "test": "echo \"Error:
no test specified\" && exit 1"
}, "author": "Apache Cordova
Team", "license": "Apache-2.0",
"dependencies": { "com.telerik.plugins.nativepagetransitions":
"git+https://github.com/Telerik-Verified-Plugins/NativePageTransitions.git",
"cordova-android": "^6.2.3",
"cordova-ios": "^4.4.0",
"cordova-plugin-whitelist": "^1.3.2"
}, "cordova": { "plugins":
{ "com.telerik.plugins.nativepagetransitions":
{}, "cordova-plugin-whitelist":
{}
}, "platforms": [ "android",
"ios"
]
}
} |
¿ÉÒÔ¿´µ½£¬Èç¹ûÊÇÒ»¸öÔÉú¿ª·¢ÈËÔ±£¬²»¶®µÃ¿çƽ̨¿ª·¢£¬²»¶®µÃnodeµÄ£¬Õâ¸öÎļþÊÇ¿´ÆðÀ´±È½Ï¸´Ôӵģ¨ÎÒµ±³õÊÇÕâÑùµÄ¸Ð¾õ£©¡£²»¹ýÆäʵËû²»ÐèÒªÎÒÃÇÒ»¸ö¸ö¼üÖµ¶Ô´ò³öÀ´£¬ËûÊÇ×Ô¶¯Éú³ÉµÄ¡£
platforms
Õâ¸öÎļþ¼ÐϵľÍÊÇÎÒÃǵĸ÷¸öƽ̨µÄÏîÄ¿ÁË¡£ÐÞ¸ÄÀïÃæµÄ¶«Î÷ÐèÒªÔÉú¿ª·¢¾Ñé¡£
plugins
Õâ¸öÎļþ¼ÐÊÇcordovaµÄ²å¼þĿ¼¡£
²å¼þµÄ×÷Ó㺿ÉÒÔͨ¹ý²å¼þÀ´Ê¹ÓÃjs´úÂëµ÷ÓÃÔÉú´úÂ룬ÓÉÓÚ¿ÉÒÔͨ¹ýÔÉú´úÂëµ÷ÆðÉ豸µÄÓ²¼þ£¬ËùÒÔ¿ÉÒÔÒÔ´ËÀ´Ê¹ÓÃjsµ÷ÆðÉ豸Ӳ¼þ¡£
ÎÒÃÇËù˵CordovadµÄÒ»¸ö¼Ü¹¹Ó¦¸ÃÊÇÕâÑùµÄ

¿ÉÒÔ¿´µ½ÎÒÃÇ×öµÄ¾ÍÊÇÒ»¸öwebapp£¬È»ºóͨ¹ý°²×¿»òÕßiosµÄweb¿Ø¼þ£¨iOSµÄWKWebView»òUIWebVIew£¬°²×¿¾Í²»ÖªµÀÁË£©£¬À´½²Õû¸öÒ³ÃæÇ¶Èëµ½ÔÉùÓ¦Óõ±ÖУ¬µ«ÊÇÎÒÃÇÆ½³£Ê¹ÓõÄHTML£¬CSS£¬JavaScript²¢²»Äܹ»µ÷Óõ½É豸µÄÉãÏñÍ·£¬É豸ÐÅÏ¢£¬±¾µØ´æ´¢µÈ¹¦ÄÜ£¬ÄÇôÔõô°ìÄØ£¿Õâ¸öʱºò¾ÍÊÇÎÒÃDzå¼þ³öÂíÁË£¬ÎÒ֮ǰҲ×Ô¼ºÕûÀí¹ýÒ»¸ö²å¼þµÄ±àд£¬¼òµ¥µÄÀ´Ëµ¾ÍÊÇͨ¹ýjsÀ´µ÷ÓÃÔÉú´úÂ루OC£¬Java£©À´ÊµÏÖÕâЩ¹¦Äܵġ£ËùÒÔ±àд²å¼þÐèÒªÔÉú¿ª·¢¾Ñ飬µ«ÊÇÎÒÃǴ󲿷Öʱºò²»ÐèÒª×Ô¼ºÈ¥±àд£¬ÒòΪÓвå¼þ¿â£¬Ò»°ãʹÓõIJå¼þ¶¼»áÓеÄÁË¡£
Ìí¼Ó²å¼þµÄÃüÁ
cordova plugin add cordova-plugin-device
ÍÆ¼öһЩ¿ÉÄÜÓõ½µÄ²å¼þ£º
cordova-plugin-device »ù±¾É豸ÐÅÏ¢
cordova-plugin-network-information ÍøÂçÁ¬½ÓÐÅÏ¢
cordova-plugin-battery-status µç³Ø×´Ì¬ÐÅÏ¢
cordova-plugin-device-motion ¼ÓËÙ¶ÈÐÅÏ¢
cordova-plugin-device-orientation Ö¸ÄÏÕëÐÅÏ¢
cordova-plugin-geolocation ¶¨Î»Êý¾Ý
cordova-plugin-camera Ïà»ú
cordova-plugin-media-capture ýÌå²¶»ñ
cordova-plugin-media ýÌå²¥·ÅÆ÷
cordova-plugin-file ·ÃÎÊÎļþ
cordova-plugin-file-transfer Îļþ´«µÝ
cordova-plugin-dialogs ÏûÏ¢Ìáʾ¶Ô»°¿ò
cordova-plugin-vibration Õñ¶¯ÌáÐÑ
cordova-plugin-contacts ÁªÏµÈË
cordova-plugin-globalization È«Çò»¯
cordova-plugin-splashscreen ÉÁÆÁ(Æô¶¯»Ãæ)
cordova-plugin-inappbrower ä¯ÀÀÆ÷
cordova-plugin-console ¿ØÖÆÌ¨
cordova-plugin-statusbar ״̬À¸
res
resÒ²¾ÍÊÇResourcesÁË£¬×¨ÃÅ·ÅÎÒÃǵÄ×ÊÔ´µÄÎļþ¼Ð¡£ÀïÃæÒ»°ã¾ÍiconÎļþ¼Ð´ú±íÏîĿͼƬ£¬screenÎļþ¼Ð´ú±íÏîÄ¿µÄ¿ªÆôÒ³Ãæ¡£
www
wwwÎļþ¼Ð¾ÍÊÇÎÒÃÇÕæÕý±àÂëµÄµØ·½ÁË¡£ÄÚ²¿Ä¬ÈÏÒ»¸öindex.html×÷ΪÏîÄ¿µÄÈë¿ÚÎļþ£¬ÆäÓàµÄÈý¸öÎļþ¼Ðcss£¬img£¬jsÒ²²»Óöà˵ÁË£¬ÕæÕýÍê³ÉÎÒÃÇÒ»¸öappµÄ¸÷¸öÒ³Ãæ£¬¸÷ÖÖ¹¦ÄܾÍÊÇÔÚÕâÀïʵÏÖµÄÁË¡£
½ÓÏÂÀ´Ö÷Òª½âÊÍÒ»¸öindex.htmlºÍindex.jsÎļþ°É
index.html
Õâ¸öÎļþÊÇÎÒÃǵÄĬÈÏÊ×Ò³Îļþ£¬µ±È»ËûÒ²¿ÉÒÔ²»ÊÇÎÒÃǵÄÊ×Ò³Îļþ¡£Ö®Ç°¾Í˵¹ý£¬cordovaÏîÄ¿µÄÊ×Ò³ÊÇÔÚ
config.xml ÎļþÄÚµÄ content µÄ src ÊôÐÔÄÚÉèÖõġ£Ä¬ÈÏÊÇ index.html
¾ÍÊÇÖ¸Õâ¸öÎļþÁË¡£
ÄÚÈÝÊÇ£º
<html>
<head> <!--
Customize this policy to fit your own app's needs.
For more guidance, see:
https://github.com/apache/cordova-plugin-whitelist/blob/master/README.md#content-security-policy
Some notes:
* gap: is required only on iOS (when using UIWebView)
and is needed for JS->native communication
* https://ssl.gstatic.com is required only on
Android and is needed for TalkBack to function
properly
* Disables use of inline scripts in order to mitigate
risk of XSS vulnerabilities. To change this:
* Enable inline JS: add 'unsafe-inline' to default-src
--> <meta http-equiv="Content-Security-Policy"
content="default-src 'self' data: gap: https://ssl.gstatic.com
'unsafe-eval'; style-src 'self' 'unsafe-inline';
media-src *; img-src 'self' data: content:;">
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight"
content="no"> <meta name="viewport"
content="user-scalable=no, initial-scale=1,
maximum-scale=1, minimum-scale=1, width=device-width">
<link rel="stylesheet" type="text/css"
href="css/index.css"> <title>Hello
World</title> </head> <body>
<div class="app"> <h1>Apache
Cordova</h1> <div id="deviceready"
class="blink"> <p class="event
listening">Connecting to Device</p>
<p class="event received">Device
is Ready</p> </div> </div>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>
</body>
</html> |
Ò»ÑÛ¿´Í꣬û¶àÉÙ¶«Î÷½âÊ͵ġ£
²»¹ýÕâÀïÎÒ¾õµÃΨһҪעÒâµÄµØ·½£¬Ò²ÊÇÎÒµ±³õ¸Õѧ¾À½áµÄµØ·½¡£¾ÍÊÇÒýÈëµÄcordova.jsÎļþ
<script type="text/javascript" src="cordova.js"></script>
Õâ¾ä´úÂëÕ¦ÑÛ¿´ÉÏȥûʲôÎÊÌ⣬ÓÉÓÚÎÒ×öÏîÄ¿µÄʱºò³öÏÖÁËÒ»µãÎÊÌ⣬ÎÒ»³ÒÉÊÇ cordova.js û¼ÓÔØµ¼Öµģ¬ËùÒÔÔÚÕÒÕâ¾ä´úÂëµÄʱºò²Å·¢ÏÖÎÊÌâÀ´ÁË¡£
Õâ¸öÊÇ www Ŀ¼ÏµÄÎļþ

ºöÊÓ .DS_Store Õâ¸öÊÇmacϵͳµÄÎļþ£¬ÓëcordovaÎ޹أ¬ÓëÏîÄ¿ÎÞ¹Ø
¿ÉÒÔ¿´µ½<script type="text/javascript" src="js/index.js"></script>Õâ¾ä´úÂëÒýÈëµÄindex.jsÊÇûÓÐÈκÎÎÊÌâµÄ¡£
¿ÉÊÇ£¡£¡£¡ÎÒµÄcordova.jsÎļþÄØ£¿£¿£¿ÒýÈëÁËÒ»¸öûÓеÄÎļþ£¿£¿£¿
×îÖÕ²é³öÀ´£¬Õâ¸öcordova.jsÎļþËûÊÇ»á¸ù¾Ý²»Í¬µÄƽ̨¶øÐγɲ»Í¬µÄcordova.jsÎļþµÄ¡£¡£¡£ÍÂѪ¡£¡£¡£
¿ÉÒÔ¿´µ½£¬ÎÒ×îÖÕÉú³ÉµÄiOSƽ̨ϵÄĿ¼

ÆäËû¶«Î÷¿´²»¶®Ã»¹ØÏµ£¬¿´µ½ www Ŀ¼Ï¾ͺÃÁË£¬index.html ͬ¼¶ÏÂÉú³ÉÁË cordova.js
ÎļþÁË¡£
ËùÒÔ£¬Èç¹ûÓöµ½Õâ¸öÎÊÌ⣬±ð¾À½áÕâ¸öÎļþΪʲô²»´æÔÚÁË¡£
index.js
ÏÈ¿´´úÂë
var app = {
// Application Constructor
initialize: function() {
document.addEventListener('deviceready', this.onDeviceReady.bind(this),
false);
},
// deviceready Event Handler
//
// Bind any cordova events here. Common events
are:
// 'pause', 'resume', etc.
onDeviceReady: function() {
this.receivedEvent('deviceready');
},
// Update DOM on a Received Event
receivedEvent: function(id) {
var parentElement = document.getElementById(id);
var listeningElement = parentElement.querySelector('.listening');
var receivedElement = parentElement.querySelector('.received');
listeningElement.setAttribute('style', 'display:none;');
receivedElement.setAttribute('style', 'display:block;');
console.log('Received Event: ' + id);
}
}; |
Ò²²»¸´ÔÓ£¬¾ÍÒ»¸ö¶ÔÏó£¬ÀïÃæÓм¸¸ö·½·¨°ÕÁË¡£
Ò»¿ªÊ¼µ÷Óà app.initialize() ·½·¨£¬ÄǾͿ´Õâ¸ö·½·¨×öÁËʲô£¬¼òµ¥À´Ëµ£¬Ìí¼ÓÒ»¸öʼþ°ó¶¨£¬µ±É豸׼±¸ºÃÖ®ºóµ÷ÓÃ
onDeviceReady ·½·¨£¬¶øÔÚÕâ¸ö·½·¨ÄÚµ÷ÓÃһЩʼþ°ó¶¨¶øÒÑÁË£¬Ò»°ãÔÚÕâÀï×öµÄÊÂÇé¾ÍÅжÏÒ»ÏÂÎÒÃDzåÈëµÄ²å¼þÊÇ·ñÒѾ¼¤»î£¬ÒÔ¼°×ö²å¼þ¶ÔÓ¦µÄÊÂÇéÁË¡£
´ó¸ÅÕû¸öcordovaÏîÄ¿¾ÍÊÇÕâÑùµÄÁË£¬½ÓÏÂÀ´×ܽáÒ»ÏÂIonicµÄÏîÄ¿»ù±¾½á¹¹£¬over¡£ |