±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚcnblogs£¬ÎÄÕÂÖ÷Òª·ÖΪWeb
Á÷£¬´úÂëת»»Á÷£¬±àÒëÁ÷£¬ÐéÄâ»úÁ÷4 ´óÁ÷ÅɽéÉÜÁË¿çÆ½Ì¨¿ª·¢¼¼ÊõµÄ¼¸ÖÖ½â¾ö·½°¸¡£ |
|
½éÉÜ
×î½ü³öÏÖµÄ React Native ÔÙ´ÎÈÃ¿çÆ½Ì¨ÒÆ¶¯¶Ë¿ª·¢Õâ¸ö»°Ìâ»ðÆðÀ´ÁË£¬Ôø¾´ó¼ÒÒÔΪÔÚÊÖ»úÉÏ¿ÉÒÔÏñ×ÀÃæÄÇÑùͨ¹ý
Web ¼¼ÊõÀ´ÊµÏÖ¿çÆ½Ì¨¿ª·¢£¬È´´ó¶àÒòΪÐÔÄÜ»ò¹¦ÄÜÎÊÌâ¶ø·ÅÆú£¬²»µÃ²»Õë¶Ô²»Í¬Æ½Ì¨¿ª·¢¶à¸ö°æ±¾¡£
µ«ÕⲢûÓÐ×èÖ¹ÈËÃÇ¶Ô¿çÆ½Ì¨¿ª·¢¼¼ÊõµÄ̽Ë÷£¬±Ï¾¹Ë²»Ïë½µµÍ¿ª·¢³É±¾£¬Ò»´Î±àд¾Í´¦´¦ÔËÐÐÄØ£¿³ýÁË React
Native£¬Õ⼸Ä껹³öÏÖ¹ýÐí¶àÆäËü½â¾ö·½°¸£¬±¾ÎÄÎÒ½«»á¶ÔÕâЩ·½°¸½øÐм¼Êõ·ÖÎö£¬¹©¸ÐÐËȤµÄ¶ÁÕ߲ο¼¡£
ΪÁË·½±ãÌÖÂÛ£¬ÎÒ½«ËüÃÇ·ÖΪÁËÒÔÏ 4 ´óÁ÷ÅÉ£º
Web Á÷£ºÒ²±»³ÆÎª Hybrid ¼¼Êõ£¬Ëü»ùÓÚ Web Ïà¹Ø¼¼ÊõÀ´ÊµÏÖ½çÃæ¼°¹¦ÄÜ
´úÂëת»»Á÷£º½«Ä³¸öÓïÑÔת³É Objective-C¡¢Java »ò C#£¬È»ºóʹÓò»Í¬Æ½Ì¨ÏµĹٷ½¹¤¾ßÀ´¿ª·¢
±àÒëÁ÷£º½«Ä³¸öÓïÑÔ±àÒëΪ¶þ½øÖÆÎļþ£¬Éú³É¶¯Ì¬¿â»ò´ò°ü³É apk/ipa/xap Îļþ
ÐéÄâ»úÁ÷£ºÍ¨¹ý½«Ä³¸öÓïÑÔµÄÐéÄâ»úÒÆÖ²µ½²»Í¬Æ½Ì¨ÉÏÀ´ÔËÐÐ
Web Á÷
Web Á÷ÊÇ´ó¼Ò¶¼±È½ÏÁ˽âµÄÁË£¬±ÈÈçÖøÃûµÄ PhoneGap/Cordova£¬Ëü½«ÔÉúµÄ½Ó¿Ú·â×°ºó±©Â¶¸ø
JavaScript£¬¿ÉÒÔÔËÐÐÔÚϵͳ×Ô´øµÄ WebView ÖУ¬Ò²¿ÉÒÔ×Ô¼ºÄÚǶһ¸ö Chrome ÄÚºË
¡£
×÷ΪÕ⼸ÄêÕùÂÛµÄÈÈµã£¬ÍøÉÏÒѾÓÐºÜ¶à¹ØÓÚËüµÄÌÖÂÛÁË£¬ÕâÀïÎÒÖØµãÁÄÁÄ´ó¼Ò×î¹ØÐĵÄÐÔÄÜÎÊÌâ¡£
Web Á÷×î³£±»Í²۵ľÍÊÇÐÔÄÜÂý£¨ÕâÀïÖ¸ÄÚǶ HTML µÄÐÔÄÜ£¬²»¿¼ÂÇÍøÂç¼ÓÔØÊ±¼ä£©£¬¿ÉΪʲôÂýÄØ£¿³£¼ûµÄ¿´·¨ÊÇÈÏΪ¡¸DOM
ºÜÂý¡¹£¬È»¶ø´Óä¯ÀÀÆ÷ʵÏֽǶÈÀ´¿´£¬Æäʵ DOM ¾ÍÊǽ«¶ÔÎĵµ²Ù×÷µÄ API ±©Â¶¸øÁË JavaScript£¬¶ø
JavaScript µÄµ÷ÓÃÕâЩ API ºó¾Í½øÈëÄÚ²¿µÄ C++ ʵÏÖÁË£¬ÕâÖм䲢ûÓжàÉÙÐÔÄÜÏûºÄ£¬ËùÒÔ´ÓÀíÂÛÉÏÀ´Ëµä¯ÀÀÆ÷µÄ
DOM ¿Ï¶¨±È Android µÄ¡¸DOM¡¹¿ì£¬ÒòΪ Android µÄÕ¹Ïּܹ¹´ó²¿·Ö¹¦ÄÜÊÇÓà Java
дµÄ£¬ÔÚʵÏÖÏàͬ¹¦ÄܵÄǰÌáÏ£¬C++ ²»´ó¿ÉÄÜ±È Java Âý£¨Ä³Ð©Çé¿öÏ JIT ±àÒëÓÅ»¯È·ÊµÓпÉÄÜ×öµÃ¸üºÃ£¬µ«ÄÇÖ»ÊÇÉÙÊýÇé¿ö£©¡£
ËùÒÔ´Ó×ÖÃæÒâ˼ÉÏ¿´¡¸DOM ºÜÂý¡¹µÄ˵·¨ÊÇ´íÎóµÄ£¬Õâ¸ö¿´·¨Ö®ËùÒÔºÜÆÕ±é£¬¿ÉÄÜÊÇÒòΪ´ó²¿·ÖÈ˶Ôä¯ÀÀÆ÷ʵÏÖ²»Á˽⣬ֻ֪µÀä¯ÀÀÆ÷ÓÐ
DOM£¬ËùÒÔ²»¹ÜʲôÎÊÌâ¶¼Ö»Äܱ§Ô¹ËüÁË¡£
ÄÇôÎÊÌâÔÚÄÄÄØ£¿ÔÚÎÒ¿´À´ÓÐÈý·½ÃæµÄÎÊÌ⣺
ÔçÆÚä¯ÀÀÆ÷ʵÏֱȽϲûÓнøÐÐÓÅ»¯
CSS ¹ýÓÚ¸´ÔÓ£¬¼ÆËãÆðÀ´¸üºÄʱ
DOM ÌṩµÄ½Ó¿ÚÌ«ÓÐÏÞ£¬Ê¹µÃÄÑÒÔ½øÐÐÓÅ»¯
µÚÒ»¸öÎÊÌâÊÇ×î¹Ø¼üÒ²ÊÇ×îÄѽâ¾öµÄ£¬ÏÖÔÚ˵µ½ Web ÐÔÄܲîÖ÷Ҫ˵µÄÊÇ Android ϱȽϲÔÚ
iOS ÏÂÒѾºÜÁ÷³©ÁË£¬ÔÚ Android 4 ֮ǰµÄ WebView ÉõÖÁ¶¼Ã»ÓÐʵÏÖ GPU ¼ÓËÙ£¬Ã¿´ÎÖØ»æÕû¸öÒ³Ãæ£¬Óж¯»µÄʱºò²»¿¨²Å¹Ö¡£
ä¯ÀÀÆ÷ʵÏÖµÄÓÅ»¯¿ÉÒÔµÈ Android 4.4 ÂýÂýÆÕ¼°ÆðÀ´£¬ÒòΪ 4.4 ÒÔºó¾ÍʹÓà Chrome
À´äÖȾÁË¡£
¶ø¶ÔÓÚ×îеÄä¯ÀÀÆ÷À´Ëµ£¬äÖȾÂýµÄÔÒò¾ÍÖ÷ÒªÊǵڶþ¸öÎÊÌ⣺CSS ¹ýÓÚ¸´ÔÓ£¬ÒòΪ´ÓʵÏÖÔÀíÉÏ¿´ Chrome
ºÍ Android View ²¢Ã»Óб¾ÖÊÉϵIJî±ð£¬µ« CSS Ì«Áé»î¹¦ÄÜÌ«¶àÁË£¬ËùÒÔ¼ÆËã³É±¾ºÜ¸ß£¬×ÔÈ»¾Í¸üÂýÁË¡£
ÄÇÊDz»ÊÇ¿ÉÒÔͨ¹ý¼ò»¯ CSS À´½â¾ö£¿Êµ¼ÊÉÏ»¹ÕæÓÐÈËÕâô³¢ÊÔÁË£¬±ÈÈç Famo.us£¬Ëü×î´óµÄÌØÉ«¾ÍÊDz»ÈÃÄãд
CSS£¬Ö»ÄÜʹÓù̶¨µÄ¼¸ÖÖ²¼¾Ö·½·¨£¬ÍêÈ«¿¿ JavaScript À´Ð´½çÃæ£¬ËùÒÔËüÄÜÓÐЧ±ÜÃâд³öµÍЧµÄ
CSS£¬´Ó¶øÌáÉýÐÔÄÜ¡£
¶ø¶ÔÓÚ¸´ÔӵĽçÃæ¼°ÊÖ»úϳ£¼ûµÄ³¬³¤µÄ ListView À´Ëµ£¬µÚÈý¸öÎÊÌâ»á¸üÍ»³ö£¬ÒòΪ DOM ÊÇÒ»¸öºÜÉϲãµÄ
API£¬Ê¹µÃ JavaScript ÎÞ·¨×öµ½Ïñ Native ÄÇÑùϸÁ£¶ÈµÄ¿ØÖÆÄÚ´æ¼°Ị̈߳¬ËùÒÔÄÑÒÔ½øÐÐÓÅ»¯£¬ÔòÔÚÓ²¼þ½Ï²îµÄ»úÆ÷ÉÏ»á±È½ÏÃ÷ÏÔ¡£¶ÔÓÚÕâ¸öÎÊÌ⣬ÎÒÃÇÒ»ÄêÇ°Ôø¾³¢ÊÔ¹ýǶÈëÔÉú×é¼þµÄ·½Ê½À´½â¾ö£¬²»¹ýÕâ¸ö·½°¸ÐèÒªÒÀÀµÓ¦Óö˵ÄÖ§³Ö£¬»òÐíÒÔºóä¯ÀÀÆ÷»á×Ô´ø¼¸¸öÓÅ»¯ºóµÄ
Web Components ×é¼þ£¬Ê¹ÓÃÕâЩ×é¼þ¾ÍÄܺܺýâ¾öÐÔÄÜÎÊÌâ¡£
ÏÖ½×¶ÎÕâÈý¸öÎÊÌâ¶¼²»ºÃ½â¾ö£¬ËùÒÔÓÐÈËÏë¸É´à²»Óà HTML/CSS£¬×Ô¼ºÀ´»½çÃæ£¬±ÈÈç React
canvas Ö±½Ó»ÔÚ Canvas ÉÏ£¬µ«ÔÚÎÒ¿´À´ÕâÖ»ÊÇÏֽ׶νâ¾ö²¿·ÖÎÊÌâµÄ·½·¨£¬ÔÚºóÃæµÄÕ½ÚÎÒ»áÏêϸ½éÉÜ×Ô¼º»
UI µÄ¸÷ÖÖÎÊÌ⣬ÕâÀï˵¸öÀúÊ·°É£¬6 Äêǰä¯ÀÀÆ÷»¹±È½ÏÂýµÄʱºò£¬Bespin ¾ÍÕâô¸É¹ý£¬ºóÀ´Õâ¸öÏîÄ¿±»Ê¹ÓÃ
DOM µÄ ACE È¡´úÁË£¬Ä¿Ç°°üÀ¨ TextMirror ºÍ Atom ÔÚÄÚµÄÖ÷Á÷±à¼Æ÷¶¼ÊÇÖ±½ÓʹÓÃ
DOM£¬ÉõÖÁ W3C ÓÐÈËרÃÅдÁËÆªÎÄÕÂͲÛÓà Canvas ×ö±à¼Æ÷µÄÖÖÖÖȱµã£¬ËùÒÔʹÓà Canvas
Òª½÷É÷¡£
ÁíÍâ³ýÁË Canvas£¬»¹ÓÐÈËÒÔΪ WebGL ¿ì£¬¾Í³¢ÊÔ»æÖƵ½ WebGL ÉÏ£¬±ÈÈç HTML-GL£¬µ«ËüĿǰµÄʵÏÖ̫͵ÀÁÁË£¬¼òµ¥À´Ëµ¾ÍÊÇÏÈÓÃhtml2canvas
½« DOM ½ÚµãäÖȾ³ÉͼƬ£¬È»ºó½«Õâ¸öͼƬ×÷ΪÌùͼ·ÅÔÚ WebGL ÖУ¬ÕâµÈÓÚ½«ä¯ÀÀÆ÷ÖÐÓà C++
дµÄ¶«¶«ÔÚ JavaScript ÀïʵÏÖÁËÒ»±é£¬äÖȾËٶȿ϶¨·´¶ø¸üÂý£¬µ«µ¹ÊÇÄÜÓà GLSL ×öÌØÐ§À´ºöÓÆÈË¡£
Ó²¼þ¼ÓËÙ²»µÈͬÓÚ¡¸¿ì¡¹£¬Èç¹ûÄãÒÔΪӲ¼þ¼ÓËÙÒ»¶¨±ÈÈí¼þ¿ì£¬ÄÇÄã¸Ã³é¿Õѧѧ¼ÆËã»úÌåϵ½á¹¹ÁË
Æäʵ³ýÁËÐÔÄÜÎÊÌ⣬ÎÒÈÏΪÔÚ Web Á÷¸üÑÏÖØµÄÎÊÌâÊǹ¦ÄÜȱʧ£¬±ÈÈç iOS 8 ¾ÍÐÂÔö 4000+
API£¬¶ø Web ±ê×¼ÐèÒªÂþ³¤µÄ±àдºÍÆÀÉó¹ý³Ì£¬Ôö¼Ó 4000 API ÎÒÕâ±²×ÓÊǵȲ»µ½ÁË£¬¼´±ãÊÇ
Cordova ÕâÑù×Ô¼º·âװҲæ²»¹ýÀ´£¬ËùÒÔΪÁ˸üºÃµØÊ¹ÓÃϵͳй¦ÄÜ£¬Ð´ Native ´úÂëÊDZØÐëµÄ¡£
P.S. ËäÈ»Ç°ÃæÌáµ½ HTML/CSS ¹ýÓÚ¸´ÔÓµ¼ÖÂÐÔÄÜÎÊÌ⣬µ«ÆäʵÕâÕýÊÇ Web ×î´óµÄÓÅÊÆËùÔÚ£¬ÒòΪ
Web ×î³õµÄÄ¿µÄ¾ÍÊÇÏÔʾÎĵµ£¬Èç¹ûÄãÏëÏÔʾ·á¸»µÄͼÎÄÅŰ棬ËäÈ» iOS/Android ¶¼Óи»Îı¾×é¼þ£¬µ«±ÈÆð
CSS ²î̫ԶÁË£¬ËùÒÔÔںܶà Native Ó¦ÓÃÖÐÊDz»¿É±ÜÃâҪǶ Web µÄ¡£
´úÂëת»»Á÷
Ç°ÃæÌᵽд Native ´úÂëÊDZØÐëµÄ£¬µ«²»Í¬Æ½Ì¨ÏµĹٷ½ÓïÑÔ²»Ò»Ñù£¬Õâ»áµ¼ÖÂͬÑùµÄÂ߼ҪдÁ½´ÎÒÔÉÏ£¬ÓÚÊǾÍÓÐÈËÏëµ½ÁËͨ¹ý´úÂëת»»µÄ·½Ê½À´¼õÉÙ¹¤×÷Á¿£¬±ÈÈ罫
Java ת³É Objective-C¡£
ÕâÖÖ·½Ê½ËäÈ»ÌýÆðÀ´²»ÊǺܿ¿Æ×£¬µ«ËüÈ´Êdzɱ¾ºÍ·çÏÕ¶¼×îСµÄ£¬ÒòΪ´úÂëת»»ºó¾Í¿ÉÒÔÓùٷ½ÌṩµÄ¸÷ÖÖ¹¤¾ßÁË£¬ºÍÆÕͨ¿ª·¢Çø±ð²»´ó£¬Òò´Ë²»Óõ£ÐÄÓöµ½¸÷ÖÖ¹îÒìµÄÎÊÌ⣬²»¹ýÐèҪעÒâÉú³ÉµÄ´úÂëÊÇ·ñ¿É¶Á£¬²»¿É¶ÁµÄ·½°¸¾Í±ð¿¼ÂÇÁË¡£
½ÓÏÂÀ´¿´¿´Ä¿Ç°´æÔڵļ¸ÖÖ´úÂëת»»·½Ê½¡£
½« Java ת³É Objective-C
j2objc Äܽ« Java ´úÂëת³É Objective-C£¬¾Ý˵ Google ÄÚ²¿¾ÍÊÇʹÓÃËüÀ´½µµÍ¿çƽ̨¿ª·¢³É±¾µÄ£¬±ÈÈç
Google Inbox ÏîÄ¿¾ÍºÅ³ÆÍ¨¹ýËü¹²ÓÃÁË 70% µÄ´úÂ룬Ч¹ûºÜÏÔÖø¡£
¿ÉÄÜÓÐÈË»á¾õµÃÆæ¹Ö£¬ÎªºÎ Google ҪרÃÅ¿ª·¢Ò»¸ö°ïÖú´ó¼Òд Objective-C µÄ¹¤¾ß£¿»¹ÓÐýÌå˵
Google ×öÁ˼þºÃÊ£¬Æäʵ°É£¬ÎÒ¾õµÃ Google ÕâËãÅÌ´òµÃ²»´í£¬ÒòΪ»ù±¾ÉÏÖØÒªµÄÓ¦Óö¼»áͬʱ¿ª·¢
Android ºÍ iOS °æ±¾£¬ÓÐÁËÕâ¸ö¹¤¾ß¾ÍÒâζ×Å£¬Äã¿ÉÒÔÏÈ¿ª·¢ Android °æ±¾£¬È»ºóÔÙ¿ª·¢
iOS °æ±¾¡£¡£¡£
¼ÈÈ»¶¼Óгɹ¦°¸ÀýÁË£¬Õâ¸ö·½°¸È·ÊµÖµµÃ³¢ÊÔ£¬¶øÇҹؼüÊÇ»á Java µÄÈ˶డ£¬¿ÉÒÔͨ¹ýËüÀ´¿ìËÙÒÆÖ²´úÂëµ½
Objective-C ÖС£
½« Objective-C ת³É Java
³ýÁËÓÐ Java ת³É Objective-C£¬»¹ÓÐ Objective-C ת³É Java µÄ·½°¸£¬ÄǾÍÊÇ
MyAppConverter£¬±ÈÆðÇ°ÃæµÄ j2objc£¬Õâ¸ö¹¤¾ß¸üÓÐÒ°ÐÄ£¬Ëü»¹´òË㽫 UI ²¿·ÖÒ²°üº¬½øÀ´£¬´ÓËüÒÑת»»µÄÁбíÖпÉÒÔ¿´µ½»¹ÓÐ
UIKit¡¢CoreGraphics µÈ×é¼þ£¬Ê¹µÃÓÐЩӦÓÿÉÒÔ²»¸Ä´úÂë¾ÍÄÜת³É¹¦£¬²»¹ýÕâµãÎÒ²¢²»¿´ºÃ£¬¶ÔÓڴ󲿷ÖÓ¦ÓÃÀ´Ëµ²¢²»ÏÖʵ¡£
ÓÉÓÚĿǰÊÇÊÕ·ÑÏîÄ¿£¬ÎÒûÓг¢ÊÔ¹ý£¬¶Ô¼¼Êõϸ½ÚÒ²²»Á˽⣬ËùÒÔÕâÀï²»×öÆÀ¼Û¡£
½« Java ת³É C#
Mono ÌṩÁËÒ»¸ö½« Java ´úÂëת³É C# µÄ¹¤¾ß Sharpen£¬²»¹ýËÆºõÓõÄÈ˲»¶à£¬Star
²Å 118£¬ËùÒÔ¿´ÆðÀ´²»¿¿Æ×¡£
»¹ÓÐ JUniversal Õâ¸ö¹¤¾ß¿ÉÒÔ½« Java ת³É C#£¬µ«Ä¿Ç°Ëü²¢Ã»Óз¢²¼¹«¿ª°æ±¾£¬ËùÒÔ¾ßÌåÇé¿ö»¹´ýÁ˽⣬ËüµÄÒ»¸öÌØÉ«ÊÇ×Ô´øÁ˼òµ¥µÄ¿çƽ̨¿â£¬ÀïÃæ°üÀ¨Îļþ´¦Àí¡¢JSON¡¢HTTP¡¢OAuth
×é¼þ£¬¿ÉÒÔ»ùÓÚËüÀ´¿ª·¢¿É¸´ÓõÄÒµÎñÂß¼¡£
±ÈÆðת³É Objective-C ºÍ Java µÄ¹¤¾ß£¬×ª³É C# µÄÕâÁ½¸ö¹¤¾ß¿´ÆðÀ´¶¼·Ç³£²»³ÉÊ죬¹À¼ÆÊÇÓÃ
Windows Phone µÄÈËÉÙ¡£
½« Haxe ת³ÉÆäËüÓïÑÔ
˵µ½Ô´Âëת»»¾Í²»µÃ²»Ìá Haxe Õâ¸öÆæÌØµÄÓïÑÔ£¬ËüûÓÐ×Ô¼ºµÄÐéÄâ»ú»ò¿ÉÖ´ÐÐÎļþ±àÒëÆ÷£¬ËùÒÔÖ»ÄÜͨ¹ýת³ÉÆäËüÓïÑÔÀ´ÔËÐУ¬Ä¿Ç°Ö§³Öת³É
Neko£¨×Ö½ÚÂ룩¡¢Javascript¡¢Actionscript 3¡¢PHP¡¢C++¡¢Java¡¢C#
ºÍ Python£¬¾¡¹ÜÓÐÈËʵÏÖÁËת³É Swift µÄÖ§³Ö£¬µ«»¹ÊǷǹٷ½µÄ£¬ËùÒÔÒªÏëÖ§³Ö iOS ¿ª·¢Ä¿Ç°Ö»ÄÜͨ¹ý
Adobe AIR À´ÔËÐС£
ÔÚÓÎÏ·¿ª·¢·½Ãæ×öµÃ²»´í£¬Óиö¿çƽ̨µÄÓÎÏ·ÒýÇæ OpenFL µÄ£¬×îÖÕ¿ÉÒÔʹÓà HTML5 Canvas¡¢OpenGL
»ò Flash À´½øÐлæÖÆ£¬OpenFL µÄ¿ª·¢ÌåÑé×öµÃÏ൱²»´í£¬Í¬Ò»ÐдúÂë²»ÐèÒªÐ޸ľÍÄܱàÒë³ö²»Í¬Æ½Ì¨ÏµĿÉÖ´ÐÐÎļþ£¬ÒòΪÊÇͨ¹ýת³É
C++ ·½Ê½½øÐбàÒëµÄ£¬ËùÒÔÔÚÐÔÄܺͷ´±àÒë·½Ãæ¶¼ÓÐÓÅÊÆ£¬¿ÉÏ§Ä¿Ç°ËÆºõ²¢²»¹»Îȶ¨£¬²»È»¿ÉÒÔ³ÉΪ Cocos2d-x
µÄÓÐÀû¾ºÆ·¡£
ÔÚ OpenFL »ù´¡ÉÏ»¹Óиö¿çƽ̨µÄ UI ×é¼þ HaxeUI£¬µ«½çÃæ·ç¸ñÎÒ¾õµÃÌØ±ð³ó£¬Ò²¾ÍÖ»ÄÜÔÚÓÎÏ·ÖÐÓÃÁË¡£
ËùÒÔĿǰÀ´¿´ Haxe ×ö¿çƽ̨ÓÎÏ·¿ª·¢»òÐí¿ÉÐУ¬µ« APP ¿ª·¢¾Í±ðÖ¸ÍûÁË£¬¶ø»ùÓÚËüÀ´¹²ÓôúÂëʵÔھ͸ü²»¿¿Æ×ÁË£¬ÒòΪÊìϤËüµÄ¿ª·¢Õß¼«ÉÙ£¬·´¶øÔö¼Ó³É±¾¡£
XMLVM
³ýÁËÇ°ÃæÌáµ½µÄÔ´Âëµ½Ô´ÂëµÄת»»£¬»¹ÓÐ XMLVM ÕâÖÖÓëÖÚ²»Í¬µÄ·½Ê½£¬ËüÊ×ÏȽ«×Ö½ÚÂëת³ÉÒ»ÖÖ»ùÓÚ XML
µÄÖмä¸ñʽ£¬È»ºóÔÙͨ¹ý XSL À´Éú³É²»Í¬ÓïÑÔ£¬Ä¿Ç°Ö§³ÖÉú³É C¡¢Objective-C¡¢JavaScript¡¢C#¡¢Python
ºÍ Java¡£
ËäÈ»»ùÓÚÒ»¸öÖмä×Ö½ÚÂë¿ÉÒÔ·½±ãÖ§³Ö¶àÓïÑÔ£¬È»¶øËüÒ²µ¼ÖÂÉú³É´úÂë²»¿É¶Á£¬ÒòΪºÜ¶àÓïÑÔÖеÄÓï·¨ÌÇ»áÔÚ×Ö½ÚÂëÖб»Ä¨µô£¬ÕâÊDz»¿ÉÄæµÄ£¬ÒÔÏÂÊÇÒ»¸ö¼òµ¥Ê¾ÀýÉú³ÉµÄ
Objective-C ´úÂ룬¿´ÆðÀ´¾ÍÏñ»ã±à£º
XMLVM_ENTER_METHOD("org.xmlvm. tutorial.ios.helloworld.portrait.HelloWorld",
"didFinishLaunchingWithOptions", "?")
XMLVMElem _r0;
XMLVMElem _r1;
XMLVMElem _r2;
XMLVMElem _r3;
XMLVMElem _r4;
XMLVMElem _r5;
XMLVMElem _r6;
XMLVMElem _r7;
_r5.o = me;
_r6.o = n1;
_r7.o = n2;
_r4.i = 0;
_r0.o = org_xmlvm_iphone_UIScreen_mainScreen__();
XMLVM_CHECK_NPE(0)
_r0.o = org_xmlvm_iphone_UIScreen_getApplicationFrame__ (_r0.o);
_r1.o = __NEW_org_xmlvm_iphone_UIWindow();
XMLVM_CHECK_NPE(1)
... |
ÔÚÎÒ¿´À´Õâ¸ö·½°¸Ï൱²»¿¿Æ×£¬ÍòÒ»Éú³ÉµÄ´úÂëÓÐÎÊÌâ»ù±¾Ã»·¨Ð޸ģ¬Ò²Ã»·¨µ÷ÊÔ´úÂ룬ËùÒÔ²»ÍƼö¡£
С½á
ËäÈ»´úÂëת»»ÕâÖÖ·½Ê½·çÏÕС£¬µ«ÎÒ¾õµÃ¶ÔÓںܶàС APP À´Ëµ¹²Ïí²»Á˶àÉÙ´úÂ룬ÒòΪÕâÀàÓ¦Óôó¶àÊýÎ§ÈÆ
UI À´¿ª·¢µÄ£¬´ó²¿·Ö´úÂë¶¼ºÍ UI ñîºÏ£¬ËùÒÔ¹«¹²²¿·Ö²»¶à¡£
ÔÚĿǰµÄËùÓоßÌå·½°¸ÖУ¬Ö»ÓÐ j2objc ¿ÉÒÔ³¢ÊÔ£¬ÆäËü¶¼²»³ÉÊì¡£
±àÒëÁ÷
±àÒëÁ÷±ÈÇ°ÃæµÄ´úÂëת»»¸ü½øÒ»²½£¬ËüÖ±½Ó½«Ä³¸öÓïÑÔ±àÒëΪÆÕͨƽ̨ϵĶþ½øÖÆÎļþ£¬ÕâÖÖ×ö·¨ÓÐÃ÷ÏÔµÄÓÅȱµã£º
Óŵã
¿ÉÒÔÖØÓÃһЩʵÏֺܸ´ÔӵĴúÂ룬±ÈÈç֮ǰÓà C++ ʵÏÖµÄÓÎÏ·ÒýÇæ£¬ÖØÐ´Ò»±é³É±¾Ì«¸ß
±àÒëºóµÄ´úÂë·´±àÒëÀ§ÄÑ
»òÐíÐÔÄÜ»áºÃЩ£¨¾ßÌåÒª¿´ÊµÏÖ£©
ȱµã
Èç¹ûÕâ¸ö¹¤¾ß±¾ÉíÓÐ Bug »òÐÔÄÜÎÊÌ⣬¶¨Î»ºÍÐ޸ijɱ¾»áºÜ¸ß
±àÒëºóÌå»ý²»Ð¡£¬ÓÈÆäÊÇÈç¹ûÒªÖ§³Ö ARMv8 ºÍ x86 µÄ»°
½ÓÏÂÀ´ÎÒÃÇͨ¹ýÇø·Ö²»Í¬ÓïÑÔÀ´½éÉÜÕâ¸öÁ÷ÅÉϵĸ÷ÖÖ·½°¸¡£
C++ Àà
C++ ÊÇ×î³£¼ûµÄÑ¡Ôñ£¬ÒòΪĿǰ Android¡¢iOS ºÍ Windows Phone ¶¼ÌṩÁË
C++ ¿ª·¢µÄÖ§³Ö£¬Ëüͨ³£ÓÐÈýÖÖ×ö·¨£º
Ö»Óà C++ ʵÏַǽçÃæ²¿·Ö£¬ÕâÊǹٷ½±È½ÏÍÆ³çµÄ·½°¸£¬Ä¿Ç°ÓкܶàÓ¦ÓÃÊÇÕâô×öµÄ£¬±ÈÈç Mailbox
ºÍ Microsoft Office¡£
ʹÓà 2D ͼÐοâÀ´×Ô¼º»æÖƽçÃæ£¬ÕâÖÖ×ö·¨ÔÚ×ÀÃæ±È½Ï³£¼û£¬ÒòΪºÜ¶à½çÃæ¶¼ÓиöÐÔ»¯ÐèÇ󣬵«ÔÚÒÆ¶¯¶ËÓõû¹²»¶à¡£
ʹÓà OpenGL À´»æÖƽçÃæ£¬³£¼ûÓÚÓÎÏ·ÖС£
ʹÓà C++ ʵÏַǽçÃæ²¿·Ö±È½Ï³£¼û£¬ËùÒÔÕâÀï¾Í²»Öظ´½éÉÜÁË£¬³ýÁËÄÜÌáÉýÐÔÄܺ͹²ÓôúÂ룬»¹ÓÐÈËʹÓÃÕâÖÖ·½Ê½À´Òþ²ØÒ»Ð©¹Ø¼ü´úÂ루±ÈÈçÃÜÔ¿£©£¬Èç¹ûÄã²»ÖªµÀÈçºÎ¹¹½¨ÕâÑùµÄ¿çƽ̨ÏîÄ¿£¬¿ÉÒԲο¼
Dropbox ¿ªÔ´µÄ libmx3 ÏîÄ¿£¬Ëü»¹ÄÚǶÁË json ºÍ sqlite ¿â£¬²¢Í¨¹ýµ÷ÓÃϵͳ¿âÀ´ÊµÏÖ¶Ô¼òµ¥
HTTP¡¢EventLoop ¼°´´½¨Ï̵߳ÄÖ§³Ö¡£
¶øÈç¹ûÒªÓà C++ ʵÏÖ½çÃæ²¿·Ö£¬ÔÚ iOS ºÍ Windows Phone Ï¿ÉÒÔ·Ö±ðʹÓà C++
µÄ³¬¼¯ Objective-C++ ºÍ C++/CX£¬ËùÒÔ»¹±È½ÏÈÝÒ×£¬µ«ÔÚ Android ÏÂÎÊÌâ¾Í±È½ÏÂé·³ÁË£¬Ö÷ÒªÔÒòÊÇ
Android µÄ½çÃæ¾ø´ó²¿·ÖÊÇ Java ʵÏֵģ¬ËùÒÔÓà C++ ¿ª·¢½çÃæ×î´óµÄÌôÕ½ÊÇÈçºÎÖ§³Ö Android£¬ÕâÓÐÁ½ÖÖ×ö·¨£ºÍ¨¹ý
JNI µ÷ÓÃϵͳÌṩµÄ Java ·½·¨»òÕß×Ô¼º» UI¡£
µÚÒ»ÖÖ×ö·¨ËäÈ»¿ÉÐУ¬µ«´úÂëÌ«ÈßÓàÁ˱ÈÈçÒ»¸ö¼òµ¥µÄº¯Êýµ÷ÓÃÐèҪдÄÇô¶à´úÂ룺
JNIEnv* env;
jclass testClass = (*env)->FindClass(env, "com/your/package/name/Test");
// get Class
jmethodID constructor = (*env)->GetMethodID(env,
cls, "<init>", "()V");
jobject testObject = (*env)->NewObject(env,
testClass, constructor);
methodID callFromCpp = (*env)->GetMethodID(env,
testClass, "callFromCpp", "()V");
//get methodid
(*env)->CallVoidMethod(env, testObject, callFromCpp); |
ÄÇ×Ô¼º» UI ÊÇ·ñ»á¸ü·½±ãµã£¿±ÈÈç JUCE ºÍ QT ¾ÍÊÇ×Ô¼º»µÄ£¬ÎÒÃÇÀ´¿´¿´ QT µÄЧ¹û£º

¿´ÆðÀ´ºÜ²»´íÊǰɣ¿²»¹ýÔÚ Android 5 Ͼͱ¯¾çÁË£¬ºÜ¶àЧ¹û¶¼Ã»³öÀ´£¬±ÈÈ簴ťûÓÐÁ°äôЧ¹û£¬ÉõÖÁ±ß¿ò¶¼Ã»ÁË£¬¸ù±¾ÔÒòÔÚÓÚËüÊÇͨ¹ýQt
Quick Controls µÄ×Ô¶¨ÒåÑùʽÀ´Ä£ÄâµÄ£¬¶ø²»ÊÇʹÓÃϵͳ UI ×é¼þ£¬Òò´ËËüÏíÊܲ»µ½ÏµÍ³Éý¼¶×Ô¶¯´øÀ´µÄ½çÃæÓÅ»¯£¬Ö»ÄÜ×Ô¼ºÔÙʵÏÖÒ»±é£¬¹¤×÷Á¿²»Ð¡¡£
·´¶øÈç¹û×ʼÓõÄÊÇ Android ÔÉú×é¼þ¾Íʲô¶¼²»ÐèÒª×ö£¬¶øÇÒ»¹ÄÜÓÃÐ嵀 AppCompat
¿âÀ´ÔÚ Android 5 ÒÔÏÂʵÏÖ Material Design Ч¹û¡£
×îºóÒ»ÖÖ×ö·¨ÊÇʹÓà OpenGL À´»æÖƽçÃæ£¬ÒòΪ EGL+OpenGL ±¾Éí¾ÍÊÇ¿çÆ½Ì¨£¬ËùÒÔ»ùÓÚËüÀ´ÊµÏÖ»áºÜ·½±ã£¬Ä¿Ç°´ó¶àÊý¿çƽ̨ÓÎÏ·µ×²ã¶¼ÊÇÕâô×öµÄ¡£
¼ÈÈ»¿ÉÒÔ»ùÓÚ OpenGL À´¿ª·¢¿çƽ̨ÓÎÏ·£¬ÊÇ·ñÄÜÓÃËüÀ´ÊµÏÖ½çÃæ£¿µ±È»ÊÇ¿ÉÐе쬶øÇÒ Android
4 µÄ½çÃæ¾ÍÊÇ»ùÓÚ OpenGL µÄ£¬²»¹ýËü²¢²»ÊÇÖ»Óà OpenGL µÄ API£¬ÄÇÑùÊDz»ÏÖʵµÄ£¬ÒòΪ
OpenGL API ×î³õÉè¼Æ²¢²»ÊÇΪÁË» 2D ͼÐεģ¬ËùÒÔÁ¬»¸öÔ²Ðζ¼Ã»ÓÐÖ±½ÓµÄ·½·¨£¬Òò´Ë Android
4 ÖÐÊÇͨ¹ý Skia ½«Â·¾¶×ª»»ÎªÎ»ÖÃÊý×é»òÎÆÀí£¬È»ºóÔÙ½»¸ø OpenGL äÖȾµÄ¡£
È»¶øÒªÍêȫʵÏÖÒ»±é Android µÄ UI ¼Ü¹¹¹¤×÷Á¿²»Ð¡£¬ÒÔÏÂÊÇÆäÖв¿·ÖÏà¹Ø´úÂëµÄ´úÂëÁ¿£º

ÆäÖйâÊÇÎÄ×ÖäÖȾ¾Í·Ç³£¸´ÔÓ£¬Èç¹ûÄã¾õµÃ¼òµ¥£¬ÄÇÖ»ÄÜ˵Ã÷Äãû¿´¹ýÕâ¸öÊÀ½çÓжà´ó£¬»òÐíÄãÖªµÀÖÐÎÄÓбàÂëÎÊÌâ¡¢Ó¢ÓïÓÐÁ¬×Ö·û(hyphen)ÕÛÐУ¬µ«ÄãÊÇ·ñÖªµÀ·±ÌåÖÐÎÄÓÐÊúÅŰ桢°¢À²®ÎÄÊÇ´ÓÓÒµ½×óµÄ¡¢ÈÕÓïÓÐÆ½¼ÙÃû×¢Òô(¥ë¥Ó)¡¢Ó¡¶ÈÓïÓÐÔªÒô¸½±êÎÄ×Ö(abugida
????)¡¡£¿
¶øÏà±ÈÖ®ÏÂÈç¹ûÿ¸öƽ̨µ¥¶À¿ª·¢½çÃæ£¬¿´Ëƹ¤×÷Á¿²»Ð¡£¬µ«Ä¿Ç°ÔÚ¸÷¸öƽ̨϶¼»áÓÐÁ¼ºÃµÄ¹Ù·½Ö§³Ö£¬Ïà¹Ø¹¤¾ßºÍÎĵµ¶¼ºÜÍêÉÆ£¬ËùÒÔÆäʵ³É±¾Ã»ÄÇô¸ß£¬¶øÇÒ¿ÉÒÔ¸øÓû§ºÍϵͳ·ç¸ñ±£³ÖÒ»ÖµÄÁ¼ºÃÌåÑ飬ËùÒÔÎÒÈÏΪ¶ÔÓÚ´ó¶àÊýÓ¦ÓÃÀ´Ëµ×Ô¼º»
UI ÊǺܲ»»®ËãµÄ¡£
²»¹ýÒ²ÓÐÌØÀý£¬¶ÔÓÚ UI ±È½Ï¶ÀÌØµÄÓ¦ÓÃÀ´Ëµ£¬×Ô¼º»Ò²ÊÇÓкô¦µÄ£¬³ýÁ˸üÁé»îµÄ¿ØÖÆ£¬Ëü»¹ÄÜʹµÃ²»Í¬Æ½Ì¨Ï·ç¸ñͳһ£¬ÕâÔÚ×ÀÃæÓ¦ÓÃÖкܳ£¼û£¬±ÈÈç
Windows ÏÂÄã»á·¢ÏÖ¼¸ºõÿ¸ö±Ø±¸Èí¼þµÄ UI ¶¼²»Ì«Ò»Ñù£¬¶øÇҺö඼Óл»·ô¹¦ÄÜ£¬ÔÚÕâÖÖÇé¿öϺÜÊʺÏ×Ô¼º»
UI¡£
Xamarin
Xamarin ¿ÉÒÔʹÓà C# À´¿ª·¢ Android ¼° iOS Ó¦Óã¬ËüÊÇ´Ó Mono ·¢Õ¹¶øÀ´µÄ£¬Ä¿Ç°¿´ÆðÀ´ÉÌÒµÔË×÷µÃ²»´í£¬Ïà¹Ø¹¤¾ß¼°Îĵµ¶¼Í¦½¡È«¡£
ÒòΪËüÔÚ iOS ÏÂÊÇÒÔ AOT µÄ·½Ê½±àÒëΪ¶þ½øÖÆÎļþµÄ£¬ËùÒÔ°ÑËü¹éµ½±àÒëÁ÷À´ÌÖÂÛ£¬ÆäʵËüÔÚ Android
ÊÇÄÚǶÁË Mono ÐéÄâ»ú À´ÊµÏֵģ¬Òò´ËÐèҪװһ¸ö 17M µÄÔËÐл·¾³¡£
ÔÚ UI ·½Ã棬Ëü¿ÉÒÔͨ¹ýµ÷ÓÃϵͳ API À´Ê¹ÓÃϵͳÄÚÖõĽçÃæ×é¼þ£¬»òÕß»ùÓÚ Xamarin.Forms
¿ª·¢¶¨ÖÆÒªÇó²»¸ßµÄ¿çÆ½Ì¨ UI¡£
¶ÔÓÚÊìϤ C# µÄÍŶÓÀ´Ëµ£¬Õâ»¹ÕæÊÇÒ»¸ö¿´ÆðÀ´ºÜ²»´íµÄ£¬µ«ÕâÖÖ·½°¸×î´óµÄÎÊÌâ¾ÍÊÇÏà¹Ø×ÊÁϲ»×㣬Óöµ½ÎÊÌâºÜ¿ÉÄÜËѲ»µ½½â¾ö·½°¸£¬ÆäÖÐ̸µ½ËüµÄÓÅȱµãÊÇ£º
Óŵã
¿ª·¢ app ËùÐèµÄ»ù±¾¹¦ÄÜÈ«²¿¶¼ÓÐ
ÓÐÉÌÒµÖ§³Ö£¬¶øÇÒÕâ¸öÏîÄ¿¶Ô Windows Phone ºÜÓÐÀû£¬Î¢Èí»á´óÁ¦Ö§³Ö
ȱµã
Èç¹ûÉîÈëºó»á·¢ÏÖ¹¦ÄÜȱʧ£¬ÓÈÆäÊǶ¨ÖÆ UI£¬ÒòΪδ¿ªÔ´Ê¹µÃÓöµ½ÎÊÌâʱ²»ÖªµÀÈçºÎÐÞ¸´
Xamarin ±¾ÉíÓÐЩ Bug
Ïà¹Ø×ÊÔ´Ì«ÉÙ£¬Ã»ÓÐÔÉúƽ̨ÄÇô¶àµÚÈý·½¿â
Xamarin studio ±ÈÆð Xcode ºÍ Android Studio ÔÚ¹¦ÄÜÉÏ»¹Óкܴó²î¾à
Objective-C ±àÒëΪ Windows Phone
΢ÈíÖªµÀ×Ô¼ºµÄ Windows Phone Ì«·ÇÖ÷Á÷£¬ËùÒԺܶ®ÊµØÍƳöÁ˽« Objective-C
ÏîÄ¿±àÒëµ½ Windows Phone ÉÏÔËÐеŤ¾ß£¬Ä¿Ç°Õâ¸ö¹¤¾ßµÄÏà¹Ø×ÊÁϺÜÉÙ£¬¼øÓÚ Visual
Studio Ö§³Ö Clang£¬ËùÒÔ¼«ÓпÉÄÜÊÇʹÓà Clang µÄǰ¶ËÀ´±àÒ룬ÕâÑù×î´óµÄºÃ´¦ÊÇÒÔºóÖ§³Ö
Swift »áºÜ·½±ã£¬Òò´ËÎҹ鵽±àÒëÁ÷¡£
¶ø¶ÔÓÚ Android µÄÖ§³Ö£¬Î¢ÈíÓ¦¸ÃʹÓÃÁËÐéÄâ»úµÄ·½Ê½£¬ËùÒԷŵ½Ï¸öÕ½ڽéÉÜ¡£
RoboVM
RoboVM ¿ÉÒÔ½« Java ×Ö½ÚÂë±àÒëΪ¿ÉÔÚ iOS ÏÂÔËÐеĻúÆ÷Â룬ÕâÓеãÀàËÆ GCJ£¬µ«ËüµÄ¾ßÌåʵÏÖÊÇÏÈʹÓÃ
Soot ½«×Ö½ÚÂë±àÒëΪ LLVM IR£¬È»ºóͨ¹ý LLVM µÄ±àÒëÆ÷±àÒë³É²»Í¬Æ½Ì¨ÏµĶþ½øÖÆÎļþ¡£
±ÈÈç¼òµ¥µÄ new UITextField(new CGRect(44, 32, 232, 31))
×îºó»á±äÈçϵĻúÆ÷Âë(x86)£º
call imp___jump_table__[j]org.robovm. apple.uikit.UITextField[allocator][clinit]
mov esi, eax
mov dword [ss:esp], ebx
call imp___jump_table__[j]org.robovm. apple.coregraphics.CGRect[allocator][clinit]
mov edi, eax
mov dword [ss:esp+0x4], edi
mov dword [ss:esp], ebx
mov dword [ss:esp+0xc], 0x40460000
... |
»ùÓÚ×Ö½ÚÂë±àÒëµÄºÃ´¦ÊÇ¿ÉÒÔÖ§³Ö¸÷ÖÖÔÚ JVM ÉϹ¹½¨µÄÓïÑÔ£¬±ÈÈç Scala¡¢Kotlin¡¢Clojure
µÈ¡£
ÔÚÔËÐл·¾³ÉÏ£¬ËüʹÓÃµÄ GC ºÍ GCJ Ò»Ñù£¬¶¼ÊÇ Boehm GC£¬ÕâÊÇÒ»¸ö±£ÊØ GC£¬»áÓÐÄÚ´æÐ¹Â¶ÎÊÌ⣬¾¡¹Ü¹Ù·½ËµÒѾÓÅ»¯¹ýÁËÓ°Ïì²»´ó¡£
ÔÚ UI µÄÖ§³Ö·½Ã棬ËüºÍ Xamarin ͦÏñ£¬¿ÉÒÔÖ±½ÓÓà Java µ÷ÓÃϵͳ½Ó¿ÚÀ´´´½¨½çÃæ£¨×î½üÖ§³Ö
Interface Builder ÁË£©£¬±ÈÈçÉÏÃæµÄʾÀý¾ÍÊÇ¡£ÁíÍ⻹ºÅ³ÆÄÜʹÓà JavaFX£¬ÕâÑù¾ÍÄÜÔÚ
iOS ºÍ Android ÉÏʹÓÃͬһÌ× UI ÁË£¬²»¹ýĿǰ¿´ÆðÀ´ºÜ²»¿¿Æ×¡£
ÔÚÎÒ¿´À´ RoboVM Ŀǰ×î´óµÄÓÃ;¾ÍÊÇʹÓà libGDX ¿ª·¢ÓÎÏ·ÁË£¬¾¡¹ÜÔÚ¹¦ÄÜÉÏÔ¶²»Èç Cocos2d-x£¨ÓÈÆäÊdz¡¾°¼°¶ÔÏó¹ÜÀí£©£¬µ«²»¹ÜÔõô˵ÓÃ
Java ±È C++ »¹ÊÇ·½±ãºÜ¶à£¨±ð¸úÎÒ˵ûÈËÓà Java ×öÓÎÏ·£¬¼ÛÖµ 25 ÒÚÃÀÔªµÄ Minecraft
¾ÍÊÇ£©£¬²»¹ý±¾ÎÄÖ÷Òª¹ØÐĵÄÊÇ UI ¿ª·¢£¬ËùÒÔÕâ·½ÃæµÄ»°Ìâ¾Í²»ÉîÈëÌÖÂÛÁË£¬
RoboVM ºÍ Xamarin ºÜÏñ£¬µ« RoboVM ·çÏÕ»áСЩ£¬ÒòΪËüÖ»ÐèÒª°Ñ iOS Ö§³ÖºÃ¾ÍÐÐÁË£¬¶ÔÓÅÏÈ¿ª·¢
Android °æ±¾µÄÍŶÓͦÊÊÓ㬵«Ä¿Ç°¹Ù·½ÎĵµÌ«ÉÙÁË£¬¶øÇÒ²»Çå³þ RoboVM ÔÚ iOS ÉϵÄÐÔÄܺÍÎȶ¨ÐÔÔõÑù¡£
Swift - Apportable/Silver
apportable ¿ÉÒÔÖ±½Ó½« Swift/Objective-C ±àÒëΪ»úÆ÷Â룬µ«Ëü¹ÙÍøµÄ³É¹¦°¸ÀýÈ«²¿¶¼ÊÇÓÎÏ·£¬ËùÒÔÓÃÕâ¸öÀ´×ö
APP ¸Ð¾õºÜ²»¿¿Æ×¡£
ËùÒÔºóÀ´ËüÓÖÍÆ³öÁË Tengu Õâ¸öרÃÅÕë¶Ô APP ¿ª·¢µÄ¹¤¾ß£¬ËüµÄ±ÈÆð֮ǰµÄ·½°¸¸üÁé»îЩ£¬±¾ÖÊÉÏÓеãÀàËÆ
C++ ¹«¹²¿âµÄ·½°¸£¬Ö»²»¹ýÓïÑÔ±ä³ÉÁË Swift/Objective-C£¬Ê¹Óà Swift/Objective-C
À´±àÒëÉú³É¿çƽ̨µÄ SO Îļþ£¬Ìṩ¸ø Android µ÷Óá£
ÁíÒ»¸öÀàËÆµÄÊÇ Silver£¬²»¹ýĿǰûÕýʽ·¢²¼£¬Ëü²»½öÖ§³Ö Swift£¬»¹Ö§³Ö C# ºÍ×Ô´´µÄ
Oxygene ÓïÑÔ£¨¿´ÆðÀ´Ïñ Pascal£©£¬ÔÚ½çÃæ·½ÃæËü»¹Óиö¿çƽ̨·Ç UI ¿â Sugar£¬È»¶øÄ¿Ç°
Star ÊýÖ»ÓÐ 17£¬Ì«·ÇÖ÷Á÷ÁË£¬ËùÒÔʵÔÚÀÁµÃÑо¿Ëü¡£
ʹÓà Swift ±àÒëΪ SO ¸ø Android ÓÃËäÈ»¿ÉÐУ¬µ«Ä¿Ç°Ïà¹Ø¹¤¾ß¶¼²»Ì«³ÉÊ죬ËùÒÔ²»ÍƼöʹÓá£
Go
Go ÊÇ×î½ü¼¸ÄêºÜ»ðµÄºó¶Ë·þÎñ¿ª·¢ÓïÑÔ£¬ËüÓï·¨¼òµ¥ÇÒ¸ßÐÔÄÜ£¬Ä¿Ç°ÔÚ¹úÄÚÓв»ÉÙÓû§¡£
Go ´Ó 1.4 °æ±¾¿ªÊ¼Ö§³Ö¿ª·¢ Android Ó¦Ó㨲¢½«ÔÚ 1.5 °æ±¾Ö§³Ö iOS£©£¬²»¹ýǰֻÄܵ÷ÓúÜÉÙ
µÄ API£¬±ÈÈç OpenGL µÈ£¬ËùÒÔÖ»ÄÜÓÃÀ´¿ª·¢ÓÎÏ·£¬µ«ÎҸоõ²¢²»¿¿Æ×£¬ÏÖÔÚ»¹ÓÐËÖ±½Ó»ùÓÚ OpenGL
¿ª·¢ÓÎÏ·£¿´ó²¿·ÖÓÎÏ·¶¼ÊÇ»ùÓÚij¸ö¿ò¼ÜµÄ£¬¶ø Go ÔÚÕâ·½ÃæÌ«È±·¦ÁË£¬ÎÒÖ»¿´µ½Ò»¸ö×ÀÃæ¶Ë Azul3D£¬¶øÇҷdz£²»³ÉÊì¡£
ÒòΪ Android µÄ View ²ãÍêÈ«ÊÇ»ùÓÚ Java дµÄ£¬ÒªÏëÓà Go À´Ð´ UI ²»¿É±ÜÃâÒªµ÷ÓÃ
Java ´úÂ룬¶øÕâ·½Ãæ Go »¹Ã»Óмò±ãµÄ·½Ê½£¬Ä¿Ç° Go µ÷ÓÃÍⲿ´úÂëÖ»ÄÜʹÓà cgo£¬Í¨¹ý cgo
ÔÙµ÷Óà jni£¬ÕâÐèҪдºÜ¶àÖмä´úÂ룬ËùÒÔĿǰ Go 1.4 ²ÉÓõÄÊÇÀàËÆ RPC ͨѶµÄ·½Ê½À´×ö£¬´ÓËüÔ´ÂëÖÐÀý×Ó¿ÉÒÔ¿´³öÕâÖÖ·½Ê½ÓжàÂé·³£¬ÐÔÄܿ϶¨Óв»Ð¡µÄËðʧ¡£
¶øÇÒ cgo µÄʵÏÖ±¾Éí¾Í¶ÔÐÔÄÜÓÐËðʧ£¬³ýÁ˸÷ÖÖÎ޹غ¯ÊýµÄµ÷Óã¬Ëü»¹»áËø¶¨Ò»¸ö Go µÄϵͳỊ̈߳¬Õâ»áÓ°ÏìÆäËü
gorountine µÄÔËÐУ¬Èç¹ûͬʱÔËÐÐÌ«¶àÍⲿµ÷Óã¬ÉõÖÁ»áµ¼ÖÂËùÓÐ gorountine µÈ´ý¡£
Õâ¸öÎÊÌâµÄ¸ùÔ´ÔÚÓÚ Go µÄÕ»ÊÇ¿ÉÒÔ×Ô¶¯À©³äµÄ£¬ÕâÖÖ·½Ê½ÓÐÀûÓÚ´´½¨ÎÞÊý gorountine£¬µ«È´Ò²µ¼ÖÂÁËÎÞ·¨Ö±½Óµ÷ÓÃ
C ±àÒëºóµÄº¯Êý£¬ÐèÒª½øÐÐÕ»Çл»¡£
ËùÒÔʹÓà Go ¿ª·¢¿çÆ½Ì¨ÒÆ¶¯¶ËÓ¦ÓÃĿǰ²»¿¿Æ×¡£
»°Ëµ Rust ûÓÐ Go µÄÐÔÄÜ£¬Ëüµ÷Óà C º¯ÊýÊÇûÓÐÐÔÄÜËðºÄµÄ£¬µ«Ä¿Ç° Rust »¹Ã»Ìṩ¶Ô
iOS/Android µÄ¹Ù·½Ö§³Ö£¬¾¡¹ÜÓÐÈË»¹Êdz¢ÊÔ¹ýÊÇ¿ÉÐе쬵«ÏÖÔÚ»¹²»Îȶ¨£¬´Ó Rust ÓïÑÔ±¾ÉíµÄÉè¼ÆÀ´¿´£¬ËüͦÊʺÏÈ¡´ú
C++ À´×öÕâÖÖ¿çÆ½Ì¨¹«¹²´úÂ룬µ«ËüµÄȱµãÊÇÓï·¨¸´ÔÓ£¬»áÏÅÅܺܶ࿪·¢Õß¡£
Xojo
ÎÒ֮ǰһֱÒÔΪ BASIC ¹ÒÁË£¬Ã»Ïëµ½»¹ÓÐÕâôһ¸öÌØÀý£¬Xojo ʹÓõľÍÊÇ BASIC£¬ËüÓп´ÆðÀ´ºÜÇ¿´óµÄ
IDE£¬ÈÃÈ˸оõÏñÊÇÔÚÓà VisualBasic¡£
ËüµÄ¶¨Î»Ó¦¸ÃÊǸøÐ¡ÅóÓÑ»òÒµÓ࿪·¢ÕßÓõģ¬ÒòÎªËÆºõ¿´ÆðÀ´Ñ§Ï°³É±¾µÍ£¬µ«ÎÒ²»ÕâôÈÏΪ£¬ÒòΪÓõÃÈËÉÙ£¬·´¶øÍøÉÏ×ÊÁÏ»áºÜÉÙ£¬ËùÒÔ¿Öųɱ¾»á¸ü¸ß¡£
ÒòΪʱ¼ä¹ØÏµ£¬ÒÔ¼°¶Ô BASIC ÎÞ°®£¬ÎÒ²¢Ã»ÓÐÔõôÑо¿Ëü¡£
С½á
´ÓĿǰ·ÖÎöµÄÇé¿ö¿´£¬C++ ÊDZȽÏÎÈÍ×µÄÑ¡Ôñ£¬µ«Ëü¶ÔÍŶӳÉÔ±ÓÐÒªÇó£¬Èç¹û´ó¼Ò¶¼Ã»Ð´¹ý C++£¬¿ÉÒÔÊÔÊÔ
Xamrin »ò RoboVM¡£
ÐéÄâ»úÁ÷
³ýÁ˱àÒëΪ²»Í¬Æ½Ì¨ÏµĶþ½øÖÆÎļþ£¬»¹ÓÐÁíÒ»ÖÖ³£¼û×ö·¨ÊÇͨ¹ýÐéÄâ»úÀ´Ö§³Ö¿çƽ̨ÔËÐУ¬±ÈÈç JavaScript
ºÍ Lua ¶¼ÊÇÌìÉúµÄÄÚǶÓïÑÔ£¬ËùÒÔÔÚÕâ¸öÁ÷ÅÉÖкܶ෽°¸¶¼Ê¹ÓÃÁËÕâÁ½¸öÓïÑÔ¡£
²»¹ýÐéÄâ»úÁ÷»áÓöµ½Á½¸öÎÊÌ⣺һ¸öÊÇÐÔÄÜËðºÄ£¬ÁíÒ»¸öÊÇÐéÄâ»ú±¾ÉíÒ²»áÕ¼²»Ð¡µÄÌå»ý¡£
Java ϵ
˵µ½¿çƽ̨ÐéÄâ»ú´ó¼Ò¶¼»áÏëµ½ Java£¬ÒòΪÕâ¸öÓïÑÔÒ»¿ªÊ¼¾ÍÊÇΪÁË¿çÆ½Ì¨Éè¼ÆµÄ£¬Sun µÄ J2ME
ÔçÔÚ 1998 Äê¾ÍÓÐÁË£¬ÔÚ iPhone ³öÀ´Ç°µÄÊÖ»úÉÏ£¬ºÜ¶àСÓÎÏ·¶¼ÊÇ»ùÓÚ J2ME ¿ª·¢µÄ£¬Õâ¸öÏîÄ¿ÖÁ½ñ»¹»î×Å£¬ÄÜÔËÐÐÔÚ
Raspberry Pi ÉÏ¡£
Ç°ÃæÌᵽ΢ÈíÌṩÁ˽« Objective-C ±àÒëÔÚ Windows Phone ÉÏÔËÐеŤ¾ß£¬ÔÚ¶Ô
Android µÄÖ§³ÖÉÏÎÒûÕÒµ½µÄÏêϸ×ÊÁÏ£¬ËùÒÔ¾ÍÔÝʱÈÏΪËüÊÇÐéÄâ»úµÄ·½Ê½£¬´Ó Astoria ÏîÄ¿µÄ½éÉÜÉÏ¿´Ëü×öµÃ·Ç³£ÍêÉÆ£¬²»½öÄÜÖ§³Ö
NDK ÖÐµÄ C++£¬»¹ÊµÏÖÁË Java µÄ debug ½Ó¿Ú£¬Ê¹µÃ¿ÉÒÔÖ±½ÓÓà Android Studio
µÈ IDE À´µ÷ÊÔ£¬Õû¸ö¿ª·¢ÌåÑéºÍÔÚ Android ÊÖ»úÉϼ¸ºõÃ»Çø±ð¡£
ÁíÍâ BlackBerry 10 Ò²ÊÇͨ¹ýÄÚǶÐéÄâ»úÀ´Ö§³ÖÖ±½ÓÔËÐÐ Android Ó¦Ó㬲»¹ý¾Ý˵±È½Ï¿¨¡£
²»¹ýÇ°ÃæÌáµ½ C# ºÍ Java ÔÚ iOS ¶ËµÄ·½°¸¶¼ÊÇͨ¹ý AOT µÄ·½Ê½ÊµÏֵģ¬Ä¿Ç°»¹Ã»¼ûµ½ÓÐ
Java ÐéÄâ»úµÄ·½°¸£¬ÎÒÏëÖ÷ÒªÔÒòÊÇ iOS µÄÏÞÖÆ£¬ÆÕͨ app ²»Äܵ÷Óà mmap¡¢mprotect£¬ËùÒÔÎÞ·¨Ê¹ÓÃ
JIT À´ÓÅ»¯ÐÔÄÜ£¬Èç¹û iOS ¿ª·Å£¬»òÐíÄÄÌìÓÐÈË¿ª·¢Ò»¸öÏñ΢ÈíÄÇÑùÄÜÖ±½ÓÔÚ iOS ÉÏÔËÐÐ Android
Ó¦ÓõÄÐéÄâ»ú£¬¾Í²»ÐèÒª¿çƽ̨¿ª·¢ÁË£¬´ó¼ÒÖ»ÐèҪѧ Android ¿ª·¢¾Í¹»ÁË¡£¡£¡£
Titanium/Hyperloop
Titanium Ó¦¸Ã²»ÉÙÈËÌý¹ý£¬ËüºÍ PhoneGap ¼¸ºõÊÇͬʱÆÚµÄÖøÃû¿çƽ̨·½°¸£¬ºÍ PhoneGap
×î´óµÄÇø±ðÊÇ£ºËüµÄ½çÃæÃ»ÓÐʹÓà HTML/CSS£¬¶øÊÇ×Ô¼ºÉè¼ÆÁËÒ»Ì×»ùÓÚ XML µÄ UI ¿ò¼Ü Alloy£¬´úÂëÀàËÆÏÂÃæÕâ¸öÑù×Ó£º
app/styles/index.tss
".container": {
backgroundColor:"white"
},
// This is applied to all Labels in the view
"Label": {
width: Ti.UI.SIZE,
height: Ti.UI.SIZE,
color: "#000", // black
transform: Alloy.Globals.rotateLeft // value is
defined in the alloy.js file
},
// This is only applied to an element with the
id attribute assigned to "label"
"#label": {
color: "#999" /* gray */
}
app/views/index.xml
<Alloy>
<Window class="container">
<Label id="label" onClick="doClick">Hello,
World</Label>
</Window>
</Alloy> |
Ç°ÃæÎÒÃÇ˵¹ýÓÉÓÚ CSS µÄ¹ýÓÚÁé»îÍÏÀÛÁËä¯ÀÀÆ÷µÄÐÔÄÜ£¬ÄÇÊÇ·ñ×Ô¼º½¨Á¢Ò»Ì× UI »úÖÆ»á¸ü¿¿Æ×ÄØ£¿¾¡¹ÜÕâô×ö¶ÔÐÔÄÜȷʵÓкô¦£¬È»¶øËüÓÖ´øÀ´ÁËѧϰ³É±¾ÎÊÌ⣬×ö¼òµ¥µÄ½çÃæÎÊÌâ²»´ó£¬Ò»µ©ÒªÉîÈë¶¨ÖÆ¿ª·¢¾Í»á·¢ÏÖÏà¹Ø×ÊÁÏÌ«ÉÙ£¬ËùÒÔ»¹ÊDz»¿¿Æ×¡£
Titanium »¹ÌṩÁËÒ»Ì×¿çÆ½Ì¨µÄ API À´·½±ãµ÷Óã¬Õâô×öÊÇËüµÄÓŵã¸üÊÇȱµã£¬ÓÈÆäÊÇÏÂÃæÈý¸öÎÊÌ⣺
API ÓÐÏÞ£¬ÒòΪÕâÊÇÓÉ Titanium ÌṩµÄ£¬Ëü¿Ï¶¨»á±È¹Ù·½ API ÉÙÇÒÓÐÑÓ³Ù£¬Titanium
Êǿ϶¨¸ú²»¹ýÀ´µÄ
Ïà¹Ø×ÊÁϼ°ÉçÇøÓÐÏÞ£¬±ÈÆð Android/iOS ²îÔ¶ÁË£¬Óöµ½ÎÊÌâ¶¼²»ÖªµÀÈ¥ÄÄÕÒ´ð°¸
ȱ·¦µÚÈý·½¿â£¬µÚÈý·½¿â¿Ï¶¨²»»áרÃÅΪ Titanium Ìṩһ¸ö°æ±¾£¬ËùÒÔ²»¹ÜÓÃʲô¶¼µÃ×Ô¼º·â×°
Titanium Ò²Òâʶµ½ÁËÕâ¸öÎÊÌ⣬ËùÒÔĿǰÔÚ¿ª·¢ÏÂÒ»´úµÄ½â¾ö·½°¸
Hyperloop£¬Ëü¿ÉÒÔ½« JavaScript ±àÒëΪÔÉú´úÂ룬ÕâÑùµÄºÃ´¦Êǵ÷ÓÃÔÉú API »á±È½Ï·½±ã£¬±ÈÈçËüµÄ
iOS ÊÇÕâÑùдµÄ
@import("UIKit");
@import("CoreGraphics");
var view = new UIView();
view.frame = CGRectMake(0, 0, 100, 100); |
Õâ¸ö·½°¸ºÍ֮ǰµÄ˵µÄ Xamarin ºÜÏàËÆ£¬»ù±¾ÉϵÈÓÚ½« Objective-C ·ÒëΪ JavaScript
ºóµÄÑù×Ó£¬Òâζ×ÅÄã¿ÉÒÔ¶Ô×Å Apple µÄ¹Ù·½Îĵµ¿ª·¢£¬²»¹ýÈç¹û·¢ÏÖijЩ Objective-C Óï·¨·¢ÏÖ²»ÖªµÀ¶ÔÓ¦µÄ
JavaScript Ôõôдʱ¾Í±¯¾çÁË£¬Ö»ÓÐ×Ô¼ºÃþË÷¡£
µ«´Ó Github ÉϵÄÌá½»ÀúÊ·¿´£¬ÕâÏîÄ¿¶¼¿ì¿ª·¢Á½ÄêÁË£¬µ«ÖÁ½ñÈÔÈ»ÊÇÊÔÑé½×¶Î£¬´Ó¸üÐÂÆµÂÊÀ´¿´£¬×î½üÒ»ÄêÖ»Ìá½»ÁË
8 ´Î£¬ËùÒÔ¿ÖÅÂÊÇÒªÆú¿ÓÁË£¬·Ç³£²»¿¿Æ×¡£
Òò´ËÎÒÈÏΪ Titanium/Hyperloop ¶¼·Ç³£²»¿¿Æ×£¬²»ÍƼöʹÓá£
NativeScript
֮ǰ˵µ½ Titanium ×Ô¶¨Òå API ´øÀ´µÄ¸÷ÖÖÎÊÌ⣬ÓÚÊǾÍÓÐÈË»»Á˸ö˼·£¬±ÈÈçǰ¶Îʱ¼äÍÆ³öµÄ
NativeScript£¬ËüµÄ·½·¨Ëµ°×Á˾ÍÊÇÓù¤¾ßÀ´×Ô¶¯Éú³É wrapper API£¬ºÍϵͳ API
±£³ÖÒ»Ö¡£
ÓÐÁËÕâ¸ö×Ô¶¯Éú³É wrapper µÄ¹¤¾ß£¬Ëü¾ÍÄÜ·½±ã»ùÓÚϵͳ API
À´¿ª·¢¿çƽ̨×é¼þ£¬ÒÔ¼òµ¥µÄ Button ΪÀý£¬Ô´ÂëÔÚ cross-platform-modules/ui/button
ÖУ¬ËüÔÚ Android ÏÂÊÇÕâÑùʵÏֵģ¨TypeScript Ê¡ÂÔÁ˺ܶà´úÂ룩
export class
Button extends common.Button {
private _android: android.widget.Button;
private _isPressed: boolean;
public _createUI() {
var that = new WeakRef(this);
this._android = new android.widget.Button(this._context);
this._android.setOnClickListener(new android.view.View.OnClickListener({
get owner() {
return that.get();
},
onClick: function (v) {
if (this.owner) {
this.owner._emit(common.knownEvents.tap);
}
}
}));
}
} |
¶øÔÚ iOS ÏÂÊÇÕâÑùʵÏֵģ¨Ê¡ÂÔÁ˺ܶà´úÂ룩
export class
Button extends common.Button {
private _ios: UIButton;
private _tapHandler: NSObject;
private _stateChangedHandler: stateChanged.ControlStateChangeListener;
constructor() {
super();
this._ios = UIButton.buttonWithType(UIButtonType. UIButtonTypeSystem);
this._tapHandler = TapHandlerImpl.new() .initWithOwner(this);
this._ios.addTargetActionForControlEvents (this._tapHandler,
"tap", UIControlEvents.UIControlEventTouchUpInside);
this._stateChangedHandler = new stateChanged.ControlStateChangeListener(this._ios,
(s: string) => {
this._goToVisualState(s);
});
}
get ios(): UIButton {
return this._ios;
}
} |
¿ÉÒÔ¿´µ½Ó÷¨ºÍ¹Ù·½ SDK Öеĵ÷Ó÷½Ê½ÊÇÒ»ÑùµÄ£¬Ö»²»¹ýÓïÑÔ»»³ÉÁË JavaScript£¬²¢ÇÒд·¨¿´ÆðÀ´±È½Ï¹îÒì°ÕÁË£¬·ç¸ñÀàËÆÇ°ÃæµÄ
Hyperloop ÀàËÆ£¬ËùÒÔҲͬÑù»áÓÐÓ﷨ת»»µÄÎÊÌâ¡£
Õâô×ö×î´óµÄºÃ´¦¾ÍÊÇÄÜÍêÕûÖ§³ÖËùÓÐϵͳ API£¬¶ÔÓÚµÚÈý·½¿âÒ²ÄܺܺÃÖ§³Ö£¬µ«ËüĿǰ×î´óȱµãÊÇÉú³ÉµÄÎļþÌå»ý¹ý´ó£¬¼´±ãʲô¶¼²»×ö£¬Éú³ÉµÄ
apk ÎļþÒ²ÓÐ 8.4 MB£¬ÒòΪËü½«ËùÓÐ API binding ¶¼Éú³ÉÁË£¬¶øÇÒÕâÒ²µ¼ÖÂÔÚ Android
ÏÂÊ״δò¿ªËٶȺÜÂý¡£
´Óµ×²ãʵÏÖÉÏ¿´£¬NativeScript ÔÚ Android ÏÂÄÚǶÁË V8£¬¶øÔÚ iOS ÏÂÄÚǶÁË×Ô¼º±àÒëµÄ
JavaScriptCore£¨ÕâÒâζ×ÅûÓÐ JIT ÓÅ»¯£¬¾ßÌåÔÒòÇ°ÃæÌáµ½ÁË£©£¬ÕâÑùµÄºÃ´¦ÊÇÄܵ÷Óøüµ×²ãµÄ
API£¬Ò²±ÜÃâÁ˲»Í¬²Ù×÷ϵͳ°æ±¾Ï JS ÒýÇæ²»Ò»Ö´øÀ´µÄÎÊÌ⣬µ«ºó¹ûÊÇÉú³ÉÎļþµÄÌå»ý±ä´óºÍÔÚ iOS
ÏÂÐÔÄܲ»Èç WKWebView¡£
WKWebView ÊÇ»ùÓÚ¶à½ø³ÌʵÏֵģ¬ËüÔÚ iOS µÄ°×Ãûµ¥ÖУ¬ËùÒÔÄÜÖ§³Ö JIT¡£
ËüµÄʹÓÃÌåÑéºÜ²»´í£¬×öµ½ÁËÒ»¼ü±àÒëÔËÐУ¬¶øÇÒ»¹ÓÐ MVVM µÄÖ§³Ö£¬ÄܽøÐÐÊý¾ÝË«Ïò°ó¶¨¡£
ÔÚÎÒ¿´À´ NativeScript ºÍ Titanium ¶¼ÓиöºÜ´óµÄȱµã£¬ÄǾÍÊÇÅÅËüÐÔ̫ǿ£¬Èç¹ûÄãÒªÓÃÕâÁ½¸ö·½°¸£¬¾ÍµÃÍêÕû»ùÓÚËüÃǽøÐпª·¢£¬²»ÄÜÔÚijЩ
View ϽøÐг¢ÊÔ£¬Ò²²»Ö§³ÖÖ±½ÓǶÈëµÚÈý·½ View£¬ÓÐûÓз½°¸Äܺܺõؽâ¾öÕâÁ½¸öÎÊÌ⣿ÓУ¬ÄǾÍÊÇÎÒÃǽÓÏÂÀ´Òª½éÉܵÄ
React Native¡£
React Native
¹ØÓÚ React Native Ä¿Ç°ÍøÉÏÓкܶàÌÖÂÛÁË£¬ÖªºõÉÏÒ²Óв»Éٻش𣬾¡¹ÜÓÐЩ»Ø´ð´Óµ×²ãʵÏֽǶȿ´²¢²»×¼È·£¬µ«´ó²¿·Ö¹Ø¼üµãµ¹ÊǶ¼Ìáµ½ÁË¡£
¼øÓÚÎÒ²»Ï²»¶Öظ´±ðÈË˵¹ýµÄ»°£¬ÕâÀï¾ÍÁĵã±ðµÄ¡£
React Native µÄ˼·¼òµ¥À´Ëµ¾ÍÊÇÔÚ²»Í¬Æ½Ì¨ÏÂʹÓÃÆ½Ì¨×Ô´øµÄ UI ×é¼þ£¬Õâ¸ö˼·²¢²»ÐÂÆæ£¬Ê®¼¸ÄêǰµÄ
SWT ¾ÍÊÇÕâô×öµÄ¡£
´ÓÍŶÓÉÏ¿´£¬Facebook µÄ iOS ÍŶÓÖв»ÉÙ³ÉÔ±ÊÇÀ´×Ô Apple µÄ£¬±ÈÈç Paper
ÍŶӵľÀí¼°ÆäÖв»ÉÙ³ÉÔ±¶¼ÊÇ£¬ÒòΪ iOS ²»¿ªÔ´£¬ËùÒÔ´Ó Apple ÖгöÀ´µÄ¿ª·¢Õß»¹ÊÇÓÐÓÅÊÆµÄ£¬±ÈÈçǰ
Apple ¿ª·¢Õ߸ã³öÀ´µÄ Duet ¾ÍÃëɱÁËÊÐÃæÉÏËùÓÐÆäËû·½°¸£¬¶øÇÒ´Ó Facebook ÔÚ iOS
ÉÏ¿ªÔ´µÄÏîÄ¿¿´ËûÃÇÔÚ iOS ·½ÃæµÄ¾ÑéºÍ¼¼Êõ¶¼²»´í£¬ËùÒÔ´ÓÍŶӽǶȿ´ËûÃÇ×ö³öÀ´µÄ¶«Î÷²»»áÌ«²î¡£
ÔÚ×ö React Native ·½°¸µÄͬʱ£¬Æäʵ Facebook
»¹ÔÚ×öÒ»¸ö Objective-C++ ÉÏÀàËÆ React µÄ¿ò¼Ü ComponentKit£¬ÒÔÏÂÊÇËüµÄ´úÂëʾÀý£º
@implementation
ArticleComponent
+ (instancetype)newWithArticle:(ArticleModel
*)article
{
return [super newWithComponent:
[CKStackLayoutComponent
newWithView:{}
size:{}
style:{
.direction = CKStackLayoutDirectionVertical,
}
children:{
{[HeaderComponent newWithArticle:article]},
{[MessageComponent newWithMessage:article.message]},
{[FooterComponent newWithFooter:article.footer]},
}];
}
@end |
ËüµÄ¿É¶ÁÐÔ±È JSX ÖÐµÄ XML ²îÁ˲»ÉÙ£¬¶øÇÒËæ×Å´ó¼ÒÖð²½½ÓÊÜ Swift£¬ÕâÖÖ»ùÓÚ Objective-C++
µÄ·½°¸¿ÖÅÂû¼¸Äê¾Í¹ýʱÁË£¬ËùÒÔ Facebook Ѻ±¦ React ÊDZȽÏÕýÈ·µÄ¡£
ÎÒ¿´µ½ÓÐÈË˵ÕâÊÇ Facebook »Ø¹é H5£¬µ«Æäʵ React Native ºÍ Web ³¶²»ÉÏÌ«¶à¹ØÏµ£¬ÎÒËùÀí½âµÄ
Web ÊÇÖ¸ W3C ¶¨ÒåµÄÄÇЩ¹æ·¶£¬±ÈÈç HTML¡¢CSS¡¢DOM£¬¶ø React Native
Ö÷ÒªÊÇ½è¼øÁË CSS ÖÐµÄ Flexbox д·¨£¬»¹ÓÐ navigator¡¢XMLHttpRequest
µÈ¼¸¸ö¼òµ¥µÄ API£¬¸ü±ð˵ÍêȫûÓÐ Web µÄ¿ª·ÅÐÔ£¬ËùÒÔ React Native ºÍ HTML
5 ÍêÈ«²»ÊÇÒ»»ØÊ¡£
Facebook Groups µÄ iOS °æ±¾ºÜ´óÒ»²¿·Ö»ùÓÚ React Native ¿ª·¢£¬ÆäÖÐÓõ½Á˲»ÉÙÄÚ²¿Í¨¹ý×é¼þ£¬±ÈÈç
ReactGraphQL£¬ÕâÀïÎÒ¾Í°ËØÔÒ»ÏÂËü£¬GraphQL ÕâÊÇÒ»¸ö½á¹¹»¯Êý¾Ý²éѯµÄÓï·¨£¬¾ÍÏñ MongoDB
²éѯÓï·¨ÄÇÑù²éѯ JSON Êý¾Ý£¬²»¹ýËü²¢²»ÊÇÒ»ÖÖÎĵµÐÍÊý¾Ý¿â£¬¶øÖ»ÊÇÒ»¸öÖмä²ã£¬¾ßÌåµÄÊý¾ÝÔ´¿ÉÒÔÁ¬ÆäËüÊý¾Ý¿â£¬ËüÏëÈ¡´úµÄÓ¦¸ÃÊÇ
RESTful ÄÇÑùµÄǰºó¶Ë¼òµ¥ HTTP ÐÒ飬ÈÃǰ¶Ë¸ü·½±ãµÄ»ñÈ¡Êý¾Ý£¬¾Ý˵½«»á¿ªÔ´£¨¿´ÆðÀ´´òËãÓÃ
Node ʵÏÖ£©¡£
дÎÄÕÂÍÏʱ¼äÌ«³¤µÄÎÊÌâ¾ÍÊÇÕâÆÚ¼ä»á·¢ÉúºÜ¶àÊÂÇ飬±ÈÈç GraphQL ÔÚÎÒ¿ªÊ¼Ð´µÄʱºòÍâ½ç¶¼²»ÖªµÀ£¬ËùÒÔÐèÒª°ËØÔһϣ¬½á¹ûÏÖÔÚ¹Ù·½ÒѾÐû²¼ÁË£¬²»¹ý¹Ù·½²¢Ã»Ìáµ½ÎÒ˵µÄÄǸö
Node ʵÏÖ£¬ËüĿǰ»¹ÔÚÇÄÇÄ¿ª·¢½×¶Î
React Native µÄ¹Ù·½ÊÓÆµÖÐ˵ËüÄÜ×öµ½ App ÄÚʵʱ¸üУ¬ÆäʵÕâÊÇ Apple Ã÷ÎĽûÖ¹µÄ£¨App
Store Review Guidelines ÖÐµÄ 2.7£©£¬Òª×öµÃµÍµ÷¡£
ÆÀÂÛÖÐÓÐÈËÌáµ½ Apple ¾ÓÈ»ÔÚ iOS 8.2 ÖиÄÌõ¿îÁË£¬¿ÉÒÔÏÂÔØÖ´ÐÐ JavaScript£¬¶øÇÒ
UIKit µÄ×÷Õß¶¼¾õµÃ React Native ºÜÔÞ
ÎұȽÏϲ»¶µÄÊÇ React Native ÖÐÓõ½ÁË Flow£¬ËüÖ§³Ö¶¨Ò庯Êý²ÎÊýµÄÀàÐÍ£¬¼«´óÌáÉýÁË´úÂë¿É¶ÁÐÔ£¬ÁíÍ⻹ÄÜʹÓÃ
ES6 µÄÓï·¨£¬±ÈÈç class ¹Ø¼ü×ֵȡ£
React Native ±È´«Í³ Objective-C ºÍ UIView µÄѧϰ³É±¾µÍ¶àÁË£¬ÊìϤ
JavaScript µÄ¿ª·¢ÕßÓ¦¸Ã°ëÌìÄÚ¾ÍÄÜд¸öʹÓñê×¼ UI µÄ½çÃæ£¬¶øÇÒÓà XML+CSS »½çÃæÒ²Ô¶±È
UIView ÖÐÓà Frame ½øÐÐÊÖ¹¤²¼¾Ö¸üÒ×¶Á£¨ÎÒûÓùý Storyboards£¬ËüËäÈ»¿´ÆðÀ´Ö±¹Û£¬µ«¶àÈ˱༺ÜÈÝÒ׳åÍ»£©£¬¸ÐÐËȤ¿ÉÒÔ³é¿Õ¿´¿´Õâ¸öÏêϸµÄÈëÃŽ̳̣¬Ç××Ô¶¯ÊÖÊÔÊÔ¾ÍÄÜÌå»áµ½ÁË£¬Command
+ R ¸üдúÂë¸Ð¾õºÜÉñÆæ¡£
ËüĿǰÒѾÓÐ×é¼þ²Ö¿âÁË£¬¶øÇÒÔÚ github É϶¼ÓÐ 500 ¶à²Ö¿âÁË£¬ÆäÖÐÓÐ sqlite¡¢Camera
µÈÔÉú×é¼þ£¬Ëæ×ÅÕâЩµÚÈý·½×é¼þµÄÍêÉÆ£¬»ùÓÚ React Native ¿ª·¢Ô½À´Ô½²»ÐèҪдÔÉú´úÂëÁË¡£
²»¹ý»µÏûÏ¢ÊÇ React Native µÄ Android °æ±¾»¹ÒªµÈ°ëÄ꣬Õâ¿ÉÒÔÀí½â£¬ÒòΪÔÚ Android
ÉÏÎÊÌâÒª¸´Ôӵö࣬ÓÐ Dalvik/ART À¹ÔÚÖм䣬ʹµÃ½»»¥ÆðÀ´ºÜÂé·³¡£
NativeScript ºÍ React Native ÔÚ²àÖØµãÉÏÓкܴóµÄ²»Í¬£¬Ê¹µÃÕâÁ½¸ö²úƷĿǰ×ßÏòÁ˲»Í¬µÄ·½Ïò£º
React Native Òª½â¾öµÄÊÇ¿ª·¢Ð§ÂÊÎÊÌ⣬Ëü²¢Ã»Ö¸ÍûÍêȫȡ´ú Native ¿ª·¢£¬ËüµÄ rootView
¼Ì³Ð×Ô UIView£¬ËùÒÔ¿ÉÒÔÔÚ²¿·Ö View ÊÇʹÓ㬺ܷ½±ã»ì×Å£¬²»ÐèÒªÖØÐ´Õû¸ö app£¬¶øÇÒ»ìÓõÄʱºò»¹ÐèÒªÏÔʾµØ½«
API ±©Â¶¸ø JavaScript
NativeScript ÔòÏñÊÇ Titanium ÄÇÑùÆóͼÍêȫʹÓà JavaScript ¿ª·¢£¬½«ËùÓÐϵͳ
API ¶¼±©Â¶¸øÁË JavaScript£¬Èà JavaScript ÓïÑÔĬÈϾÍÓµÓÐ Native ÓïÑԵĸ÷ÖÖÄÜÁ¦£¬È»ºóÔٴλù´¡ÉÏÀ´¿ª·¢
·½ÏòµÄ²»Í¬µ¼ÖÂÕâÁ½¸ö²úÆ·½«»áÓв»Í¬µÄ½á¾Ö£¬ÎÒÈÏΪ React Native ¿Ï¶¨»áÍêʤ NativeScript£¬ÒòΪËüµÄʹÓ÷çÏÕҪСºÜ¶à£¬Äã¿ÉÒÔËæÊ±½«²¿·Ö
View ʹÓà React Native À´ÊÔÑ飬Óöµ½ÎÊÌâ¾Í¸Ä»Ø Native ʵÏÖ£¬·çÏտɿأ¬¶øÓÃ
NativeScript ¾Í²»ÐÐÁË£¬Õâµ¼Ö´ó¼ÒÔÚ¼¼ÊõÑ¡Ð͵Äʱºò²»¸ÒʹÓà NativeScript¡£
»°Ëµ Angular ÍŶӿ´µ½ React Native ºó±íʾ²»µ¶¨ÁË£¬ÓÚÊÇ¿ªÊ¼ÖØÐÂÉè¼Æ Angular
2 µÄÕ¹Ïּܹ¹£¬½«ÏÖÓÐµÄ Render ²ã¶ÀÁ¢³öÀ´£¬ÒÔ±ãÓÚ×öµ½Ïñ React ÄÇÑùÊÊÓ¦²»Í¬µÄÔËÐл·¾³£¬¿ÉÒÔÔËÐÐÔÚ
NativeScript ÉÏ¡£
×ÛºÏÀ´¿´£¬ÎÒ¾õµÃ React Native ºÜÖµµÃ³¢ÊÔ£¬¶øÇÒ·çÏÕÒ²²»¸ß¡£
ÓÎÏ·ÒýÇæÖеĽű¾
ÓÎÏ·ÒýÇæ´ó¶à¶¼ÄÜ¿çÆ½Ì¨£¬ÎªÁËÌáÉý¿ª·¢Ð§ÂÊ£¬²»ÉÙÒýÇæ»¹ÄÚǶÁ˶Խű¾Ö§³Ö£¬±ÈÈ磺
Ejecta£¬ËüʵÏÖÁË Canvas ¼° Audio µÄ API£¬¿ÉÒÔ¿ª·¢¼òµ¥µÄÓÎÏ·£¬µ«Ä¿Ç°»¹²»Ö§³Ö
Android
CocoonJS£¬ÊµÏÖÁË WebGL µÄ API£¬¿ÉÒÔÔËÐÐ Three.js дµÄÓÎÏ·
Unreal Engine 3£¬¿ÉÒÔʹÓà UnrealScript À´¿ª·¢£¬Õâ¸öÓïÑÔµÄÓï·¨ºÜÏñ Java
Cocos2d-js£¬Cocos2d-x µÄ JavaScript binding£¬ËüÄÚ²¿Ê¹ÓÃµÄ JS
ÒýÇæÊÇ SpiderMonkey
Unity 3D£¬¿ÉÒÔʹÓà C# »ò JavaScript ¿ª·¢ÓÎÏ·Âß¼
Corona£¬Ê¹Óà Lua À´¿ª·¢
...
ĿǰÕâÖÖ·½Ê½Ö»ÓÐ Unity 3D ·¢Õ¹±È½ÏºÃ£¬Cocos2d-JS ¾Ý˵»¹ÐУ¬ÓÐЩСÓÎÏ·ÔÚʹÓã¬Corona
¸Ð¾õ±È½Ï·ÇÖ÷Á÷£¬ËäÈ»ËüÒ²Ö§³Ö¼òµ¥µÄ°´Å¥µÈ½çÃæÔªËØ£¬µ«ÓÃÀ´Ð´ APP ÎÒ²»¿´ºÃ£¬ÒòΪ²»¿ªÔ´ËùÒÔûÑо¿£¬Ä¿Ç°¿´À´×î´óµÄºÃ´¦ËƺõÊÇÐéÄâ»úÌå»ýС£¬ÄÚǶ°æ±¾¹Ù·½ºÅ³ÆÖ»ÓÐ
1.4M£¬ÕâÊÇ Lua ÒýÇæ±È½Ï´óµÄÓÅÊÆ¡£
¶øÊ£Ï嵀 3 ¸ö¶¼»ù±¾ÉϹÒÁË£¬Ejecta ÖÁ½ñ»¹²»Ö§³Ö Android£¬CocoonJS תÐÍΪÀàËÆ
Crosswalk µÄ WebView ·½°¸£¬¶ø Unreal Engine 4 ¿ªÊ¼²»ÔÙÖ§³Ö UnrealScript£¬¶øÊÇתÏòÁËʹÓÃ
C++ ¿ª·¢£¬¸ÐÐËȤ¿ÉÒÔΧ¹ÛһϠEpic ´´Ê¼È˽âÊÍΪʲôҪÕâô×ö¡£
µ±È»£¬ÕâЩÓÎÏ·ÒýÇæ¶¼²»ÊʺÏÓÃÀ´×ö APP£¬Ò»·½ÃæÊÇ»áÓöµ½Ç°ÃæÌáµ½µÄ½çÃæ»æÖÆÎÊÌ⣬ÁíÒ»·½ÃæÓÎÏ·ÒýÇæµÄʵÏÖÒ»°ã¶¼Òª²»¶ÏÖØ»æ£¬Õâ¿Ï¶¨±ÈÆÕͨ
App ¸üºÄµç£¬ºÜÈÝÒ×±»Óû§·¢ÏÖºóÅɾ¡£
Adobe AIR
´ÓÎÒÖܱßÁ˽⵽µÄÇé¿ö¿´£¬¼¸ºõËùÓÐÈ˶¼ÒÔΪ Flash ³¹µ×·ÅÆúÒÆ¶¯¶ËÁË£¬²»µÃ²»Ëµ Adobe µÄÐû´«ÕæÊÇʧ²ß£¬Ã÷Ã÷Ö»ÊÇ·ÅÆúÒÆ¶¯ä¯ÀÀÆ÷¶Ë²å¼þ£¬Flash
»¹ÊÇ¿ÉÒÔÔÚ iOS ÏÂÔËÐеĺò»ºÃ£¬ÄǾÍÊÇ Adobe AIR£¬¶ÔÓÚÊìϤ ActionScript
µÄÍŶÓÀ´Ëµ£¬ÕâÊÇÒ»ÖÖͦºÃµÄ¿çƽ̨ÓÎÏ·¿ª·¢½â¾ö·½°¸£¬¹úÄÚÓÎÏ·¹«Ë¾Ö®Ç°ÓÐÓã¬ÏÖÔÚ»¹ÓÐûÈËÓÃÎҾͲ»ÖªµÀÁË£¬²»¹ý¿¼Âǵ½ºÜ¶à²»Ã÷ÕæÏàµÄСÅóÓѶ¼ÒÔΪ
Flash ÔÚÒÆ¶¯¶Ë¹ÒÁË£¬ËùÒÔºó±¸Á¦Á¿¿Ï¶¨ÑÏÖØ²»×㣬Á¬È˶¼Õв»µ½£¬ÆäËü¾Í±ðÏëÁË¡£
ÆÀÂÛÖÐÓÐÈËÖ¸³öÔÚ iOS ÏÂÊÇͨ¹ý±àÒëʵÏֵģ¬¿´À´ºÍ Xamarin RoboVM ºÜÀàËÆ¡£
µ«¿ª·¢ APP ·½Ã棬ËüͬÑùȱ·¦ºÃµÄ UI ¿â£¬Flex ʹÓÃÌåÑéºÜ²î£¬Ä¿Ç°»ù±¾ÉÏËã¹ÒÁË£¬Ä¿Ç°Ö»ÓÐ
Feathers »¹ËãÄÜ¿´£¬²»¹ýÖ÷ÒªÊǸøÓÎÏ·ÖÐµÄ UI Éè¼ÆµÄ£¬²¢²»ÊʺÏÓÃÀ´¿ª·¢ APP¡£
Dart
Dart ÔÚ Web »ù±¾ÉÏʧ°ÜÁË£¬ÓÚÊÇ¿ªÊ¼×ªÕ½Òƶ¯¿ª·¢£¬Ä¿Ç°ÓÐÁ½¸ö˼·£¬Ò»¸öÊÇÀàËÆ Lua ÄÇÑùµÄǶÈëÓïÑÔÀ´Í³Ò»¹«¹²´úÂ룬µ«ÒòΪ
Dart ÐéÄâ»úÔ´×Ô V8£¬ÔÚÒ»¿ªÊ¼Éè¼ÆµÄʱºò¾ÍÖ»ÓÐ JIT ¶øÃ»ÓнâÊÍÆ÷£¬ÉõÖÁÁ¬×Ö½ÚÂ붼ûÓУ¬ËùÒÔËüÎÞ·¨ÔÚ
iOS ÏÂÔËÐУ¬ÓÚÊÇ Dart ÍŶÓÓÖ×öÁ˸öСÇɵÄÐéÄâ»ú Fletch£¬Ëü»ùÓÚ´«Í³µÄ×Ö½ÚÂë½âÊÍÖ´Ðз½Ê½À´ÔËÐУ¬Ä¿Ç°´úÂëÖ»ÓÐ
1w ¶àÐУ¬ºÍ Lua Ò»ÑùÇáÁ¿¼¶¡£
ÁíÒ»¸ö¾ÍÊÇ×î½ü±È½ÏÈÈÃÅµÄ Sky£¬ÕâÀïͲÛһϹúÄÚÍâµÄýÌ壬ÎÒ¿´µ½µÄ±¨µÀ¶¼ÊÇ˵ Google ÏëÒªÓÃ
Dart È¡´ú Android Ï嵀 Java ¿ª·¢¡£¡£¡£Õâ¸ö¶«¶«È·ÊµÊÇ Google µÄ Chrome
ÍŶӿª·¢µÄ£¬µ« Google ÊÇÒ»¸öºÜ´óµÄ¹«Ë¾ºÃ²»ºÃ£¬ÄÚ²¿ÓÐÎÞÊýСÍŶӣ¬Ä³¸öСÍŶӲ¢²»ÄÜ´ú±í¸ö Google£¬Èç¹ûÕæÊÇ
Google ¸ß²ãµÄ¾ö¶¨£¬Ëü½«»áÔÚ Google I/O ´ó»áÖ÷ÌâÑݽ²ÉÏÍÆ³öÀ´£¬¶ø²»ÊÇ Dart Developer
Summit ÕâÑù·ÇÖ÷Á÷µÄ¼¼Êõ·ÖÏí¡£
Óб¨µÀ³Æ Sky Ö»Ö§³ÖÔÚÏßÓ¦Ó㬲»Ö§³ÖÀëÏߣ¬Õâ´íµÃÌ«ÀëÆ×ÁË£¬È˼ÒÖ»ÊÇΪÁËÑÝʾËüµÄÔÚÏ߸üÐÂÄÜÁ¦£¬ÄãÒªÏ뽫´úÂëÄÚǶµ½
app ÀﵱȻÊÇ¿ÉÒԵġ£
Sky µÄ¼Ü¹¹ÈçÏÂͼËùʾ£¬Ëü²Î¿¼ÁË Chrome£¬ÒÀ¿¿Ò»¸öÏûϢϵͳÀ´ºÍ±¾µØ»·¾³½øÐÐͨѶ£¬Ê¹µÃ Dart
µÄ´úÂëºÍƽ̨Î޹أ¬¿ÉÒÔÔËÐÐÔÚ¸÷ÖÖÆ½Ì¨ÉÏ¡£

Èç¹ûÄã¶Á¹ýÇ°ÃæµÄÎÄÕ£¬ÄÇÄãÒ»¶¨ºÍÎÒÒ»Ñù·Ç³£¹ØÐÄÒ»¸öÎÊÌ⣺Sky µÄ UI ÊÇÔõô»æÖƳöÀ´µÄ£¿Ê¹ÓÃϵͳ»¹ÊÇ×Ô¼º»£¿Ò»¿ªÊ¼¿´
Sky ½éÉÜÊÓÆµµÄʱºò£¬ÎÒ»¹ÒÔΪËüµ×²ã»æÖÆ»ùÓÚ Chrome£¬ÒòΪÕâ¸öÊÓÆµµÄÑݽ²ÕßÊÇ Eric Seidel£¬ËûÊÇ
WebKit ÏîÄ¿Öзdz£ÓÐÃûµÄ¿ª·¢Õߣ¬ÔçÄêÔÚ Apple ¿ª·¢ WebKit£¬2008 ÄêÌø²ÛÈ¥ÁË
Chrome ÍŶӣ¬µ«ËûÔÚÑݽ²Öв¢Ã»ÓÐÌáµ½ WebView£¬¶øÇÒÑÝʾµÄʱºò½çÃæ·Ç³£ÏñÔÉú Material
Design Ч¹û£¨±ÈÈçµã»÷ÓÐÁ°äôЧ¹û£©£¬ËùÒÔÎÒÓÖ¾õµÃËüÊÇÀàËÆ React Native ÄÇÑùʹÓÃÔÉú
UI¡£
È»¶øµ±ÎÒÏÂÔØÄǸöÓ¦Ó÷ÖÎöºó·¢ÏÖ£¬Ëü¼ÈûʹÓà Chrome/WebView ҲûʹÓÃÔÉú UI ×é¼þ£¬ÄѲ»³ÉÊÇ×Ô¼º»æÖƵģ¿
´Ó Sky SDK µÄ´úÂëÉÏ¿´£¬ËüÆäÖÐÓзdz£¶à Web µÄºÛ¼££¬±ÈÈçÖ§³Ö±ê×¼µÄ CSS¡¢ºÜ¶à DOM
API£¬µ«Ëü±àÒëºóµÄÌå»ý·Ç³£Ð¡£¬libsky_shell.so Ö»ÓÐ 8.7 MB£¬ÎÒ֮ǰ³¢ÊÔ¾«¼ò¹ý
Chrome Äںˣ¬½« WebRTC µÈÖܱ߹¦ÄÜɾµôÒ²Òª 22 MB£¬ÕâôСµÄÌå»ý¿Ï¶¨ÒªÉ¾ Web
ºËÐŦÄÜ£¬±ÈÈç SVG ºÍ²¿·Ö CSS3£¬ËùÒÔÎÒ»³ÒÉËüʵÏÖÁ˼ò°æµÄ Chrome ÄÚºËäÖȾ¡£
ºóÀ´ÎÞÒâ¼ä¿´ÁËһϠMojo µÄ´úÂ룬²Å֤ʵȷʵÈç´Ë£¬ÔÀ´Ç°ÃæÄÇÕÅͼÖнéÉܵÄ
Mojo Æäʵ²¢²»ÍêÕû£¬Mojo ²»½ö½öÊÇÒ»¸öÏûϢϵͳ£¬ËüÊÇÒ»¸ö¼ò°æµÄ Chrome Äںˣ¡Ê¹Óà cloc
ͳ¼Æ´úÂë¾Í±©Â¶ÁË£º
12508 text files.
11973 unique files.
2299 files ignored.
-----------------------------------------------------------
Language files blank comment code
-----------------------------------------------------------
C++ 3485 129830 107745 689089
C/C++ Header 3569 92435 125742 417655
C 266 37462 63659 269220
... |
C++ ²»°üº¬×¢Ê͵ĴúÂ벿·Ö¾ÍÓнü 70w Ðа¡£¬¶øÇÒÒ»¿´Ä¿Â¼½á¹¹¾ÍÊÇŨŨµÄ Chromium ·ç¸ñ£¬ÖÁÉÙ´Ó¼¼ÊõÄѶÈÀ´Ëµ¾ø¶ÔÃëµôÇ°ÃæËùÓз½°¸£¬Ò²Ó¡Ö¤ÁËÎÒÇ°ÃæËµ¹ýÈç¹ûÓмò»¯°æ
CSS/HTML ¾ÍÄܺܺýâ¾öÐÔÄÜÎÊÌâ¡£
ÕâÒ²ÈÃÎÒÀí½âÁËΪʲô Eric ÔÚ̸µ½ Mojo µÄʱºòÓïÑɲ»Ï꣬ÈÃÈËÎóÒÔΪ½ö½öÊÇÒ»¸öÏûϢϵͳ£¬ËûÒªÊÇÃ÷ȷ˵ÕâÊÇÒ»¸ö¾«¼ò°æ
Chrome£¬ÄǵÃÒýÆð¶à´óµÄÎó»á°¡£¬Ã»×¼»áÓÐС±àÓá¸Google Ðû²¼¿ª·¢ÏÂÒ»´úä¯ÀÀÆ÷ÄÚºËÈ¡´ú Blink¡¹ÕâÑùµÄ±êÌâÁË¡£
֮ǰ Dart ¾ö¶¨²»½« Dart VM ·Åµ½ Chrome ÀÔÀ´²¢²»ÊÇÒòΪ±»ÖÚÈË·´¶Ô¶øËÀÐÄÁË£¬¶øÊÇÒòΪ
fork ÁËÒ»¸ö Chrome ×Ô¼ºÄÃÀ´ÍæÁË¡£
×ÛºÏÀ´¿´£¬Ä¿Ç° Dart µÄÕâÁ½¸ö·½°¸¶¼·Ç³£²»³ÉÊ죬Sky ËäÈ»ÔÚ¼¼ÊõÉÏ¿´ºÜÇ¿´ó£¬µ« Dart ÓïÑÔĿǰ½ÓÊܶȷdz£µÍ£¬±ÈÆðËüËù´øÀ´µÄ¿çƽ̨Óŵ㣬ËüµÄȱµã¸ü´ó£¬±ÈÈçÎÞ·¨Ê¹ÓõÚÈý·½
Native UI ¿â£¬Ò²ÎÞ·¨Ê¹ÓõÚÈý·½ Web UI ¿â£¬Õâµ¼ÖÂËüµÄÉçÇø»á·Ç³£ÄÑ·¢Õ¹£¬ÃüÖÐ×¢¶¨·ÇÖ÷Á÷£¬Õæ¿ÉϧÁËÕâ°ï¼¼Êõ´óÅ££¬µ«·½Ïò±ÈŬÁ¦¸üÖØÒª£¬Ï£ÍûËûÃÇÄܾ¡ÔçÐÑÎò£¬ÈÃ
Sky Ò²Ö§³Ö JavaScript¡£
ÎҵĽáÂÛ
¿´µ½ÕâÀï¹À¼Æ²»ÉÙ¶ÁÕßÔÎÁË£¬ÓÐÄÇô¶àÖÖ·½°¸£¬×îºóµ½µ×Äĸö×îÊʺÏ×Ô¼º£¿¸ÃѧÄĸö£¿ÕâÀï¼òµ¥ËµËµÎҵĿ´·¨¡£
Èç¹ûÄãÖ»»á JavaScript£¬ÄÇĿǰ×îºÃµÄ·½°¸ÊÇ React Native£¬ÓÐÁËËüÄ㼴ʹ²»Á˽â
Native ¿ª·¢Ò²ÄÜд³öºÜ¶àÖÐСӦÓ㬷´Õý¶à°ë²»»á»ð£¬»¨Ì«¶à¾«Á¦Ò²Ã»ÒâÒ壬µÈÍòÒ»»ðÁËÔÙѧ Native
¿ª·¢Ò²²»³Ù°¡¡£
Èç¹ûÄãÖ»»á Java£¬ÄÇ¿ÉÒÔ³¢ÊÔ RoboVM »ò j2objc£¬j2objc ËäȻĿǰ¸üÎȶ¨¿¿Æ×£¬µ«Ëü²»ÄÜÏñ
RoboVM ÄÇÑùÍêÈ«Óà Java ¿ª·¢£¬ËùÒÔÄ㻹µÃѧ Objective-C À´Ð´½çÃæ£¬¶ø RoboVM
µÄȱµã¾ÍÊÇÃ²ËÆ»¹²»Ì«Îȶ¨£¬¶øÇÒËÆºõ³ýÁËÓÎÏ·ÒÔÍ⻹û¼ûµ½±È½ÏÖªÃûµÄÓ¦ÓÃʹÓ㬶øËüÕâÖÖ·½°¸×¢¶¨»á±È j2objc
¸üÈÝÒ׳öÎÊÌ⣬ËùÒÔÄãµÃ×öºÃ²È¿ÓµÄÐÄÀí×¼±¸¡£
Èç¹ûÄãÖ»»á C#£¬ÄÇΨһµÄÑ¡Ôñ¾ÍÊÇ Xamarin ÁË¡£
Èç¹ûÄãÖ»»á Objective-C£¬ºÜ±¾ßĿǰûÓбȽϿ¿Æ×µÄ·½°¸£¬ÎÒ½¨ÒéÄ㻹ÊÇѧѧ Java °É£¬¶àѧһÃÅÓïÑÔûɶ»µ´¦¡£
Èç¹ûÄãÖ»»á C++£¬¿ÉÒÔ×ö×öÓÎÏ·»ò·Ç UI µÄ¹«¹²²¿·Ö£¬ÎÒ²»½¨ÒéʹÓà QT »ò×Ô¼º»½çÃæ£¬»¹ÊÇѧѧ
Native ¿ª·¢°É¡£
Èç¹ûÄãÖ»»á Go£¬»¹±ðÖ¸ÍûÓÃËü¿ª·¢Òƶ¯¶Ë£¬ÒòΪĿǰµÄʵÏֺܵÍЧ£¬¶øÇÒÕâºÍ Go µ×²ãµÄʵÏÖ»úÖÆÃÜÇÐÏà¹Ø£¬µ¼ÖºÜÄÑÓÅ»¯£¬ËùÒÔÔ¤¼ÆºÜ³¤Ò»¶Îʱ¼äÄÚÒ²²»»áÓиĹۡ£
Èç¹ûÄã»á Rust£¬ËµÃ÷ÄãºÜϲ»¶ÕÛÌÚ£¬¶à°ëÒ²»áÇ°ÃæËùÓÐÓïÑÔ£¬×Ô¼º×ö¾ö¶¨°É¡£¡£¡£
µ±È»£¬ÉÏÃæ¶¼ÊÇÕë¶Ô¸öÈ˵쬶ÔÓÚÍŶÓÀ´Ëµ£¬ÄDz»ÓÃÏëÁË£¬¿Ï¶¨Óà Native£¬È»ºó»ìÓÃÄÚǶµÄ·½°¸£¬±ÈÈç
Lua¡¢React Native£¬Ç°ÃæÄÇЩÅÅËüµÄ·½°¸£¨±ÈÈç Titanium£©Ç§Íò±ðÑ¡£¬»áËÀºÜ²Ò¡£
P.S. ±¾ÎÄ˵µÄÊÇÒÆ¶¯¶Ë£¬ºÜ¶àÈ˾õµÃ¿çƽ̨´ÓÀ´¶¼²»¿¿Æ×£¬µ«ÆäʵÊÇÓеģ¬ÄǾÍÊÇ Web£¬Õâ¸öÀúÊ·ÉÏ×î³É¹¦µÄÀý×Ó£¬Ì«³É¹¦ÒÔÖÂÓÚ´ó¼Ò¶¼Ï°ÒÔΪ³£ÁË£¬´óÊ÷֮ϣ¬´ç²Ý²»Éú£¬Ëü¼·µôÁËÆäËü·½°¸µÄÉú´æ¿Õ¼ä£¬Ê®¼¸Äêǰ»¹ÓÐ
B/S ºÍ C/S Ö®ÕùÄØ¡£ |