Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Hybrid AppÒÆ¶¯Ó¦Óÿª·¢³õ̽
 
×÷Õߣº ÖÜÐñÁú
  1728  次浏览      27
2020-5-6 
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½éÉÜÁËÒÆ¶¯AppÀàÐͼ°ÆäÓÅȱµã£¬Òƶ¯AppÀàÐͼ°ÆäÓÅȱµã£¬ÒÔ¼°Cordovaƽ̨»·¾³ÅäÖõÈÏà¹ØÄÚÈÝ¡£
±¾ÎÄÀ´×ÔÓÚcnblogs£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼­¡¢ÍƼö¡£

Ò»¡¢Òƶ¯AppÀàÐͼ°ÆäÓÅȱµã

1.1 Native App

Native App£¨Ô­ÉúApp£©ÊÇÓÃÔ­ÉúÓïÑÔ£¨Object-C/Java/C#/....£©¿ª·¢£¬Óû§ÐèÒªÏÂÔØ°²×°µÄÊÖ»úÓ¦Óá£

ÓŵãÊÇ ¿ÉÒÔÍêÈ«ÀûÓÃϵͳµÄ API ºÍÆ½Ì¨ÌØÐÔ£¬ÔÚÐÔÄÜÉÏÒ²ÊÇ×îºÃµÄ¡£

ȱµãÊÇ ÓÉÓÚ¿ª·¢¼¼Êõ²»Í¬£¬Èç¹ûÄãÒª¸²¸Ç¶à¸öƽ̨£¬ÔòÒªÕë¶Ôÿ¸öƽ̨¶ÀÁ¢¿ª·¢£¬ÎÞ¿çÆ½Ì¨ÌØÐÔ¡£

1.2 Web App

Web AppÖ÷ÒªÊDzÉÓÃͳһµÄ±ê×¼µÄHTML¡¢JavaScriptÓëCSS µÈ Web ¼¼Êõ¿ª·¢¡£

ÓŵãÊÇ Óû§ÎÞÐèÏÂÔØ£¬Í¨¹ý²»Í¬Æ½Ì¨µÄä¯ÀÀÆ÷·ÃÎʼ´¿ÉʵÏÖ¿çÆ½Ì¨£¬Í¬Ê±¿ÉÒÔͨ¹ýä¯ÀÀÆ÷Ö§³Ö³ä·ÖʹÓà HTML5 ÌØÐÔ¡£

ȱµãÊÇ ÕâЩ»ùÓÚä¯ÀÀÆ÷µÄÓ¦ÓÃÎÞ·¨µ÷ÓÃϵͳ API À´ÊµÏÖһЩ¸ß¼¶¹¦ÄÜ£¨ÀýÈçÅÄÕÕ¡¢GPS¡¢´æ´¢µÈ£©£¬Ò²²»ÊʺϸßÐÔÄÜÒªÇóµÄ³¡ºÏ¡£

1.3 Hybrid App

Hybrid App£¨»ìºÏʽApp£©ÖкÍÁËNative AppºÍWeb App¸÷×ÔµÄÓÅÊÆ¡£ ÎÒÃÇ¿ÉÒÔÓà HTML + CSS + JS ¿ª·¢£¬¼æÈݶà¸öƽ̨¡£Óû§Ò²ÒªÏÂÔØ°²×°£¬²¢Äܵ÷ÓÃÊÖ»úµÄÉãÏñÍ·¡¢Í¨Ñ¶Â¼µÈ¹¦ÄÜ£¬ Hybrid AppµÄ¾²Ì¬×ÊÔ´Ò²ÔÚÊÖ»ú±¾µØ¡£

ÓŵãÊÇ ÏàͬµÄ´úÂëÖ»ÐèÕë¶Ô²»Í¬Æ½Ì¨½øÐбàÒë¾ÍÄÜʵÏÖÔÚ¶àÆ½Ì¨µÄ·Ö·¢£¬´ó´óÌá¸ßÁË¶àÆ½Ì¨¿ª·¢µÄЧÂÊ£»¶øÏà½ÏÓÚ Web App£¬¿ª·¢Õß¿ÉÒÔͨ¹ý°ü×°ºÃµÄ½Ó¿Ú£¬µ÷ÓÃ´ó ²¿·Ö³£ÓõÄϵͳ API¡£

¶þ¡¢Hybird App¿ª·¢Æ½Ì¨½éÉÜ

2.1 PhoneGap

PhoneGapÊÇÒ»¸öÓûùÓÚHTML£¬CSSºÍJavaScriptµÄ£¬´´½¨Òƶ¯¿çÆ½Ì¨ÒÆ¶¯Ó¦ÓóÌÐòµÄ¿ìËÙ¿ª·¢Æ½Ì¨¡£Ëüʹ¿ª·¢ÕßÄܹ»ÀûÓÃiPhone£¬Android£¬Palm£¬Symbian£¬WP7£¬WP8£¬BadaºÍBlackberryÖÇÄÜÊÖ»úµÄºËÐŦÄÜ¡ª¡ª°üÀ¨µØÀí¶¨Î»£¬¼ÓËÙÆ÷£¬ÁªÏµÈË£¬ÉùÒôºÍÕñ¶¯µÈ£¬´ËÍâPhoneGapÓµÓзḻµÄ²å¼þ£¬¿ÉÒÔµ÷Óá£

Òµ½çºÜ¶àÖ÷Á÷µÄÒÆ¶¯¿ª·¢¿ò¼Ü¾ùÔ´ÓÚPhoneGap¡£½ÏÖøÃûµÄÓÐWorklight¡¢appMobi¡¢WeX5µÈ£»ÆäÖÐWeX5Ϊ¹úÄÚ´òÔ죬ÍêÈ«Apache¿ªÔ´£¬ÔÚÈÚºÏPhonegapµÄ»ù´¡ÉÏ£¬×öÁËÉî¶ÈÓÅ»¯£¬¾ß±¸½Ó½üNative appµÄÐÔÄÜ£¬Í¬Ê±¿ª·¢±ã½ÝÐÔÒ²½ÏºÃ¡£

2.2 Cordova

CordovaÊǹ±Ï׸øApacheºóµÄ¿ªÔ´ÏîÄ¿£¬ÊÇ´ÓPhoneGapÖгé³öµÄºËÐÄ´úÂ룬ÊÇÇý¶¯PhoneGapµÄºËÐÄÒýÇæ¡£Äã¿ÉÒÔ°ÑËüÃǵĹØÏµÏëÏó³ÉÀàËÆÓÚWebkitºÍGoogle ChromeµÄ¹ØÏµ¡£

CordovaÌṩÁËÒ»×éÉ豸Ïà¹ØµÄAPI£¬Í¨¹ýÕâ×éAPI£¬Òƶ¯Ó¦ÓÃÄܹ»ÒÔJavaScript·ÃÎÊÔ­ÉúµÄÉ豸¹¦ÄÜ£¬ÈçÉãÏñÍ·¡¢Âó¿Ë·çµÈ¡£

Cordova»¹ÌṩÁËÒ»×éͳһµÄJavaScriptÀà¿â£¬ÒÔ¼°ÎªÕâЩÀà¿âËùÓõÄÉ豸Ïà¹ØµÄÔ­Éúºǫ́´úÂë¡£

CordovaÖ§³ÖÈçÏÂÒÆ¶¯²Ù×÷ϵͳ£ºiOS, Android,ubuntu phone os, Blackberry, Windows Phone, Palm WebOS, Bada ºÍ Symbian¡£

2.3 Hybrid App³ÌÐò½á¹¹

ΪÁËÁ˽âÇå³þHybrid AppµÄ³ÌÐò½á¹¹£¬ÎÒÃÇÏÈÀ´¸´Ï°Ò»ÏÂÆÕͨµÄASP.NET WebÍøÕ¾Ó¦ÓõĽṹ£º

×îµ×²ãµ±È»ÊÇCLRÌṩµÄÔËÐÐʱ»·¾³£¬ÕâÊÇËùÓÐ.NETÓ¦ÓóÌÐò¶¼±ØÐëÀµÒÔÉú´æµÄÌõ¼þ¡£ÔÚCLRÖ®ÉÏÊÇ.NET FrameworkÌṩµÄһЩ»ùÀà¿âBCL£¬°üÀ¨ÁËIO¡¢String¡¢ThreadµÈ³£ÓõÄÀàÐÍ¡£ÔÚBCLÖ®ÉÏÊÇһЩ³£ÓõÄFramework£¬ÀýÈçB/SģʽµÄASP.NET WebFormºÍASP.NET MVC£¬C/SģʽµÄWindows Form»òWPFµÈ¡£×îÉϲã²ÅÊÇÎÒÃǵÃÓ¦ÓóÌÐò£¬ËüÊÇ»ùÓÚÏÂÃæµÄ»ù´¡»·¾³À´¹¹½¨µÄ£¬Ò»²ã½ÓÒ»²ã£¬Ã¿Ò»²ã¶¼¶ÔϲãÓÐÒÀÀµ¡£

ÏÖÔÚÎÒÃÇÔÙÀ´¿´ÏÂÃæÒ»ÕÅͼ£¬ËüչʾÁËÒ»¸öHybird AppµÄ½á¹¹£º

ÓëWebÍøÕ¾½á¹¹Í¼Ïà¶ÔÓ¦£¬Hybrid App½á¹¹Í¼µÄ×îµ×²ãÊÇNative Code£¨±¾µØ´úÂ룩£¬ÕâÀïÁоÙÁËÈýÖÖÖ÷Òª²Ù×÷ϵͳiOS¡¢AndroidÒÔ¼°Windows PhoneµÄ¶ÔÓ¦¿ª·¢ÓïÑÔObject-C¡¢JavaºÍC#£¬ÔÚNative AppµÄ¿ª·¢ÖÐÎÒÃÇÖ±½ÓʹÓÃÕ⼸ÖÖÓïÑÔ¿ª·¢¶ÔÓ¦²Ù×÷ϵͳµÄApp¡£ÔÚNative CodeÖ®ÉϵÄÊÇCordova/PhoneGapÕâÑùµÄƽ̨£¬ÕâЩƽ̨ÌṩÁËJavaScriptÖ´ÐÐÆ½Ì¨ºÍNative API£¬Éϲãͨ¹ý´«µÝJS´úÂ룬ÓÉJSÖ´ÐÐÆ½Ì¨½øÐнâÊÍ£¬ÔÙµ÷ÓöÔÓ¦µÄNative API£¬ÓÉNative APIÈ¥µ÷ÓöÔÓ¦²Ù×÷ϵͳµÄNative Code¡£»»¾ä»°Ëµ£¬Cordova/PhoneGapÕâÒ»²ãËù×öµÄ¾ÍÊǶÔNative Code²ãÃæµÄ°ü×°¡£ÔÚÆ½Ì¨²ãÖ®ÉÏÊÇһЩPlugins£¨²å¼þ£©£¬ËüÊÇÒ»¶ÑÊÖ»úµÄÓ²¼þ×é¼þ½Ó¿Ú£¬¿ÉÒÔ·½±ãµØÊ¹ÓÃJS´úÂëµ÷ÓÃÏà»ú¡¢Îļþ¡¢ÍøÂçµÈÓ²¼þ×ÊÔ´¡£×îÉϲãÊÇһЩWebǰ¶ËµÄչʾ²ã¿ò¼Ü£¬½èÖúÕâЩ¿ò¼Ü¿ÉÒÔ·½±ãµØ¿ª·¢³öÊʺÏHybird AppµÄWebÒ³Ãæ¡£

Ò»¸öµäÐ͵ÄHybrid AppµÄµ÷ÓÃÊÖ»úÓ²¼þµÄCameraÏà»ú¹¦ÄܵIJã´Î˳ÐòÈçÏÂͼËùʾ£º

Èý¡¢Cordovaƽ̨»·¾³ÅäÖÃ

3.1 ÅäÖÃJDK»·¾³

ÏÂÔØµØÖ·

°²×°jdk-8u71-windows-x64.exe£¬ÅäÖû·¾³±äÁ¿£º

AVA_HOME = C:\Program Files\Java\jdk1.8.0_71

Path += %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

CLASSPATH += %JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

ÑéÖ¤£ºjava -version

3.2 ÅäÖÃAndroid-SDK»·¾³

ÏÂÔØµØÖ·1

ÏÂÔØµØÖ·2£¨Í¨¹ýAndroid Studio°²×°Android SDK£©£º

½âѹandroid-sdk.rarµ½D:\Develop\Android\sdk£¬ÅäÖû·¾³±äÁ¿£º

ADT_HOME = D:\Develop\Android\sdk

Path += %ADT_HOME%\platform-tools;%ADT_HOME%\tools;

ÑéÖ¤£ºadb -version

3.3 ÅäÖÃApache-Ant»·¾³

ÏÂÔØµØÖ·

½âѹapache-ant-1.9.6.rar£¬ÅäÖû·¾³±äÁ¿£º

ANT_HOME = D:\Develop\ApacheAnt

Path += %ANT_HOME%\bin;

ÑéÖ¤£ºant -versioin

3.4 ÅäÖÃGIT»·¾³

ÏÂÔØµØÖ·

°²×°Git_V2.5.1_64_bit_setup.1441791170.exe£¬ÅäÖû·¾³±äÁ¿£º

GIT_HOME = C:\Program Files\Git

Path += %GIT_HOME%\bin;

ÑéÖ¤£ºgit --version

3.5 ÅäÖÃNode»·¾³

ÏÂÔØµØÖ·

°²×°node-v0.10.29-x64.msi£¬ÅäÖû·¾³±äÁ¿£º

NODE_HOME = C:\Program Files\Nodejs\

Path += %NODE_HOME%;

ÑéÖ¤£ºnode -v,npm -v

3.6 ÅäÖÃCordova»·¾³

ÔÚcmdÖÐÔËÐÐnpm install -g cordova£¨ÔÚÏß°²×°£©

»òÕß½«cordova.rar½âѹµ½C:\Users\YourName\AppData\Roaming\npm\node_modules

PS£ºcordova×îа汾ƥÅäandroid 6.0£¬Òò´ËÄãµÄAndroid SDKÒ²ÒªÏÂÔØ6.0µÄ°ü£¬Èç¹ûÄãÖ»ÓÐ5.xµÄ£¬ÄÇô¿ÉÒÔÖ¸¶¨cordovaµÄ°æ±¾½øÐа²×°£¬ÀýÈç°²×°cordova 5.1.1 £ºnpm install -g cordova@5.1.1¡¡¡¡

ËÄ¡¢µÚÒ»¸öÒÆ¶¯App£º¼òµ¥µÇ¼Demo

4.1 ¿ª·¢Á÷³Ì¸ÅÊö

Ê×ÏÈ£¬Ê¹ÓÃVisual Studio»òSublime TextµÈIDE¿ª·¢WebÍøÒ³£¬È»ºóʹÓÃCordovaƽ̨½øÐдò°üÉú³ÉAndroidÏîÄ¿Îļþ£¬×îºóµ÷ÕûÅäÖÃÎļþºÍ·¢²¼³Éapk¡£

4.2 ʹÓÃVisual Studio¿ª·¢WebÍøÕ¾

ÕâÀïÖ»¿ª·¢Ò»¸ö¼òµ¥µÄloginÒ³Ãæ£¬Òò´ËÖ»ÓÐÒ»¸öHTMLÎļþ£ºlogin.html£¬½èÖúÓÚbootstrapºÍzeptojs¡£login.htmlµÄ´úÂëÈçÏ£º

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>MyHybirdApp</title>
<link href="assets/lib/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
<link href="assets/css/style.css" rel="stylesheet" />
</head>
<body>
<!-- ±íµ¥ÇøÓò -->
<form id="form_login" class="form-main" method="post" autocomplete="off">
<h2>Sign in</h2>
<hr />
<div class="avator">
<img id="myavator" src="assets/img/avatar.png" />
</div>
<div class="message-box"></div>
<label for="username" class="sr-only">Username</label>
<input id="username" type="text" class="form-control input-lg input-group-top" placeholder="Input your Username" required autofocus>
<label for="password" class="sr-only">Password</label>
<input id="password" type="password" class="form-control input-lg input-group-bottom" placeholder="Input your Password" required>
<div class="checkbox">
<input id="remember" type="checkbox" value="remember-me" checked>
<label for="remember">Remember me</label>
<a class="link" href="register.html">Sign up</a>
</div>
<input type="hidden" name="redirect" value="/" />
<button id="btn_login" class="btn btn-lg btn-info btn-block">Sign in</button>
</form>
<!-- ½Å±¾ÇøÓò -->
<script type="text/javascript" src="assets/lib/zepto/zepto.min.js"></script>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript">
$(function () {
// µ÷ÓÃÊÖ»úÓ²¼þÅÄÕÕ
$('#myavator').on('click', function () {
navigator.camera.getPicture(onSuccess, onFail, {
quality: 50,
destinationType: Camera.DestinationType.DATA_URL
});

function onSuccess(imageData) {
var image = document.getElementById('myavator');
image.src = "data:image/jpeg;base64," + imageData;
}

function onFail(message) {
alert('Failed because: ' + message);
}
});
// ·ÃÎÊ·þÎñ¶Ë·þÎñ
$('#btn_login').on('click', function () {
var userName = $('#username').val();
var password = $('#password').val();
if (userName == "") {
alert('Please input your user name!');
}
else if (password == "") {
alert('Please input your password!');
}
else {
// ÔÚPCä¯ÀÀÆ÷¶ËµÄ»°ÏÂÃæµÄajaxÇëÇó¾ÍÉæ¼°µ½¿çÓò£¬¶øÔÚCordovaÖÐÎÒÃDz»ÐèÒª¿¼ÂÇôôßÕ
$.get('http://www.edisonchou.cn/AccountHandler.ashx?action =Login&username=' + userName + '&password=' + password + '', {
}, function (data) {
alert(data.Message);
});
}

return false;
});
});
</script>
</body>
</html>

 

ÕâÀïÐèҪעÒâµÄÓÐÒÔϼ¸µã£º

£¨1£©·ÃÎÊ·þÎñ¶ËµÄ·þÎñ

// ·ÃÎÊ·þÎñ¶Ë·þÎñ
$('#btn_login').on('click', function () {
var userName = $('#username').val();
var password = $('#password').val();
if (userName == "") {
alert('Please input your user name!');
}
else if (password == "") {
alert('Please input your password!');
}
else {
// ÔÚPCä¯ÀÀÆ÷¶ËµÄ»°ÏÂÃæµÄajaxÇëÇó¾ÍÉæ¼°µ½¿çÓò £¬¶øÔÚCordovaÖÐÎÒÃDz»ÐèÒª¿¼ÂÇôôßÕ
$.get('http://www.edisonchou.cn/AccountHandler.ashx?action =Login&username=' + userName + '&password=' + password + '', {
}, function (data) {
alert(data.Message);
});
}

return false;
});

ÎÒÃÇÖªµÀÔÚ´«Í³PC ä¯ÀÀÆ÷¶ËÖУ¬ajaxÇëÇóÊÜÏÞÓÚXMLHttpRequestÎÞ·¨½øÐпçÓòÇëÇó£¬ÎÒÃÇ¿ÉÄÜÐèÒª½èÖúJSONPÒ»ÀàµÄ°ïÊÖ°ïÎÒÃǽâ¾ö£¬¶øÔÚCordovaÉú³ÉµÄHybird AppÖв»ÐèÒª¿¼ÂÇÕâ¸öÎÊÌâ¡£ÔÚÉÏÃæµÄ´úÂëÖУ¬getÇëÇó·ÃÎʵÄÊÇÒ»¸öλÓÚÔ¶¶Ë·þÎñÆ÷ÖеÄÒ»¸ö·þÎñ£¨¿ÉÒÔÊÇashxÒ»°ã´¦Àí³ÌÐò£¬Ò²¿ÉÒÔÊÇÒ»¸öMVCÓ¦ÓõÄaction£©¡£

£¨2£©·ÃÎÊAndroidÊÖ»úµÄÓ²¼þ

// µ÷ÓÃÊÖ»úÓ²¼þÅÄÕÕ
$('#myavator').on('click', function () {
navigator.camera.getPicture(onSuccess, onFail, {
quality: 50,
destinationType: Camera.DestinationType.DATA_URL
});

function onSuccess(imageData) {
var image = document.getElementById('myavator');
image.src = "data:image/jpeg;base64," + imageData;
}

function onFail(message) {
alert('Failed because: ' + message);
}
});

²Î¿¼CordovaµÄAPIÎĵµ£¬ÎÒÃÇ¿ÉÒÔͨ¹ýÈçÉÏËùʾµÄJS´úÂë·ÃÎÊCameraÏà»ú£¬²¢µ÷ÓÃÏà»ú½øÐÐÅÄÕÕ¡£Á½¸öʼþonSuccessºÍOnFailÔòÊÇÅÄÕճɹ¦»òʧ°ÜºóµÄ´¦ÀíÂß¼­¡£ÕâÀï³É¹¦ºó£¬ÎÒÃǽ«ÐÂÅĵÄÕÕÆ¬·Åµ½Í·ÏñImageλÖá£

ÁíÍ⣬ÎÒÃÇ»¹ÐèÒªÒ»¸ö·þÎñ¶Ë£¬ÌṩµÇ¼ÑéÖ¤µÄ½Ó¿Ú¹©App¿Í»§¶Ëµ÷Óã¬ÕâÀïÎÒÃǼòµ¥µØ×öÒ»¸öashxÒ»°ã´¦Àí³ÌÐòÀ´½øÐд¦Àí£¬²¢½«Æä·¢²¼µ½°¢ÀïÔÆµÄÐéÄâ»úÖÐÒÔ±ãÊÖ»ú¿ÉÒÔËæÊ±·ÃÎÊ£¬Æä´¦ÀíÂß¼­´úÂëÈçÏ£º

public class AccountHandler : IHttpHandler
{

public void ProcessRequest(HttpContext context)
{
if (string.IsNullOrEmpty(context.Request["action"]))
{
return;
}

string action = context.Request["action"];
JsonObject jsonObject = new JsonObject();
switch (action)
{
case "Login":
string userName = context.Request["username"];
string password = context.Request["password"];
jsonObject.UserId = userName;

bool result = CheckAccount(userName, password);
if (result)
{
jsonObject.Message = "Success";
}
else
{
jsonObject.Message = "Failed";
}

JavaScriptSerializer serializer = new JavaScriptSerializer();
string jsonResult = serializer.Serialize(jsonObject);
context.Response.ContentType = "application/json";
context.Response.Write(jsonResult);
break;
}
}

private bool CheckAccount (string userName, string password)
{
bool result = false;
List<Account> accountList = GetAccountList();
foreach (var account in accountList)
{
if (account.UserName.Equals(userName) && account.Password.Equals(password))
{
result = true;
}
}

return result;
}

private List<Account> GetAccountList()
{
return new List<Account>()
{
new Account() { UserName="edisonchou", Password="123456" },
new Account() { UserName="zhouxulong", Password="654321"}
};
}

public bool IsReusable
{
get
{
return false;
}
}
}

ÕâÀïûÓнøÐÐÊý¾Ý¿âµÄ²Ù×÷£¬¶øÊǼòµ¥µÃÄ£ÄâÁËÒ»¸öº¬ÓÐÁ½ÌõÓû§ÐÅÏ¢µÄList¼¯ºÏ¡£

4.3 ʹÓÃCordova´ò°üapkÎļþ

1.н¨Ò»¸öÏîÄ¿Îļþ¼Ð

ÓÐÁËWebÍøÕ¾£¬ÎÒÃÇ¿ÉÒÔ½øÐÐAppµÄ×¼±¸¹¤×÷ÁË£¬Ê×ÏÈн¨Ò»¸öCordovaÏîÄ¿Îļþ¼Ð£º

ÕâÀïÎÒÃǸøappÈ¡ÃûΪԼÂð£¬PS£º½ñÌìÇéÈ˽ڣ¬ÄãÔ¼ÁËÂð£¿

È»ºó½«wwwÎļþÀïÃæµÄÄÚÈÝÈ«²¿É¾³ý£¬½«ÎÒÃÇ¿ª·¢µÄwebÍøÒ³ÒÔ¼°ÒÀÀµµÄ×ÊÔ´£¨Í¼Æ¬¡¢css¡¢jsµÈ£©¿½±´µ½´ËĿ¼Ï£º

2.Ôö¼Óandroid platformÖ§³Ö

ÓÐÁËÒ»¸öCordovaµÄÏîÄ¿Îļþ¼Ð£¬ÎÒÃÇÐèÒªÔö¼ÓÒ»¸öandroidµÄplatform£¬ÒòΪÎÒÃÇÒª×öµÄÊÇÒ»¸ö»ùÓÚandroidµÄapp¡£½øÈëyuemaÎļþ¼Ð£¬È»ºóÊäÈëÒÔÏÂÃüÁ

3.Ôö¼Óandroid pluginÖ§³Ö

ÓÉÓÚÎÒÃǵÄappʹÓÃÁËÓ²¼þ£¬ËùÒÔÐèÒªÔö¼ÓÕë¶ÔÏà¶ÔÓ¦Ó²¼þµÄpluginÖ§³Ö£¬Ç°ÃæÌáµ½ÎÒÃÇÐèÒªµ÷ÓöÔÓ¦µÄplugin£¬ÓÉpluginÈ¥µ÷ÓÃJS½âÊÍÆ÷Éú³É¶ÔÓ¦Native API¡£ÕâÀïÎÒÃÇÔö¼ÓcameraµÄplugin£º

4.4 µ÷ÕûÅäÖÃÎļþºÍ·¢²¼Ó¦ÓÃ

ÔÚcordovaÉú³ÉµÄÏîÄ¿Îļþ¼ÐÖУ¬×î¶¥²ãÓÐÒ»¸öconfig.xml£¬Õâ¸ö¾ÍÊÇÎÒÃÇÐèÒª±à¼­µÄÅäÖÃÎļþ¡£

1.ÉèÖÃappµÄÆðÊ¼Ò³Ãæ

<!-- Ó¦ÓóÌÐòÈë¿Ú -->
<content src="login.html" />

2.ÉèÖÃappµÄIconÒÔ¼°SplashScreen

<!-- Õë¶Ô²»Í¬Æ½Ì¨µ¥¶ÀµÄÉèÖÃÑ¡Ïî -->
<platform name="android">
<allow-intent href="market:*" />
<!-- app icon image -->
<icon src="www/assets/img/avatar.png" density="ldpi" />
<icon src="www/assets/img/avatar.png" density="mdpi" />
<icon src="www/assets/img/avatar.png" density="hdpi" />
<icon src="www/assets/img/avatar.png" density="xdpi" />
<!-- splash screen image -->
<splash src="www/assets/img/splashscreen.png" density="land-hdpi" />
<splash src="www/assets/img/splashscreen.png" density="land-ldpi" />
<splash src="www/assets/img/splashscreen.png" density="land-mdpi" />
<splash src="www/assets/img/splashscreen.png" density="land-xdpi" />
<splash src="www/assets/img/splashscreen.png" density="port-hdpi" />
<splash src="www/assets/img/splashscreen.png" density="port-ldpi" />
<splash src="www/assets/img/splashscreen.png" density="port-mdpi" />
<splash src="www/assets/img/splashscreen.png" density="port-xdpi" />
</platform>

ÍêÕûµÄconfig.xmlÈçÏ£º

<?xml version='1.0' encoding='utf-8'?>
<widget id="cn.edisonchou.app" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>Ô¼Âð</name>
<description>
Edison ChouµÄµÚÒ»¸öCordovaÓ¦ÓÃ.
</description>
<author email="edisonchou@hotmail.com" href="http://www.edisonchou.cn">
Edison Chou
</author>
<!-- Ó¦ÓóÌÐòÈë¿Ú -->
<content src="login.html" />
<!-- ²å¼þÒÀÀµÏî -->
<plugin name="cordova-plugin-whitelist" version="1" />
<!-- ÍøÂçÀàÐÍÅäÖà *´ú±íËùÓеØÖ·¾ù¿É·ÃÎÊ-->
<access origin="*" />
<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:*" />
<!-- app icon image -->
<icon src="www/assets/img/avatar.png" density="ldpi" />
<icon src="www/assets/img/avatar.png" density="mdpi" />
<icon src="www/assets/img/avatar.png" density="hdpi" />
<icon src="www/assets/img/avatar.png" density="xdpi" />
<!-- splash screen image -->
<splash src="www/assets/img/splashscreen.png" density="land-hdpi" />
<splash src="www/assets/img/splashscreen.png" density="land-ldpi" />
<splash src="www/assets/img/splashscreen.png" density="land-mdpi" />
<splash src="www/assets/img/splashscreen.png" density="land-xdpi" />
<splash src="www/assets/img/splashscreen.png" density="port-hdpi" />
<splash src="www/assets/img/splashscreen.png" density="port-ldpi" />
<splash src="www/assets/img/splashscreen.png" density="port-mdpi" />
<splash src="www/assets/img/splashscreen.png" density="port-xdpi" />
</platform>
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
</platform>
</widget>

 

3.±àÒë·¢²¼app³ÉapkÎļþ

ͨ¹ýÃüÁcordova build android À´Éú³É×îºóµÄapkÎļþ

Éú³ÉµÄapkÎļþλÓÚ£ºYourDirectory\yuema\platforms\android\build\outputs\apk ÖÐ

4.5 Ô¤ÀÀÎÒÃǵÄapp

½«Éú³ÉµÄapk·Åµ½ÎÒÃǵÃandroidÊÖ»úÖв¢½øÐа²×°£¬È»ºóµã»÷½øÈ룬ÏÂÃæÊÇÑÝʾͼƬ£¨ÑÝʾÊÖ»ú£ºSmartisan T1£©¡£

£¨1£©°²×°app

£¨2£©µã»÷½øÈëµÇÂ¼Ò³Ãæ

ÒÔÏÂÁ½¸ögifͼƬÊÜÏÞÓÚgifÖÆ×÷Èí¼þ£¬Ð§¹û½Ï²î£¬µ«Êǹ¦ÄÜÒѾ­ÑÝʾÁ˳öÀ´£º

£¨3£©µ÷Ó÷þÎñ¶Ë½øÐÐÑéÖ¤

£¨4£©µ÷ÓÃÏà»ú½øÐÐÅÄÕÕ

¸½¼þÏÂÔØ

1.Õû¸öÏîÄ¿µÄÔ´´úÂë

2.Éú³ÉºóµÄapkÎļþ

 

 
   
1728 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
Flutter-Ä㻹ÔÚÀÄÓÃStatefulWidgetÂð
ÒÆ¶¯APP°²È«²âÊÔÒªµã
ÉîÈëdz³ö Kotlin Э³Ì
iOS ×é¼þ»¯ ¡ª¡ª ·ÓÉÉè¼ÆË¼Â··ÖÎö
ÒÆ¶¯¶Ë¿çƽ̨¿ª·¢µÄÉî¶È½âÎö
×îпγÌ
Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò¿ª·¢
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
AndroidÓ¦Óø߼¶¿ª·¢
ÒÆ¶¯»¥ÁªÍøÓ¦Óÿª·¢£¨iOS£¬Android£¬HTML5)
³É¹¦°¸Àý
±±¾© iOS¿ª·¢¼¼ÊõÉîÈëÑо¿
ijÆóÒµ Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò¿ª·¢
ÖÐÌå²Ê Android²úÆ·¼¶²âÊÔ
ÒÆ¶¯Í¨ÐÅ ÒÆ¶¯»¥ÁªÍøÓ¦Óÿª·¢Ô­Àí
ijµçÁ¦ÐÐ android¿ª·¢Æ½Ì¨×î¼Ñ