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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ʹÓà Dojo Mobile ºÍ PhoneGap ¹¹½¨Òƶ¯Ó¦ÓóÌÐò
 
×÷ÕߣºÍõ½¨¾ü£¬»Ê³É À´Ô´£ºIBM ·¢²¼ÓÚ 2015-6-15
  2389  次浏览      27
 

Ëæ×ÅÒÆ¶¯É豸¼ÆËãÄÜÁ¦µÄÈÕÒæÔöÇ¿ÒÔ¼°ÎÞÏßÍøÂçµÄÆÕ¼°£¬ÈËÃǶÔÓÚÒÆ¶¯Ó¦ÓõÄÐèÇóÔ½À´Ô½´ó¡£ÓÉÓÚÖ÷Á÷ƽ̨µÄ²îÒ죬Èç iOS ºÍ Android£¬Ó¦ÓóÌÐòÐèÒªÕë¶Ô²»Í¬µÄƽ̨½øÐÐÖØ¸´¿ª·¢¡£Îª½â¾öÕâ¸öÎÊÌ⣬PhoneGap ÌṩÁË»ùÓÚ Web µÄͳһ±à³Ì·½Ê½£¬Ê¹µÃͬһ³ÌÐòÄܹ»ÔÚ²»Í¬µÄƽ̨ÉÏÔËÐС£È»¶ø£¬PhoneGap ²¢Î´Ìṩ¼æÈݲ»Í¬Æ½Ì¨µÄͳһ½çÃæ·ç¸ñ¡£Dojo Mobile ÕýºÃÃÖ²¹Õâһȱʧ£¬½«Í¬Ò»³ÌÐòÔÚ²»Í¬Æ½Ì¨ÏÂÕ¹ÏÖΪÓëÆ½Ì¨Ò»ÖµĽçÃæ·ç¸ñ¡£ÁíÍ⣬Dojo Mobile »¹ÌṩÁËÄ£¿é»¯µÄ×é¼þ Widget£¬¼òµ¥ÓÐЧµÄÊý¾Ý½Ó¿Ú£¬´ó´óÌá¸ßÁË¿ª·¢µÄЧÂÊ¡£

±¾ÎĽ«Ïêϸ½²Êö Dojo Mobile ÔÚ PhoneGap ÉϵĿª·¢¹ý³Ì£¬²¢Í¨¹ýÒ»¸öʵÀý³ÌÐò½øÐн²½â£¬Äܹ»ÈöÁÕß¿ìËÙÕÆÎÕÀûÓà Dojo Mobile ÔÚ PhoneGap ÉϵĿª·¢¼¼Êõ¡£

±³¾°½éÉÜ

PhoneGap ÊÇÒ»¿î¿ªÔ´ÇÒ¿çÆ½Ì¨µÄÒÆ¶¯Ó¦Óÿª·¢¿ò¼Ü¡£Ëü¶Ô¸÷¸öÒÆ¶¯Æ½Ì¨µÄ±¾Éí API ½øÐÐÁ˼ò»¯ºÍ³éÏ󡣿ª·¢Õß½öÐèÒªÕÆÎÕ Web ¿ª·¢µÄ»ù±¾¼¼Êõ£¬¾Í¿ÉÒÔʹÓà HTML ºÍ JavaScript ÔÚÆäÉϽøÐпª·¢¡£Ëù¿ª·¢µÄ JavaScript + HTML ´úÂ룬¾­¹ý PhoneGap ƽ̨µÄ·â×°£¬¿ÉÒÔµ¼³öΪ iOS ºÍ Android ³ÌÐò¡£»ùÓÚ PhoneGap ¿ª·¢µÄÓ¦ÓóÌÐò¼æÈÝÐԺ㬿ÉÒÔ×öµ½¡°Write once, run everywhere¡±¶ø¼æÈÝÐÔԽǿ£¬ËùÐèµÄ¿ª·¢³É±¾Ô½µÍ¡£Ä¿Ç° PhoneGap ¶Ô²»Í¬Æ½Ì¨ÌṩµÄ¹¦ÄÜÌØÐÔÓÐÒ»¶¨µÄ²î±ð£¬Èçͼ 1 Ëùʾ¡£Æä¶ÔÓÚÖ÷Á÷ƽ̨ Windows Phone 7¡¢Android ¼° iOS 4 Ò²Äܹ»·Ç³£ºÃµØÖ§³Ö¡£

ͼ 1.PhoneGap ÔÚ²»Í¬Æ½Ì¨ÏµÄÌØÐÔ

PhoneGap ¶ÔÓÚ±ê×¼»¯ÓÐ×ŷdz£ºÃµÄÖ§³Ö£¬Ëü»ùÓÚ W3C ±ê×¼£¬ÏÖÓÐµÄ Web ³ÌÐòÉõÖÁÎÞÐèÐ޸ľͿÉÒÔÔÚ PhoneGap ÉÏÔËÐС£µ±Ó빦ÄÜÇ¿´óµÄ Mobile ¿ò¼Ü½áºÏʱ£¬Äܹ»¼«´óµØ½µµÍ¿ª·¢³É±¾¡£

Dojo Mobile ¿ò¼ÜÊÇÒ»¸öÒÆ¶¯Öͦ赀 Web Ó¦Óÿª·¢¿ò¼Ü£¬ÊÇ Dojo µÄÒ»¸ö×ÓÏîÄ¿¡£ËüÖ÷ÒªÃæÏòÊÖ³ÖÉ豸É쵀 Web ¸»¿Í»§¶ËÓ¦Óÿª·¢£¬ÌṩÁË iOS ºÍ Android Á½Ì×Ö÷Ì⣬ ʹµÃ»ùÓÚ Dojo Mobile µÄÓ¦ÓþßÓÐÊÖ»ú±¾µØÓ¦ÓõÄÍâ¹ÛºÍЧ¹û¡£Dojo Mobile ¾ßÓÐÇáÁ¿¼¶¡¢Ä£¿é»¯¡¢Ëٶȿ켰·â×°ÐԺõÄÌØµã¡£

Dojo Mobile ¾­¹ýѹËõÖ®ºóÌå»ýÖ»Óм¸°Ù K£¬¶ÔÓÚÒÆ¶¯É豸·Ç³£Êʺϡ£

Dojo Mobile »ùÓÚ HTML5 ºÍ CSS3 À´ÊµÏÖÒ»Ð©ÌØÐ§£¬±È½ÏÁ÷³©£¬ÏìÓ¦Ëٶȿ졣

Dojo Mobile ¶ÔÓÚ iOS ºÍ Android Ö÷Ìâ·â×°ÐԺ㬿ª·¢ÕßÖ»ÐèʹÓÃͳһµÄ²¼¾ÖºÍ CSS ¼´¿ÉʵÏÖ²»Í¬Æ½Ì¨µÄ±¾µØÐ§¹û¡£

³ý´ËÖ®Í⣬Dojo Mobile Óë PhoneGap µÄ½áºÏÒ²·Ç³£ºÃ£¬»ùÓÚ Dojo Mobile µÄ³ÌÐò¿ÉÒԺܼòµ¥µÄ±» PhoneGap ת»»³É±¾µØÓ¦ÓóÌÐò¡£

¿ª·¢»·¾³´î½¨

´î½¨¿ª·¢»·¾³·ÖΪÈý¸ö²½Ö裺µÚÒ»²½£¬´î½¨ Android ¿ª·¢»·¾³¡£µÚ¶þ²½£¬ÅäÖà PhoneGap£¬½«Æä¼¯³Éµ½ Android ÏîÄ¿ÖС£µÚÈý²½£¬ÔÚÅäÖÃºÃµÄ Android ÏîÄ¿ÖмÓÈë Dojo Mobile¡£

Android ¿ª·¢»·¾³

Android ¿ª·¢»·¾³¿ÉÒÔÅäÖÃÔÚ Windows,¡¢Mac OS,¡¢Linux µÈ²Ù×÷ϵͳÉÏ¡£±¾ÎĵÄʾÀýÊÇÔÚ Windows XP ƽ̨ÉÏ¿ª·¢£¬ÒÔϾÍÒÔ Windows XP ΪÀý½øÐнéÉÜ¡£Android ¿ª·¢»·¾³µÄ´î½¨ÐèÒªÈô¸ÉÈí¼þ£¬ÏêϸÈçÏ£ºJDK,¡¢Eclipse¡¢Android SDK, ADT(Eclipse ²å¼þ )¡£

JDK µÄ°²×°ÅäÖÃÓë Eclipse µÄÅäÖ㬶ÔÓÚÈκΠJava ¿ª·¢Õß»òÕßÓà Eclipse ×÷Ϊ¿ª·¢Æ½Ì¨µÄ¿ª·¢ÕßÀ´Ëµ¶¼ÊǷdz£ÊìϤµÄ£¬ÔÚÕâÀï¾Í²»×¸ÊöÁË¡£

°²×°ÅäÖúà JDK Óë Eclipse Ö®ºó£¬½ÓÏÂÀ´ÐèÒª°²×° Android SDK ºÍ ADT¡£

Android SDK ¿ÉÒÔÔÚ http://developer.android.com/sdk/index.html ÏÂÔØ»ñµÃѹËõ°ü android-sdk-windows.zip¡£Ïêϸ¹ý³ÌÈçÏ£º
I. ½«´ËѹËõ°ü½âѹµ½ C:\android( Ŀ¼¿ÉÒÔÐÞ¸Ä )£¬ÔËÐÐĿ¼Ï嵀 Setup.exe ½«»áµ¯³ö´°¿ÚÈçͼ 2¡£Èô³öÏÖ"Fail to fetch URL..."ÀàËÆµÄ´íÎóÌáʾ£¬ÇëµãÑ¡ Settings panel ÖÐµÄ check box£¨ºìÉ«¿ò±ê¼Ç´¦£©¡£

ͼ 2. HTTP ÇëÇó·½Ê½ÉèÖÃ

II. ÔÚÉÏÃæµÄ´°¿ÚÖÐÑ¡Ôñ Available packages£¬³öÏÖͼ 3 ËùʾµÄ´°¿Ú¡£ÇëÑ¡Ôñ¿ª·¢ÐèÒªµÄ API °æ±¾²¢µã»÷´°¿ÚÓÒÏ·½µÄ"Install Selected"°´Å¥¡£ÔÚ½ÓÏÂÀ´³öÏÖµÄÒ³ÃæÖУ¬Çë×ÐϸÔĶÁÏà¹ØµÄ license£¬È»ºóÑ¡Ôñ"Accepted All"ºÍ"Install Selected"£¬ÏµÍ³½«Íê³É API °æ±¾µÄ°²×°¡£

ͼ 3 °²×°²»Í¬°æ±¾µÄ API

III. °²×°½áÊøÖ®ºó£¬¿ÉÒÔÔÚ"Installed packages"Öп´µ½ËùÓа²×°³É¹¦µÄ API °æ±¾£¬Èçͼ 4¡£

ͼ 4. °²×°³É¹¦µÄ API °æ±¾

IV. Android SDK µÄÅäÖá£ÀàËÆÓÚ JDK °²×°Íê³ÉºóµÄÅäÖã¬Android SDK °²×°Íê³ÉÖ®ºóÒ²ÐèÒªÔÚϵͳµÄ»·¾³±äÁ¿ÖÐÅäÖ᣾ßÌåµÄ×ö·¨Êǽ« SDK Ŀ¼Ï tools Îļþ¼ÐµÄ·¾¶Ìí¼Óµ½ Path ÖС£

µ½´Ë£¬Android SDK µÄ°²×°ÓëÅäÖþÍÍê³ÉÁË¡£½ÓÏÂÀ´½«Òª½øÐеÄÊÇ Android ²å¼þ ADT ÔÚ Eclipse ÉϵݲװÓëÅäÖá£Ïêϸ¹ý³ÌÈçÏ£º
I. Eclipse Æô¶¯ºó£¬Ñ¡Ôñ Help ²Ëµ¥ÖеÄ"Software Updates..."£¬³öÏÖÈçͼ 5 ËùʾµÄ´°¿Ú¡£µã»÷ÓÒ±ß"Add Site..."°´Å¥£¬³öÏÖÁËͼ 6 µÄ´°¿Ú£¬½«²å¼þ ADT µÄ°²×°µØÖ· https://dl-ssl.google.com/android/eclipse Ìí¼ÓÖÁÊäÈë¿òÖв¢µã»÷ OK °´Å¥¡£Èô³öÏÖ"No repository Found..."µÄ´íÎóÌáʾ£¬Çë³¢ÊÔ½« https ÐÞ¸ÄΪ http ÖØÐ³¢ÊÔ¡£

ͼ 5. ²å¼þ¸üд°¿Ú

ͼ 6. Ìí¼ÓÕ¾µã

II. ÕýÈ·Ñ¡ÔñÕ¾µãºó£¬´°¿ÚÖлáÁгö¿ÉÒÔ°²×°µÄ²å¼þÁÐ±í£¬Ñ¡Ôñ×îеİ汾²¢°´ÕÕÌáʾ°²×°¼´¿É¡£

III. °²×°Íê³ÉºóÖØÆô Eclipse¡£Ñ¡Ôñ window ²Ëµ¥Ïî Preference ´°¿Ú£¬Èçͼ 7 Ëùʾ¡£Ñ¡Ôñ×ó±ßÏÂÁбíÖÐµÄ Android Ñ¡ÏÔÚÓұ߳öÏÖµÄ SDK Location ÊäÈë¿òÖÐÅäÖà SDK µÄ°²×°Ä¿Â¼²¢µã»÷"OK"°´Å¥¡£

ͼ 7.Preference ´°¿Ú

IV. µ½´Ë ADT µÄ°²×°ÓëÅäÖÃÍê³É¡£°²×°ÅäÖóɹ¦ºó£¬±ã¿ÉÒÔÔÚ Eclipse ¹¤¾ßÀ¸¿´µ½ÏóÕ÷ Android µÄ»úÆ÷ÈËͼ±ê¼° Window ²Ëµ¥À¸ÖÐ ADT µÄÑ¡Ï¼ûͼ 8¡£

ͼ 8.ADT ²å¼þÑ¡Ïî

V. Android µÄÔËÐд´½¨Ìض¨°æ±¾µÄ AVD(android Virtual Device)¡£ÔÚ Android SDK and AVD Manager ´°¿Ú×ó²àÑ¡Ôñ Virtual devices£¬ÔÚÓұ߳öÏÖµÄ panel Öеã»÷"New"°´Å¥¡£

ͼ 9. ´´½¨ AVD

ÅäÖÃ PhoneGap

PhoneGap ÊÇÒ»¸öʹ Web ¿ª·¢ÕßÄܹ»¿ìËÙ¿ª·¢¿çÒÆ¶¯Æ½Ì¨Ó¦ÓóÌÐòµÄ¹¤¾ß¡£Ö»ÐèÒª Web ¿ª·¢Õ߾߱¸Á¼ºÃµÄ HTML, JavaScript, CSS ¼¼Êõ¾Í¿ÉÒÔͨ¹ý PhoneGap ½«Æä·â×°³ÉÊÊÓ¦ iOS¡¢Android¡¢BlackBerry¡¢ Web OS¡¢Symbian µÈ 5 ´óƽ̨µÄÓ¦Óá£ÅäÖùý³ÌÈçÏ£º

I. ´Ó http://phonegap.com ÏÂÔØ PhoneGap ѹËõ°ü£¬²¢½âѹ¡£

II. ÔÚ Android ¹¤³Ì¸ùĿ¼ÏÂн¨Á½¸öÎļþ¼Ð£º/libs, /assets/www. ½« PhoneGap ѹËõ°ü½âѹ·ÅÔÚĿ¼ D:\PhoneGap Ï¡£½« D:\PhoneGap\android\phonegap.jar ¸´ÖƵ½ Android ¹¤³ÌµÄ libs Ŀ¼²¢Ìí¼Óµ½¹¤³ÌµÄ classpath ÖС£½« D:\PhoneGap\android\phonegap.js ¸´ÖƵ½ Android ¹¤³ÌµÄ www Ŀ¼Ï²¢½« D:\PhoneGap\android\xml Îļþ¼Ð¸´ÖƵ½ Android ¹¤³ÌµÄ res Ŀ¼Ï¡£

III. µ÷Õû Android ¹¤³ÌµÄÅäÖÃÎļþ AndroidManifest.xml¡£½«Çåµ¥ 1 ÖеÄÄÚÈݸ´ÖƵ½ <manifest> µÄµÚÒ»¸ö×ÓÔªËØµÄλÖá£ÆäÖÐ <uses-permission> ×÷ÓÃÊǸ³ÓèÓ¦ÓóÌÐò·ÃÎÊÌØ¶¨É豸µÄȨÏÞ£¬ÈçÕÕÏà»ú¡¢ÎļþµÈ¡£ÈôÓ¦ÓóÌÐò²»ÐèÒª·ÃÎÊÕâЩÉ豸£¬¿É½«Æä¶ÔÓ¦µÄ·ÃÎÊȨÏÞÈ¥µô¡£ÁíÍ⣬½«ÊôÐÔ android:configChanges="orientation|keyboardHidden" Ìí¼Óµ½µÚÒ»¸ö <activity> ÖУ¬²¢½«Çåµ¥ 2 ÖеÄÄÚÈÝÌí¼Óµ½µÚÒ»¸ö <activity> Ö®ºó¡£

Çåµ¥ 1.Ìí¼ÓÄÚÈݵ½ androidManifest.xml

¡¶DAL Êý¾Ý·ÃÎʲ㡷

Çåµ¥ 2 Ìí¼ÓÄÚÈݵ½ androidManifest.xml

¡¶DAL Êý¾Ý·ÃÎʲ㡷

VI. ÔÚ www Îļþ¼ÐÏ´´½¨ index.html ×÷ΪÏÔÊ¾Ò³Ãæ¡£½«¼Ì³Ð×Ô Activity µÄÀàÐÞ¸ÄΪ¼Ì³ÐÓÚ DroidGap£¬²¢½«´ËÀàµÄ onCreate ·½·¨ÖÐµÄ setContentView(R.layout.main) Ò»ÐÐÐÞ¸ÄΪ super.loadUrl("file:///android_asset/www/index.html")¡£×îºó£¬½« JS ½Å±¾Îļþ phonegap.js µ¼Èëµ½ index.html ÖУ¬¼ûÇåµ¥ 3¡£

V. ½«Çåµ¥ 3 ÖеÄÄÚÈݸ´ÖƵ½ index.html ÖУ¬ÔËÐÐ Android Ó¦ÓóÌÐò¡£ÈôÄÜÔÚ Android Ä£ÄâÆ÷ÖгöÏÖÐÂÒ³Ãæ²¢ÏÔʾ"Hello, this is my first PhoneGap application."˵Ã÷ PhoneGap ÅäÖóɹ¦£¬¼ûͼ 10¡£

ͼ 10. PhoneGap ÅäÖòâÊÔ½ØÍ¼

Çåµ¥ 3 PhoneGap ÅäÖòâÊÔ

 <!DOCTYPE HTML> 
<html>
<head>
<title>PhoneGap Test</title>
<script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
</head>
<body>
<h1>Hello, this is my first PhoneGap application.</h1>
</body>
</html>

¼ÓÈë Dojo Mobile

Dojo ÊÇÒ»¸öÇ¿´óµÄ¡¢¿çƽ̨ÇÒ¿ªÔ´µÄ JavaScript ¿ò¼Ü£¬ÌṩÁ˷ḻµÄ¿Ø¼þ·½±ã Web ¿ª·¢ÕßʹÓá£Dojo Mobile ÊÇ Dojo µÄÒ»²¿·Ö£¬Îª Mobile ÁìÓòÌṩÁËÒ»Ì×Ç°Ì¨Ò³Ãæ¼¼Êõ½â¾ö·½°¸¡£

Dojo Ŀǰ¹Ù·½·¢²¼×îаæÎª 1.7 °æ£¬¿ÉÒÔÔÚ http://dojotoolkit.org/download/ ÏÂÔØµÃµ½¡£±¾Ê¾ÀýÊÇÔÚ Dojo 1.6 °æ±¾²âÊÔͨ¹ý£¬1.7 °æ±¾µÄÅäÖ÷½·¨ÓëÖ®ÀàËÆ¡£½«ÏÂÔØµÃµ½µÄ zip ѹËõ°ü½âѹ¡£

ÔÚ www Îļþ¼ÐÏ´´½¨ libs Îļþ¼Ð£¬²¢ÔÚ libs Ï´´½¨ Dojo Ö÷Ŀ¼¡£ÔÚ Dojo Ö÷Ŀ¼Ï´´½¨ Dojo ºÍ Dojox Á½¸ö·ÖĿ¼¡£

½« Dojo zip ½âѹ°üÖÐÎļþ Dojox/Mobile.js ¸´ÖƵ½¹¤³Ì Dojox ·ÖĿ¼ÖС£

½« Dojo zip ½âѹ°üÖÐ Dojox/Mobile Îļþ¼Ð¼°ÆäËùÓÐÄÚÈݸ´ÖƵ½¹¤³Ì Dojox ·ÖĿ¼ÖС£

½« Dojo zip ½âѹ°üÖÐÎļþ Dojo/Dojo.js ¸´ÖƵ½¹¤³Ì Dojo ·ÖĿ¼ÖС£

Çåµ¥ 4 ½« Dojo ÒýÓÃÌí¼Óµ½ index.html ÖÐ

 <meta name="viewport" content="width=device-width,initial-scale=1, 
maximum-scale=1,minimum-scale=1, user-scalable=no">
<meta name="apple-mobie-web-app-capable" content="yes">
<link rel="stylesheet" href="libs/dojo/dojox/Mobile/themes/android/
android.css" type="text/css">
<script src="libs/dojo/1.6/dojo/dojo.xd.js"
djConfig="parseOnLoad: true"></script>
<script>
dojo.require("dojox.Mobile.parser");
dojo.require("dojox.Mobile");
dojo.requireIf(!dojo.isWebKit, "dojox.Mobile.compat");
</script>

ÖÁ´Ë£¬¿ª·¢»·¾³´î½¨ÓëÅäÖþÍÍê³ÉÁË¡£

Hello World £¡

´Ë½ÚÊÇ×÷ΪÕû¸ö¿ª·¢»·¾³´î½¨ÊÇ·ñ³É¹¦µÄÒ»¸öÑéÖ¤¡£

Çåµ¥ 5 ÑéÖ¤»·¾³´î½¨µÄ HTML Ô´Âë

 <div dojoType="dojox.Mobile.View" selected="true"> 
<h2 dojoType="dojox.Mobile.Heading" fixed="top">Hello, World!</h2>
<h2 dojoType="dojox.Mobile.RoundRectCategory">First Section</h2>
<div dojoType="dojox.Mobile.RoundRect">
This is my first dojo Mobile application on android platform.
</div>
<h2 dojoType="dojox.Mobile.RoundRectCategory">Second Section</h2>
<ul dojoType="dojox.Mobile.RoundRectList">
<li dojoType="dojox.Mobile.ListItem">List Item 1</li>
<li dojoType="dojox.Mobile.ListItem">List Item 2</li>
<li dojoType="dojox.Mobile.ListItem">List Item 3</li>
</ul>
</div>

½«Çåµ¥ 5 µÄÔ´ÂëÕ³Ìùµ½ index.html ÎļþµÄ body ±êÇ©ÖУ¬²¢½«´Ë Android Ó¦Óò¿Êðµ½Ä£ÄâÆ÷ÉÏÔËÐС£Èô³öÏÖÈçͼ 11 µÄÔËÐнá¹û£¬±íÃ÷ÅäÖóɹ¦¡£Èô³öÏְׯÁ£¬ºÜ¿ÉÄܵÄÔ­ÒòÊÇ Dojo ¼ÓÔØÊ§°Ü£¬ÏêϸԭÒò¿ÉÒԲο¼ LogCat ÊÓͼÖеĴíÎóÌáʾ¡£

ͼ 11.Hello World ½ØÍ¼

BlueVM Éè¼Æ¼°ÊµÏÖ

´Ë Mobile Ó¦ÓóÌÐòÖ÷ÒªÓÃÓÚÔ¶³Ì¼à¿Ø JVM£¨Java ÐéÄâ»ú£©µÄÔËÐÐ״̬¡£»ùÓÚ Java ¼¼ÊõµÄ·þÎñÆ÷¶ËÓ¦ÓóÌÐòÊÇÔËÐÐÓÚ JVM Ö®ÉÏ¡£Ò»¸öÓ¦ÓóÌÐò¿ÉÄܰüº¬Èô¸É¸ö·þÎñÆ÷¶Ë×é¼þ£¬ÇÒÕâЩ×é¼þ¶¼ÔËÐÐÓÚ JVM ÉÏ¡£Ä¿Ç°£¬Ô¶³Ì¼à¿Ø¶à¸ö JVM ÐèÒªÇл»µ½²»Í¬»úÆ÷ÉÏ£¬ÇÒ±ØÐëÒªÓÐ PC »òÔÚÕâЩ»úÆ÷¸½½ü²ÅÄܹ»Íê³É¡£BlueVM ¿ÉÒÔ½â¾öÕâÒ»·±ËöµÄÎÊÌâ¡£Ö»ÐèÒª½« BlueVM ·þÎñÆ÷¶Ë¹ÒÔØµ½Ô¶¶Ë»úÆ÷²¢Ìṩ»úÆ÷µÄÍøÂçµØÖ·¼°¶Ë¿ÚºÅ¸ø BlueVM ¼´¿É¡£

BlueVM ÊǵäÐ굀 C/S ¼Ü¹¹£¬°Ñ Server ¶Ë¹ÒÔØµ½¶ÔÓ¦µÄ·þÎñÆ÷¶Ë×é¼þÉϼ´¿ÉÔÚÊÖ»úµÈÒÆ¶¯É豸ÉÏ¼à¿Ø·þÎñÆ÷¶Ë JVM µÄÔËÐÐ״̬¡£Í¨¹ý·ÖÎö JVM µÄÔËÐÐ״̬½ø¶øÍƲâ³ö·þÎñÆ÷¶Ë×é¼þµÄÔËÐÐ×´¿ö¡£BlueVM ¼Ü¹¹Í¼Èçͼ 12£¬×ó±ßÊÇ Client ¶Ë½«ÔËÐÐÓÚÊÖ»úµÈÒÆ¶¯É豸ÉÏ¡£ÓÒ¶ËÏÔʾÓÐ 3 ¸öÓ¦ÓóÌÐò·þÎñÆ÷×é¼þ£¬Õâ 3 ¸öÓ¦ÓóÌÐò·þÎñÆ÷×é¼þ¶¼ÔËÐÐÓÚ JVM Ö®ÉÏ¡£ÔÚ JVM Ö®ÉÏ»ÒÉ«²¿·Ö±íʾ·þÎñÆ÷×é¼þ£¬×ó±ßÀ¶É«²¿·ÖÊǹÒÔØÔÚ´Ë·þÎñÆ÷¶Ë×é¼þÉ쵀 BlueVM µÄ Server ¶Ë¡£

ͼ 12. BlueVM ¼Ü¹¹Í¼

BlueVM Server ¶ËÉè¼ÆÓëʵÏÖ

Àà ManagementFactory ÖÐʵÏÖÁËÈô¸É¿ÉÒÔΪ Java ƽ̨»ñÈ¡ MXBean µÄ¾²Ì¬·½·¨¡£ÕâЩ MXBean ´ú±íÁË JVM ÔËÐÐ״̬µÄ¹ÜÀí½Ó¿Ú¡£ÕâЩ½Ó¿Ú¿ÉÒÔÌṩ JVM Àà×°ÔØ¡¢±àÒë¡¢À¬»ø»ØÊÕ¡¢ÄÚ´æ·ÖÅä¡¢²Ù×÷ϵͳ¡¢ÔËÐÐÆ½Ì¨¼°Ï̵߳ÈÔËÐÐʱÐÅÏ¢¡£ÆäÖеÄÿһÖÖÔËÐÐʱµÄ״̬ÐÅÏ¢¶¼ÓÐΨһµÄ MXBean ÓëÖ®¶ÔÓ¦£¬ÕýÊÇÕâЩ MXBean ÌṩÁË JVM µÄ¸÷ÖÖÔËÐÐʱÐÅÏ¢¡£

´Ë Mobile Ó¦ÓóÌÐò»áչʾ¸øÓû§ÐÅÏ¢ÁÐ±í£¬Óû§¿ÉÒÔ¸ù¾Ý×Ô¼ºµÄÐèÒªÀ´Ñ¡ÔñÐÅÏ¢µÄÀàÐÍ¡£Òò´Ë£¬Server ¶ËÉè¼ÆÁËÈô¸É¸öÀàÀ´ÏìÓ¦²»Í¬ÀàÐ͵ÄÇëÇó¡£È»¶ø£¬ÓÉÓÚÕâЩÀà¶¼ÒªÏìÓ¦Óû§µÄÇëÇó£¬Éè¼ÆÏàͬµÄ½Ó¿Ú¸ü·ûºÏ Java ÍÆ¼öµÄÉè¼ÆÄ£Ê½¡£Òò´Ë£¬Server ¶ËÉè¼ÆÁËÒ»¸ö¹«¹²µÄ½Ó¿ÚºÍ¼Ì³ÐÓڴ˽ӿڵÄÎå¸öʵÌåÀàÀ´·Ö±ðչʾÎåÖÖ²»Í¬ÀàÐ͵ÄÐÅÏ¢¡£BaseAction Êǹ«¹²½Ó¿Ú£¬ÉùÃ÷ÁË handleRequest ·½·¨¡£Àà ClassLoaderAction, GCAction, MemoryAction, ThreadAction ¼° VMAction ¶¼ÊµÏÖÓÚ BaseAction ÉùÃ÷µÄ handleRequest ·½·¨¡£

ÒÔ MemoryAction ΪÀý½²½â¾ßÌåʵÏÖ£¬Çåµ¥ 6 ÊÇ MemoryAction µÄ Java Ô´Âë¡£¿ÉÒÔ¿´µ½£¬MemoryAction ʵÏÖÁË BaseAction ½Ó¿ÚÉùÃ÷µÄ handleRequest ·½·¨¡£µ÷Óà ManagementFactory ÀàµÄ getMemoryMXBean ·½·¨µÃµ½ MemoryMXBean ¶ÔÏ󣬻ñÈ¡ÆäÖжѼ°·Ç¶ÑµÄÄÚ´æ·ÖÅäÐÅÏ¢¡£½«ÕâЩÐÅÏ¢×é×°µ½ Json ¶ÔÏóÖзµ»Ø¡£Í¼ 13 ÖÐÏÔʾµÄÊÇ JVM ijʱ¿ÌµÄÄÚ´æ·ÖÅäÐÅÏ¢¡£

Çåµ¥ 6 Àà MemoryAction ʵÏÖ

public class MemoryAction implements BaseAction { 
@Override
public Json handleRequest(Properties params) {
MemoryMXBean bean = ManagementFactory.getMemoryMXBean();
MemoryUsage heapUsage = bean.getHeapMemoryUsage();
MemoryUsage nonHeapUsage = bean.getNonHeapMemoryUsage();

/**
* {'heap':{'init':#,'committed':#,'used':#,'max':#},'non-heap':{}}
*/
Json heapJson = new Json();
heapJson.add("init", heapUsage.getInit());
heapJson.add("committed", heapUsage.getCommitted());
heapJson.add("used", heapUsage.getUsed());
heapJson.add("max", heapUsage.getMax());

Json nonHeapJson = new Json();
nonHeapJson.add("init", nonHeapUsage.getInit());
nonHeapJson.add("committed", nonHeapUsage.getCommitted());
nonHeapJson.add("used", nonHeapUsage.getUsed());
nonHeapJson.add("max", nonHeapUsage.getMax());

Json json = new Json();
json.add("heap", heapJson);
json.add("non-heap", nonHeapJson);

return json;
}
}

ͼ 13. JVM µÄÄÚ´æ·ÖÅä

BlueVM Client ¶ËÉè¼ÆÓëʵÏÖ

ͼ 14. Client ¶Ë UI Éè¼Æ

ͼ 13 ¼° 14 ÊÇ Client ¶ËµÄ UI Éè¼Æ¡£Í¼ 14 ÖÐ×ó±ßµÄ½ØÍ¼ÊÇ´Ë Mobile Ó¦ÓóÌÐòµÄµÚÒ»¸öÒ³Ãæ¡£ÓÉͼ¿ÉÖª£¬ÓÐÁ½ÖÖ·½Ê½²é¿´Ô¶¶Ë»úÆ÷ÉÏ JVM µÄÔËÐÐʱÐÅÏ¢¡£¼È¿ÉÒÔͨ¹ýÊÖ¶¯ÅäÖûúÆ÷ÍøÂçµØÖ·¼°¶Ë¿ÚºÅÒ²¿ÉÒÔÔ¤ÅäÖó£ÓûúÆ÷µØÖ·ºÍ¶Ë¿ÚÐÅÏ¢À´²é¿´Ïà¹ØÐÅÏ¢¡£Í¼ 14 ÓұߵĽØÍ¼ÊÇ´ËÓ¦ÓóÌÐòµÄµÚ¶þ¸öÊÓͼ¡£ÓÉͼ¿ÉÒÔ¿´³ö BlueVM Server ¶Ë¹²ÌṩÁËÎåÖÖÀàÐ͵ÄÐÅÏ¢¡£µã»÷ VM Info ¼´ÎªÍ¼ 13£¬BlueVM µÄµÚÈý¸öÒ³Ãæ£¬Õ¹Ê¾ JVM µÄÄÚ´æ·ÖÅä×´¿ö¡£µÚ¶þ¼°µÚÈý¸öÊÓͼµÄ±êÌâÉϼæÓÐÒ»¸ö Back °´Å¥£¬µã»÷¿ÉÒÔ·µ»ØÉÏÒ»¼¶Ò³Ãæ¡£

ÉÏÊöµÄÈý¸öÒ³ÃæÊÇÓÉ Dojo Mobile µÄ Widget ¼° JavaScript ½Å±¾ÊµÏÖ¡£Dojo Mobile ΪӦÓóÌÐòÌṩÁ˷dz£·á¸»µÄ×é¼þ (Widget) ÒÔ¼ò»¯Ò³ÃæµÄ¿ª·¢¹¤×÷¡£Ã¿Ò»¸öÒ³Ãæ¶ÔÓ¦ÓÚ Dojo Mobile µÄÒ»¸ö View ×é¼þ¡£ÔÚ View ×é¼þÖдæ·Å¸÷ÖÖÄܹ»ÈÝÄÉÒ³Ãæ¾ßÌåÄÚÈݵÄ×é¼þ£¬Èç Heading£¨±êÌ⣩¡¢RoundRect£¨·½¿ò£©¼° EndToEndList£¨ÁÐ±í£©µÈ×é¼þ¡£Çåµ¥ 7 ÊÇͼ 14 ÓÒͼ UI Ô´Âë¡£

Çåµ¥ 7.ͼ 14 ÓÒͼ UI Ô´Âë

<div dojoType="dojox.Mobile.View" id="propertyList"> 
<h1 dojoType="dojox.Mobile.Heading" back="Back" moveTo="query">JVM Status</h1>
<ul dojoType="dojox.Mobile.EdgeToEdgeList">
<li dojoType="dojox.Mobile.ListItem" moveTo="vmInfo" transition="slide"
onclick="flags.vm=true;viewVMInfo();">VM Info</li>
<li dojoType="dojox.Mobile.ListItem" moveTo="mmInfo" transition="slide"
onclick="flags.mm=true;viewMMInfo();">Memory Info</li>
<li dojoType="dojox.Mobile.ListItem" moveTo="thInfo" transition="slide"
onclick="flags.th=true;viewTHInfo();">Thread Info</li>
<li dojoType="dojox.Mobile.ListItem" moveTo="clInfo" transition="slide"
nclick="flags.cl=true;viewCLInfo();">Class Loader Info</li>
<li dojoType="dojox.Mobile.ListItem" moveTo="gcInfo" transition="slide"
onclick="flags.gc=true;viewGCInfo();">Garbage Collection Info</li>
</ul>
</div>

Server Óë Client ͨÐÅ

ÓÉÓÚ BuleVM µÄ Client ÊÇÒ»¸ö½« Web ¼¼Êõ·âװΪ±¾µØÓ¦ÓõijÌÐò£¬Òò´Ë Client ¶Ë¿ÉÒÔͨ¹ý·¢ËÍ HTTP ÇëÇóÀ´»ñÈ¡ Server ¶ËµÄÏìÓ¦¡£Server ¶ËʹÓà ServerSocket ʵÏÖÁËÔÚij¸ö¶Ë¿ÚÉϵļàÌý£¬²¢µÈ´ý Client µÄÇëÇó¡£µ± Server ¶Ë¼àÌýµ½ÓÐ HTTP ÇëÇóµ½À´µÄʱºò£¬»á½«´ËÇëÇó½âÎö²¢µ÷ÓöÔÓ¦µÄ Action µÄ handleRequest ·½·¨À´ÏìÓ¦¡£Client ¶Ë»ñÈ¡µ½ Server ¶ËµÄÏìÓ¦ÄÚÈÝÖ®ºó½âÎö²¢ÏÔʾÔÚÒ³ÃæÖС£Òò´Ë£¬µ±µã»÷µÚ¶þ¸öÒ³ÃæÉ쵀 Memory Info »á´¥·¢ Client ¶ËµÄÒ»¸ö Ajax ÇëÇó¡£´ËÇëÇóµ½´ï Server ¶Ëʱ£¬Server ¶Ëµ÷Óà MemoryAction µÄ handleRequest ·½·¨²úÉú JSON ¶ÔÏ󷵻ظø Client ¶Ë£¬µ± Client ¶ËÊÕµ½´Ë JSON ¶ÔÏóºó£¬½âÎöÆäÖеÄÐÅÏ¢²¢ÏÔʾÔÚµÚÈý¸öÒ³ÃæÉÏ¡£

Çåµ¥ 8 »ñÈ¡ Memory ÐÅÏ¢µÄ Ajax ÇëÇó

function viewMMInfo() { 
var surl = getUrl() + '?action=memoryinfo.do';
//ajax call
callHttp(surl,function(req) {
var data = eval("(" + req.responseText + ")");
var heapData = data['heap'];
var nonHeapData = data['non-heap'];
$('hInit').innerHTML = (heapData['init']/1024/1024).toFixed(2)+'MB';
$('hCommit').innerHTML = (heapData['committed']/1024/1024).toFixed(2)+'MB';
$('hUsed').innerHTML = (heapData['used']/1024/1024).toFixed(2)+'MB';
$('hMax').innerHTML = (heapData['max']/1024/1024).toFixed(2)+'MB';
$('nhInit').innerHTML = (nonHeapData['init']/1024/1024).toFixed(2)+'MB';
$('nhCommit').innerHTML=(nonHeapData['committed']/1024/1024).toFixed(2)+'MB';
$('nhUsed').innerHTML = (nonHeapData['used']/1024/1024).toFixed(2)+'MB';
$('nhMax').innerHTML = (nonHeapData['max']/1024/1024).toFixed(2)+'MB';
});
// loop to refresh info
if(flags.mm){
window.setTimeout("viewMMInfo()",2000);
}
}

µ÷ÊÔ

Mobile Ó¦ÓóÌÐòÓÐÓë Web Ó¦ÓóÌÐòÏàËÆµÄ¼¼Êõ¡£Óë´Ëͬʱ£¬ÓÖÓкܶ಻ͬÓÚ Web Ó¦ÓóÌÐòµÄ·½·¨¼°¼¼Êõ¡£ÈôÄܼ°Ê±·¢ÏÖÓëÕÆÎÕÏà¹ØµÄ¿ª·¢¼¼Çɱض¨Äܹ»Ê°빦±¶£¬µ÷ÊÔ±ãÊÇÆäÖлù±¾¼¼ÇÉÖ®Ò»¡£

DDMS ǰ¾°Í¼ÊÇ ADT ²å¼þ´øÀ´µÄ£¬ÊÇ Android Ó¦ÓÃÕß¿ª·¢±Ø±¸µÄ¹¤¾ß¡£LogCat ÊÇ´Ëǰ¾°Í¼µÄÒ»¸öÊÓͼ£¬»áÊä³ö³ÌÐòÖи÷Ààµ÷ÊÔ¼°´íÎóÐÅÏ¢¡£Òò´Ë£¬ÔÚ¿ª·¢¹ý³ÌÖгýÁËÐèÒª¹Ø×¢¿ØÖÆÌ¨µÄÌáʾÐÅÏ¢Í⣬LogCat Ò²ÄÜÌṩÓÐÓõĵ÷ÊÔÐÅÏ¢¡£ÁíÍ⣬ÔÚ³ÌÐòÖпÉÒÔǶÈëÌØ¶¨µÄµ÷ÊÔÓï¾ä£¬ÔËÐÐʱÕâЩÓï¾ä»á²úÉúÏàÓ¦µÄÐÅÏ¢Êä³öµ½ LogCat Öй©¿ª·¢ÕßʹÓá£

ͼ 15. LogCat ÊÓͼ

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

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ

ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ