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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
51 ÐÅÓÿ¨ Android ¼Ü¹¹ÑݽøÊµ¼ù
 
  2629  次浏览      28
 2018-12-19
 
±à¼­ÍƼö:

±¾ÎÄÀ´×ÔÓÚinfoq£¬ÎÄÕ²ûÊöÁË 51 ÐÅÓÿ¨ Android ¼Ü¹¹Ñݽø¹ý³ÌÖÐWeex ÈÝÆ÷ʵ¼ù¡¢¹¤³Ì»¯Êµ¼ùµÈµÄһЩʵ¼ù¾­Ñé¡£

Ëæ×ÅÒµÎñµÄ¿ìËÙÀ©ÕÅ£¬Ô­±¾Ð¡×÷·»Ê½µÄµ¥¸ö¹¤³ÌµÄ¿ª·¢Ä£Ê½Ô½À´Óë²»ÄÜÂú×ãʵ¼ÊÐèÇó¡£ÔçÔÚÁ½Äê¶àÒÔǰ£¬51 ÐÅÓÿ¨¹Ü¼Ò¾ÍÏòϳÁµí³öÁ˵¥¶ÀµÄ¹«Óûù´¡¿â£¬Ò»Ð©Í¨ÓõŦÄÜ×é¼þºÍ¸ö±ð¶ÀÁ¢µÄÒµÎñ±»²ð·Ö³É SDK£¬ÐγÉÁËÒ»Ì×ÖÐÐÍÏîÄ¿¡¢¶àÈ˲¢ÐеĿª·¢Ä£Ê½£¬Ò²ÎªÎ´À´×é¼þ»¯²ð·Ö×ö×¼±¸¡£

ÕâÌ׿ò¼ÜÔËÐÐÁËÒ»¶Îʱ¼äÖ®ºó£¬°éËæ×ŵ¥Ó¦ÓÃÄÚÒµÎñÐèÇóµÄÔö¼Ó¡¢¿ª·¢ÈËÔ±ÊýÁ¿µÄÔö¶à¡¢»ù´¡¿âÊýÁ¿µÄÅòÕÍ£¬µ¼ÖÂÁËһЩÎÊÌ⣺

Ö÷¹¤³Ì´úÂëñîºÏÑÏÖØ£¬Ç£Ò»·¢¶ø¶¯È«Éí

ÐèÇó²âÊÔÓ°ÏìÃæ´ó£¬²»Äܾ۽¹µ¥Ò»ÒµÎñÄ£¿é

Ö÷¹¤³Ì´úÂëÔ½À´Ô½¶à£¬±àÒëºÄʱ

ÒÀÀµµ¹Öã¬ÒµÎñ´úÂëÒÀÀµ App ¹¤³Ì

SDK ½çÏÞÄ£ºý£¬»ù´¡¿âºÍÒµÎñ¿â½çÏÞ²»Ã÷È·

ÒµÎñÄ£¿é¼ä¿ÉÒÔÈÎÒâÒÀÀµµ÷Óã¬ÒÀÀµ¹æÔò²»Ã÷È·

Àà¿âÔ½À´Ô½¶à£¬²»ºÃ¹ÜÀí

³ýÁËÒÔÉÏÎÊÌ⣬¶¯Ì¬»¯ÐèÇóÒ²Ô½À´Ô½Ç¿ÁÒ£¬ÒÀÀµ Hybrid + H5 ´ò¿ªÒ³ÃæÂýµÄÎÊÌâҲ͹ÏÔ³öÀ´¡£

ÕâЩÎÊÌâÍÆ¶¯ÎÒÃǸü½øÒ»²½µÄÉý¼¶¿ª·¢¹¹¼Ü¡£

×é¼þ»¯ or ²å¼þ»¯

¶¯Ì¬»¯

×î½üÁ½Ä꣬²å¼þ»¯¿ò¼Ü²ã³ö²»Ç¸÷´ó³§¶¼·Å³öÁË×Ô¼Ò¿ªÔ´µÄ²å¼þ»¯¿ò¼Ü¡£×÷Ϊ Native ¶¯Ì¬»¯ÓëÐÔÄܼæ¹ËµÄ²å¼þ»¯·½°¸£¬ºÜ¶à¹«Ë¾Ñ¡Ôñ²å¼þ»¯×÷Ϊ¶¯Ì¬»¯¼¼Êõ·½°¸¡£¶¯Ì¬ÐÔͨ³£ÓÐÁ½²¿·ÖµÄ×÷ÓãºÒ»ÊǶ¯Ì¬ÈÈÐÞ¸´£»¶þÊǶ¯Ì¬Ï·¢ÒµÎñ²å¼þ¡£¶ÔÓÚµÚÒ»µã£¬ÎÒÃÇÓÐÈÈÐÞ¸´¿ò¼Ü¿ÉÒÔÍê³ÉÕⲿ·Ö¹¤×÷£»¶ÔÓÚµÚ¶þµã£¬ÎÒÃÇʹÓÃÁË Hybrid ¼ÓÔØ H5 µÄ·½Ê½ÊµÏÖ£¬ËäÈ»ÐÔÄÜÉÏÓÐËùǷȱ£¬µ«ÍêÈ«Çе½ Native À´×öÓеãÍÆµ¹ÖØÀ´µÄÒâ˼£¬²¢ÇÒ¸úÒµ½çͬѧ½»Á÷ºó£¬¶ÔÓÚ¶¯Ì¬Ï·¢ÒµÎñ²å¼þÓõ½µÄÇé¿öÒ²²»¶à£¬ÒµÎñ¸üÐÂÖ÷Òª»¹ÊÇÒÀ¿¿ App Éý¼¶À´ÊµÏÖ¡£¼¼Êõ·½°¸Ã»ÓÐ×îÓŽ⣬ѡÔñÊʺÏ×Ô¼ºµÄ²ÅÊÇ×îºÃµÄ¡£

ÓÉÓÚ²å¼þ»¯Ò²´æÔÚһЩ±×¶Ë£¬±ÈÈç²»¿É±ÜÃâµÄ hook framework¡¢ÐÞ¸Ä aapt¡¢°ü×° Gradle Plugin¡¢´úÀí×é¼þµÈµÈ·Ç³£¹æ²Ù×÷£¬ÈÕ³£Î¬»¤Ò²ÊÇÒ»±Ê²»Ð¡µÄ¿ªÏú£¬Îȶ¨ÐÔ¡¢¼æÈÝÐÔ¡¢Ð°汾ÊÊÅäµÈµÈÎÊÌâ¶¼ÐèÒª¿¼ÂǽøÈ¥¡£¶ÔÓÚ Android ¶ËÊÇ·ñʹÓòå¼þ»¯£¬¹«Ë¾ÄÚ²¿×ö¹ýһЩÌÖÂÛ£¬½áÂÛÊDz»¼±×ÅÉÏ£¬±ß×߱߿´£¬ÏȰÑÒµÎñ×é¼þ²ð·Ö³öÀ´ÔÙ˵¡£

Èç½ñ»Ø¹ýÍ·¿´£¬×Ô´Ó Android P ·¢²¼ÒÔÀ´£¬ÏÞÖÆ hook framework ºó£¬²å¼þ»¯Ö𽥿ªÊ¼Ê½Î¢£¬ºóÃæ×ßÏò´ó¸ÅÂÊÊÇά»¤³É±¾Ô½À´Ô½¸ß£¬³É±¾ÊÕÒæ±ÈÖð½¥½µµÍ£¬×îÖÕÆú¿Ó²»Óá£

³ýÁ˲å¼þ»¯Í⣬¶¯Ì¬»¯·½°¸½üÁ½Äê±È½Ï»ðµÄ¾ÍÊÇÒÔ ReactNative¡¢Weex Ϊ´ú±íµÄ´óǰ¶Ë·½Ïò£¬½áºÏ 51 ÐÅÓÿ¨µÄʵ¼ÊÇé¿ö£¬×îÖÕÑ¡ÔñÓµ±§´óǰ¶Ë£¬ Weex ×÷Ϊ¶¯Ì¬»¯·½°¸£¬ÒÔ Native ΪÖ÷£¬ Hybrid ÀëÏß»¯·½°¸Îª¸¨£¬Weex Öð²½µü´úµÄ¼Ü¹¹¿ª·¢Ä£Ê½¡£

Weex µÄ»ù´¡½¨ÉèºÍǰ¶ËͬѧºÏ×÷£¬Àú¾­´ó°ëÄêʱ¼ä£¬Ä¿Ç°ÒѾ­Îȶ¨Ó¦ÓÃÔÚ 51 ÐÅÓÿ¨¸÷¸ö App ÉÏ£¬Weex ×÷Ϊ¶¯Ì¬»¯Ò³ÃæµÄÊ×Ñ¡·½°¸£¬ÒѾ­Íê³ÉÁËÏßÉÏÊý°Ù¸öÒ³ÃæµÄ¿ª·¢ÐèÇó¡£ÅäºÏÀëÏß»¯·½°¸£¬¸÷ÏîÐÔÄÜÖ¸±êÒ²¶¼´ïµ½ÒªÇó¡£

×é¼þ·ÖÀë

´úÂë½âñîÓë´úÂë¸ôÀ룬×îÓÐЧµÄ·½°¸Êǹ¤³Ì¸ôÀë¡£ÉóÊÓÎÒÃÇ×î³õµÄ·½°¸£¬Ã¿¸ö SDK ¶ÔÓ¦µ¥¶ÀµÄ²Ö¿â£¬Í¨¹ý maven ÒÀÀµ£¬Í¨¹ý¹¤³Ì·ÖÀë¸ôÀë´úÂ룬ÕâÖÖ·½°¸Ã»ÓÐÎÊÌ⣬ֻ²»¹ýÐèÒªÍùǰ¸ü½üÒ»²½£¬¸÷¸öÒµÎñÄ£¿éÒ²ÐèÒª¶ÀÁ¢Ö÷¹¤³Ì£¬²ð·Ö³É¶ÀÁ¢µÄÒµÎñ×é¼þ¡£

ͬʱ£¬»®·ÖÇå³þ´úÂë±ß½ç£¬¿ØÖÆÒÀÀµ¹ØÏµ£¬ÊáÀíÇå³þ²ã´Î½á¹¹£¬×îÖÕÐγÉÈçÏÂͼËùʾµÄ¼Ü¹¹¡£

ÕûÌå¼Ü¹¹ÉÏÌṩÈýÖÖÈÝÆ÷£º

Native ÈÝÆ÷£¬²ÉÓÃ×é¼þ»¯¼Ü¹¹£¬ÓÃÓÚÔ­ÉúÒµÎñ¿ª·¢

Hybrid ÈÝÆ÷£¬webview ¼ÓÔØ H5£¬ÅäºÏÀëÏß»¯·½°¸

Weex ÈÝÆ÷£¬ÓÃÓÚ±àд³£¹æµÄÒ³Ãæ£¬js ¶¯Ì¬×ª»¯³É Native ¿Ø¼þ£¬ÌìÈ»¾ßÓж¯Ì¬»¯ÌØÐÔ£¬ÅäºÏÀëÏß»¯·½°¸£¬´ïµ½Ò³ÃæÃ뿪µÄЧ¹û£¬Í¬Ê±¹²Óà Hybrid ³Áµí³öµÄ±È½ÏÍêÉÆµÄ PG ·½·¨

ͬʱ£¬Hybrid ºÍ Weex ÒÀÀµÓÚÔ­ÉúÌṩµÄ·½·¨£¬Í¨¹ý JsBridge ½øÐÐͨÐÅ£¬Ä¿Ç°¹²ÓÐ 200 ¶à¸ö PG ·½·¨¹© js µ÷Óᣳ¤Ô¶À´¿´£¬ÕâÈýÖÖÈÝÆ÷²¢²»»á»¥ÏàÈ¡´ú£¬Ïà·´µØ£¬ËüÃÇÓ¦¸ÃÊÇÏ໥ÒÀ´æ¡¢È¡³¤²¹¶Ì¡¢³¤ÆÚ¹²´æµÄ״̬¡£

×é¼þ»¯Êµ¼ù

Native ÈÝÆ÷¶ÔÓ¦ÉÏͼÖи÷¸ö²ã¼¶µÄ¶¨Ò壺

¹¤³Ì App£¬¸÷¸öÓ¦Óù¤³Ì£¬Ä¿Ç°ÒÑÓÐÊ®¶à¸öÓ¦Óò¢Ðпª·¢£¬51 ÐÅÓÿ¨¹Ü¼Ò×÷Ϊƽ̨ӦÓã¬ÆäÓàÓ¦ÓÃΪ¶ÀÁ¢µÄÒµÎñ¹¤³ÌÓ¦ÓÃ

ÒµÎñ×é¼þ£¬¶ÀÁ¢µÄÒµÎñ×é¼þ£¬Ò»°ãΪ¸´ºÏÒµÎñ×é¼þ£¬api ÓëʵÏÖ·ÖÀ룬Ï໥֮¼äÒÀÀµ¸ôÀë

»ù´¡ÒµÎñ SDK£¬¶ÀÁ¢µÄСµÄµ¥¹¦ÄÜÄ£¿é£¬Ìṩ»ù´¡¹¦ÄÜ£¬Ä¿Ç°ÕâÒ»²ã¼¶Öл¹°üº¬ÒÅÁôδ¸ÄÔìµÄ²¿·ÖÒµÎñ×é¼þ

»ù´¡ Lib£¬ÒµÎñÎ޹صĻù´¡×é¼þ

×é¼þ»¯²ð·ÖµÄºËÐÄËßÇóÊǽâñîºÍ£¬Ìá¸ß×é¼þÄÚ¾Û£¬ËùÒÔÓ¦¸Ã´ÓËßÇó³ö·¢£¬ÔÚÑØÓõ±Ï¿ª·¢Ä£Ê½£¬²¢ÇÒ²»Ç¿ÒÀÀµ×é¼þ»¯¿ò¼ÜµÄÇé¿öÏ£¬Ö𽥵ĽøÐÐ×é¼þ»¯²ð·Ö¡£

ͨ¹ý¹¤³Ì¸ôÀë½ø¶ø½øÐÐ×é¼þ»¯²ð·Öºó£¬»ù±¾¿ÉÒÔ½â¾öÉÏÃæÌáµ½µÄÎÊÌ⣺

¸ßÄÚ¾Û£¬µÍñîºÏ£¬´úÂë±ß½çÇåÎú£¬´úÂë±ä¶¯Ó°ÏìÃæ¿ÉÒÔ׼ȷÆÀ¹À

Ìá¸ß¿ª·¢Ð§ÂÊ£¬Ã¿¸ö×é¼þ¿ÉÒÔ¶ÀÁ¢´ò°ü£¬µ¥¶Àµ÷ÊÔ£¬×î¶à¼¸Ê®Ãë¾Í¿ÉÒÔÍê³É´ò°ü¹ý³Ì

ÿ¸ö×é¼þ¸ºÔð×é¼þÄÚµÄÊÂÇ飬ÀíÂÛÉÏÖ»Òª±£Ö¤×é¼þÄÚ²¿Îȶ¨£¬½ÓÈ빤³Ì App ºóÒ²²»»á²úÉúеÄÎÊÌâ

½µµÍ App ¹¤³Ì±àÒëʱ¼ä£¬×îÀíÏëµÄÇé¿öÊÇ£¬App ¹¤³Ì½ö½öÊÇÒ»¸ö¿Õ¿Ç£¬ÓÃÓÚ¼ÓÔØ¸÷¸ö×é¼þ

½âñһ°ãÐèÒª±ÜÃâÖ±½ÓÒÀÀµ£¬×ªÎª¼ä½ÓÒÀÀµ£¬¼òµ¥À´Ëµ¾ÍÊÇÒÀÀµ¸ôÀë¡£¶ÔÓÚ×é¼þ»¯¶øÑÔ£¬Ã¿¸ö×é¼þ¶¼Êǵ¥¶ÀµÄʵÏÖ£¬µ¥¸ö×é¼þ¶ÔÍâÌṩµÄ·þÎñ¾¡¿ÉÄܵ¥Ò»£¬ÒÀÀµ¾¡¿ÉÄÜÉÙ£»Í¬Ê±£¬ÒÀÀµÆäËü×é¼þ¹¦ÄÜ»òÒ³ÃæµÄÇé¿öÏ£¬¾¡¿ÉÄܱÜÃâÖ±½ÓÒÀÀµ£¬×îºÃÒÀÀµÖмä²ã½øÐм¯ÖÐʽ¹ÜÀí£¬È»ºóÔÙ½øÐÐÂß¼­·Ö·¢¡£ËùÒÔÎÒÃÇÒ»°ã²ÉÓ÷Ö×ֵܷĽṹ£º×é¼þÄÚ²¿·Ö±ð×¢²á£¬±àÒëʱÉú³É»ã×Ü´úÂë¡¢ÔËÐÐʱ¼¯ÖÐʽ¹ÜÀí£¬µ÷ÓÃʱ´¦ÀíÂß¼­·Ö·¢¡£

×é¼þ»¯ÐèÒª½âñî´¦ÀíµÄ¼¸¸ö»ù´¡Ä£¿é£º

Ò³ÃæÂ·ÓÉ

Ä£¿é¼äµ÷ÓÃ

ÏûÏ¢×ÜÏß

Êý¾Ý×ÜÏß

ÏÂÃæÒÀ´Î½éÉÜ¡£

Ò³ÃæÂ·ÓÉ

·ÓÉ·Ö·¢±¾ÖÊÉÏÊǰÑÖ±½ÓÒÀÀµÒýÓÃת»¯ÎªÖÐÐÄ»¯¹ÜÀí·Ö·¢µÄÒ»¸ö¹ý³Ì£¬ÓÉÓÚ×é¼þ»¯²ð·Öºó£¬¸÷¸öÒµÎñ×é¼þ¼ä²»´æÔÚÖ±½ÓµÄÒÀÀµ¹ØÏµ£¬ËùÒÔ±ØÈ»ÒªÓÐÒ»¸öͳһÊÕ¼¯Ò³ÃæÌø×ª¹æÔò½ø¶øÔÙ·Ö·¢µÄ¹ý³Ì¡£

51 ÐÅÓÿ¨ÔÚ 2017 Äê¾ÍÔÚ½øÐзÓÉ»¯Êµ¼ù£¬ÒÔÓ¦¶ÔºóÃæ½øÐеÄ×é¼þ»¯²ð·ÖÐèÇ󣬲¢³Áµí³öÒ»Ì××ÔÑеÄ·ÓÉ¿ò¼Ü U51OkDeepLink£¬ËüÒ²²ÉÓ÷Ö×ֽܷṹ£¬Ö÷ÒªÔ­ÀíÊÇ×é¼þÄÚ×¢²á·ÓÉ£¬±àÒëʱÔÚ×é¼þÄÚÉú³É¶ÀÁ¢µÄ·ÓÉ±í£¬²¢Óà AOP ÔÚ±àÒëʱ×öºÃËùÓÐ×é¼þÄÚ·Óɱí»ã×ܵŤ×÷£¬µ÷Óóõʼ»¯·½·¨Ê±½øÐзÓɱí»ã×Ü£¬Ò³ÃæÌø×ªÊ±ÔÙ½øÐйÜÀí·Ö·¢£¬ÆäÓ÷¨ºÜ¼òµ¥£º

// ×é¼þÄÚ×¢²á·ÓÉ
public interface SampleService {
@Path("/main")
@Activity(MainActivity.class)
void startMainActivity(@Query("key") String key);
}

// ÆäÓà×é¼þ»½ÆðÒ³Ãæ
new DeepLinkClient(context).buildRequest("old:
//app/main?key=value").addQuery("key2", "2").start();

²¢ÇÒÖ§³ÖÇ¿´óµÄÒì²½ÌØÐÔ£¬Ö§³ÖÌø×ª¹ý³ÌÖеÄÖмäÂß¼­´¦Àí¡£

ÆäÔ­ÀíͼÈçÏÂ

 

Ä£¿é¼äµ÷ÓÃ

×é¼þ¼ä²ã´ÎºÍ±ß½çÄ£ºýÎÊÌâµÄ²úÉú£¬¸ù±¾Ô­ÒòÊǸ÷¸öÒµÎñ×é¼þ¼äµÄÏ໥ÒÀÀµ¹ØÏµ»ìÂÒ£¬ÎªÁ˽øÐÐÒµÎñ×é¼þ¼äµÄ¸ôÀ룬Ê×ÏÈÒª×öºÃ×é¼þÖ®¼äµÄ·þÎñµ÷Óýâñî¡£

ÕâÀï²ÉÓõÄÊÇ ServiceLoader µÄģʽ£¬×é¼þ¹¤³ÌĿ¼һ°ãÈçÏÂËùʾ

ÿ¸ö×é¼þÄÚÒ»°ãÉùÃ÷Èý¸ö module£º

api module£¬ÉùÃ÷¶ÔÍⱩ¶µÄ·þÎñ½Ó¿ÚºÍ¶ÔÍⱩ¶µÄʵÌåÀ༰ Event ʼþ

imp module£¬ÒÀÀµ api module£¬ÊÇ api module µÄ¾ßÌåʵÏÖ£¬²»¶ÔÍⱩ¶ϸ½Ú£¬²»ÔÊÐíÆäËû×é¼þ¶Ô imp module ½øÐÐÖ±½ÓÒÀÀµ

app module£¬Êǹ¤³ÌµÄ¿Ç£¬¿ÉÒÔÖ±½ÓÔËÐе÷ÊÔ£¬Í¨¹ý SDKTemplate ´´½¨Éú³É£¬°üº¬¸÷ÖÖÔËÐÐʱËùÐè»·¾³

ÒµÎñ×é¼þÖ®¼äÒÀÀµ api ¿âµÄ·þÎñ½Ó¿Ú£¬imp ¿â×÷ΪʵÏÖ¶¯Ì¬²éÕÒ¡£°æ±¾·¢²¼Ê±£¬Í¬Ê±·¢²¼ api ºÍ imp Á½¸ö¿â£¬²¢ÇÒ±£Ö¤ api ºÍ imp ¾ßÓÐÏàͬ°æ±¾ºÅ£¬Õâ¸öÔÚ×é¼þ·¢°æÊ±Í³Ò»¹ÜÀí¡£

// ×é¼þÄÚ api module ½Ó¿ÚÉùÃ÷
@Service
public interface TestService {
void sayHello();
}
// ×é¼þÄÚ imp module ½Ó¿ÚʵÏÖ
@ServiceImpl
public class TestServiceImpl implements TestService {
@Override
public void sayHello() {
}
}

// ¿ç×é¼þµ÷ÓÃ
compile 'com.u51.android:test-lib-api:$version'

CommentService service = ServicesLoader.getInstance()
.getService(TestService.class);
service.sayHello();

ËüµÄʵÏÖÔ­ÀíÓë·ÓÉÀàËÆ£¬Ò²ÊDzÉÓ÷Ö×ֽܷṹ£¬ÔÚ±àÒëʱͨ¹ý APT Éú³É»ã×Ü´úÂ룬µ÷ÓÃʱ¶¯Ì¬²éÕÒ×¢Èë Service ¼°ÆäʵÏÖÀàµÄ°ó¶¨¹ØÏµ¡£

Óë·Óɳõʼ»¯»ã×Ü·ÓÉ±í²»Í¬µÄÊÇ£¬ServiceLoader ÔÚµ÷ÓÃʱ²éÕÒ£¬Ê¡È¥Á˳õʼ»¯µÄÂß¼­£¬Service ²»»áÏñ·ÓÉÕâô¶à£¬²éÕÒÆðÀ´²»»á´æÔÚ±éÀúÌ«ÂýµÄÎÊÌâ¡£

ÏûÏ¢×ÜÏß

ÏûÏ¢×ÜÏßÊÇ»ùÓÚ EventBus ʵÏֵĿçÈý¶Ë£¨Native¡¢Hybrid¡¢Weex£©Ê¼þ¹ÜÀí·Ö·¢×é¼þ U51EventBus¡£¿çÈý¶ËÊÇÖ¸ÔÚÈÎÒâÒ»¶Ë×¢²á¼àÌýºó£¬ÔÚʼþ´¥·¢Ê±¶¼¿ÉÒԵõ½ÏìÓ¦¡£

¶ÔÓÚÔ­Éú¿ª·¢À´Ëµ£¬EventBus ±¾Éí¿ÉÒÔÂú×ãÐèÇó£¬ËäÈ»ÓеãʼþÂúÌì·ÉµÄȱµã£¬µ«ÊÇ»¹ÔڿɽÓÊÜ·¶Î§Ö®ÄÚ¡£¶ÔÓÚÒµÎñ×é¼þÀ´Ëµ£¬Æä Event ÀàÐèÒª·ÅÔÚ api module ÖнøÐб©Â¶¡£

¶ÔÓÚ Hybrid ºÍ Weex À´Ëµ£¬Ò»°ãµÄ bridge ¶¼ÊÇ callback ÐÎʽµÃµ½Òì²½ÏìÓ¦£¬¶ÔÓÚÈ«¾Öʼþ֪֧ͨ³Ö²»Ì«ÓѺá£Í¨¹ý bridge ͨµÀÁ¬½Ó U51EventBus ÏûÏ¢×ÜÏߣ¬´òͨ¿çÈý¶ËÈ«¾ÖµÄʼþ¼àÌý¼°·Ö·¢£¬µÃÒÔʵÏÖÈÎÒâʼþ¿ÉÒÔÔÚ Native¡¢H5¡¢Weex Ö®¼äÏ໥·¢ËͺͼàÌý¡£±ÈÈ磬ÀàËÆµÇ½¡¢µÇ³ö²Ù×÷ÔÚ Native ·¢³öºó£¬È«¾ÖÒÑ´ò¿ªµÄ H5 »ò Weex Ò³Ãæ¿ÉÒÔÁ¢¼´µÃµ½¸ÐÖª¡£

ÆäʵÏÖÔ­ÀíÒ²ÊDzÉÓ÷Ö×ֽܷṹ£¬ÔÚ±àÒëʱ¶Ô EventBus ½øÐÐÁ˶¨ÖÆ·â×°£¬Ê¼þ·Ö·¢»¹ÊÇʹÓõÄÔ­ÓÐµÄ EventBus ·Ö·¢Âß¼­¡£

Êý¾Ý×ÜÏß

Êý¾Ý´æ´¢²ÉÓûùÓÚ Room ʵÏÖµÄͳһ KV ´æ´¢¿ò¼Ü£¬µ×²ãÊý¾Ý¿âÒÀÈ»ÊÇ sqlite£¬ÐÔÄÜÕâ¿éûÓÐ×öÌØ±ðÇ¿µ÷£¬Ç¿ÖÆÆäÔÚ×ÓÏß³ÌÖнøÐвÙ×÷£¬ÓÃÓÚÖ§³ÖÈÕ³£¿ª·¢ÖÐÅäÖúÍÒµÎñÊý¾ÝµÄ´æÈ¡²Ù×÷¡£

ÁíÍ⣬Êý¾Ý×ÜÏßÖ§³Ö°´Ä£¿é½øÐдæÈ¡£¬Ã¿¸öÒµÎñ×é¼þ¶¼¿ÉÒÔ¶¨Òå×ÔÓÐ tag£¬±ÜÃâ×ֶγåÍ»ÎÊÌâ¡£

¿çƽ̨»ìºÏ¿ª·¢Êµ¼ù

ÎÞÂÛ´ÓÔçÆÚµÄ PhoneGap¡¢Cordova£¬»¹ÊǽüÄêÀ´±È½Ï»ðµÄ ReactNative¡¢Weex£¬µ½×î½üÁ½ÄêáÈÆðµÄ Flutter£¬¿çƽ̨»ìºÏ¿ª·¢Ò»Ö±ÉîÊÜÖڶ࿪·¢Çàíù¡£¾¿ÆäÔ­Òò£¬»¹ÊÇÆä¿çƽ̨ºÍ¶¯Ì¬»¯ÊÇÔ­Éú¿ª·¢Ëù²»¾ß±¸µÄÌØÐÔ¡£

Hybrid ÈÝÆ÷ʵ¼ù

Native ºÍ H5 »ìºÏ¿ª·¢Ò»°ãÊDZȽϳ£¼ûµÄ»ìºÏ¿ª·¢Ä£Ê½£¬H5 ¿ª·¢Ð§Âʸߡ¢µü´ú¿ìËÙ¡¢²»ÒÀÀµ App ·¢°æ£¬51 ÐÅÓÿ¨ÖÚ¶à App ²úÆ·ÖУ¬ÓкܶàÒ³Ãæ¶¼ÊÇÓà H5 À´¿ª·¢£¬Ç¶ÈëÔ­Éú App ÖÐʹÓà webview ½øÐмÓÔØÏÔʾ¡£

ÔçÆÚ H5 ÈÝÆ÷ÔÚ¸÷¸ö App Öзֱð¶ÀÁ¢ÊµÏÖ£¬Ã»ÓÐͳһµÄ¼Ü¹¹ºÍ¹æ·¶£¬µ¼ÖÂ¶Ô H5 µÄÖ§³ÖЧÂʽϵͣ¬PG ·½·¨£¨À´Ô´ÓÚ PhoneGap£©µÄ¿ª·¢¡¢²âÊÔºÍά»¤¶¼Ï൱µÄ»ìÂÒ£¬Öظ´ÐÔ¹¤×÷Ì«¶à¡£

Native ²ãÌṩһÌ×ͨÓÃÐÔÇ¿¡¢¹¦Äܷḻ¡¢Îȶ¨ÐÔ¸ßµÄ H5 ÈÝÆ÷¶ÔÒµÎñµÄ¸ßËÙ·¢Õ¹ÖÁ¹ØÖØÒª¡£

²å¼þ¹ÜÀí

ÓÉÓÚ H5 ²»¾ß±¸Ö±½Óµ÷ÓÃÔ­Éú·½·¨£¬ËùÒÔÔ­Éú¿ÇÒªÌṩһÌ×ͨÓõÄͨÐÅ·½Ê½£¬Ò»°ãΪ JsBridge£¬ÔÚ Android ¶Ë£¬ÊµÏÖ JsBridge ͨÐŵÄͨµÀÒ»°ãÓÐÒÔϼ¸ÖÖ£º

shouldOverrideUrlLoading

addJavascriptInterface

onJsPrompt/onJsAlert

¶øÍ¨µÀ²»Êǹؼü£¬ÔõÑù¹ÜÀíºÍά»¤ PG ·½·¨µ÷ÓòÅÊǺËÐÄ¡£Îª´Ë£¬ÎÒÃǰÑÿ¸ö·½·¨¶¨ÒåΪһ¸ö Plugin£¬Óòå¼þµÄÐÎʽ¹ÜÀí PG ·½·¨£¬ÕâÑù¿ÉÒÔ×öµ½Ã¿¸ö²å¼þ¶ÀÁ¢ÔËÐУ¬»¥²»¸ÉÈÅ¡£²å¼þ¹ÜÀíÒ²ÊDzÉÓ÷Ö×ֽܷṹ£¬ÔÚ¸÷¸öÒµÎñ×é¼þÖзֱð×¢²á£¬±àÒëÊÇͨ¹ý APT Éú³É»ã×Ü´úÂ룬ÔËÐÐʱ½øÐвå¼þ»ã×Ü£¬×îºóµ÷ÓÃͨ¹ý PluginManager ²éÕÒ·Ö·¢Âß¼­¡£

²å¼þ×¢²á´úÂëÈçÏ£¬ÆäÖÐ onExecute() ·½·¨ÔÚ js µ÷Óø÷½·¨Ê±´¥·¢£¬Ö´Ðнá¹ûͨ¹ý evaluateJavaScript() ·½·¨Òì²½·µ»Ø¡£

@JsPlugin(name = TestPlugin.PLUGIN_NAME, loadOnInit = false, version = 1)
public class TestPlugin extends EnNiuJsPlugin {
public static final String PLUGIN_NAME = "TestPlugin";

@Override
public String getPluginName() {
return PLUGIN_NAME;
}
...
@Override
public boolean onExecute(String args) {
doSomething();
callbackContext.callback(...);
return true;
}
}

ÆäÖУ¬H5 ÈÝÆ÷ºÍ²å¼þ¶¼¾ßÓÐ Activity ÉúÃüÖÜÆÚ¸ÐÖªÄÜÁ¦£¬²å¼þµÄÉúÃüÖÜÆÚ£º

ÅäÌ×ÉèÊ©

²å¼þͳһͨ¹ý²å¼þ¹ÜÀíÆ½Ì¨½øÐÐά»¤¹ÜÀí£¬Ä¿Ç°ÒÑÓÐ 200+ ²å¼þ¡£PG ²å¼þ×÷Ϊ»ù´¡Í¨Óù¦ÄÜ£¬²ÉÈ¡¼¯ÖÐʽ¹ÜÀí»úÖÆ£¬ÈκÎÈËÔÚÐÂÔö¡¢Ð޸IJå¼þ¶¼ÐèÒª½øÐÐÏà¹Ø¸ºÔðÈËÉóºË£¬ÒÔ±ÜÃâ³öÏÖ Android¡¢iOS Á½¶ËʵÏÖ²»Í³Ò»£¬°æ±¾¼äʵÏÖ²»Í³Ò»µÈÎÊÌâ¡£

²å¼þµ÷ÊÔͨ¹ýµ÷ÊÔÆ½Ì¨½øÐвÙ×÷£¬ä¯ÀÀÆ÷Öдò¿ªµ÷ÊÔµØÖ·£¬App ¶Ëͨ¹ýµ÷ÊÔ¹¤¾ßɨÂ뽨Á¢Á¬½Ó£¬¼´¿É½øÐвå¼þµ÷ÊÔ¡£

ÀëÏß¼ÓÔØ

Hybrid »ìºÏ¿ª·¢µÄÒ»´óÁÓÊÆ¾ÍÊÇÐÔÄܱȽϲ´ò¿ªÒ³Ãæ½ÏÂý£¬ÌرðÊÇÔÚÈõÍøÇé¿öÏ¡£ÓÉÓÚ 51 ÐÅÓÿ¨ÒµÎñ´ó²¿·Ö¶¼ÊǾ²Ì¬×ÊÔ´ÇëÇ󣬲ο¼Òµ½ç×ö·¨£¬ÎÒÃÇʵÏÖÁ˶¯Ì¬Ï·¢ÀëÏß°üµÄ·½Ê½À´ÌáÉý H5 Ò³Ãæ´ò¿ªËÙ¶È¡£

ÕâÀïϸ½ÚÎÊÌâ²»¾ßÌåÕ¹¿ª¡£

³ýÁËÒÔÉÏÌáµ½µÄʵ¼ùÍ⣬ÎÒÃÇ»¹×öÁ˺ܶ๤×÷£¬±ÈÈç UI ͳһ¡¢Back ¼üÀ¹½Ø¡¢¹«¹²²ÎÊý´¦Àí¡¢PG °×Ãûµ¥»úÖÆ¡¢H5 ¼à¿Ø¡¢PG ·½·¨¼à¿ØµÈµÈ£¬ÏÞÓÚÎÄÕÂÆª·ù£¬ÕâÀï²»ÔÙÒ»Ò»Áгö£¬¾´Çë¹Ø×¢ºóÐøÏà¹ØÎÄÕ¡£

Weex ÈÝÆ÷ʵ¼ù

ÔÚ Hybrid ÒÑÓÐÅäÌ×»ù´¡ÉÏ£¬51 ÐÅÓÿ¨Ñ¡ÔñÁË Weex ×÷Ϊ¿çƽ̨·½°¸£¬¾­¹ýÒ»ÄêµÄ²È¿ÓÌî¿Ó¹ý³Ì£¬Ä¿Ç°ÒѾ­ÓÐ 20+ ¸öÏîÄ¿¡¢Êý°Ù¸ö Weex Ò³ÃæÔÚÏßÉÏÎȶ¨ÔËÐУ¬²¢ÇÒ£¬Ä¿Ç° Weex ·½°¸Ç÷ÓÚ³ÉÊ죬ÒѾ­×÷Ϊ 51 ÐÅÓÿ¨¶ËÄÚÊ×ѡҵÎñ·½°¸¡£

¹²Ïí²å¼þ

ÓÉÓÚ Hybrid Á¼ºÃµÄÃæÏò½Ó¿Ú±à³ÌÌØÐÔ£¬ÔÚ½øÐÐ Weex »ù´¡½¨Éè¹ý³ÌÖУ¬ºÜ·½±ãµÄ¾Í°ÑÒÑÓеIJå¼þ¼¯³É½øÀ´£¬²¢ÇÒ¹²ÏíÒѳÁµíµÄÅäÌ×ÉèÊ©¡£

public class ENBridgeModule extends WXModule {
@JSMethod
public synchronized void send(String method, String args, JSCallback jsCallback) {
...
weexWebView = weexEngine.getWeexVirtualWebView();
EnNiuJsBridge enNiuJsBridge = weexWebView.getEnNiuJsBridge();
enNiuJsBridge.notify(pg);
}
}

×¢²á Weex µÄ Module£¬²¢ÇÒÿ¸ö Weex Engine Öлáн¨³öÒ»¸öÐéÄâ webview£¬ÓÃÓÚÇÅ½Ó JsBridge ½ø¶øµ÷Óà PluginManager ½øÐвå¼þÂß¼­·Ö·¢¡£

Weex ÈÝÆ÷ʵ¼ùÔÚ֮ǰµÄÎÄÕÂÖÐÒѾ­Ìáµ½¹ýÒ»²¿·Ö£¬¾ßÌåÇë¿´ Weex ±Ü¿ÓÖ¸ÄÏ - ÀíÂÛÆª £¬ºóÐø»¹½«ÓÐ Weex ʵ¼ùÏà¹ØµÄÎÄÕ·ųö£¬ÕâÀï²»×ö¹ý¶àƪ·ùµÄ½éÉÜ£¬¾´Çë¹Ø×¢ºóÐøÏà¹ØÎÄÕ¡£

¹¤³Ì»¯Êµ¼ù

¹¤³Ì»¯±¾ÖÊÉÏÊÇΪÁËÌá¸ßÑз¢Ð§ÂÊ¡£51 ÐÅÓÿ¨¿Í»§¶ËÍŶÓ×ÔÑеĴó·ç³µ¹ÜÀíÆ½Ì¨£¬ÓÃÓÚ App ¹ÜÀí¡¢³ÖÐø¼¯³É¡¢Àà¿â¹ÜÀí¡¢·¢°æ¹ÜÀíµÈ£¬Î§Èƿͻ§¶ËÑз¢ÉÏÏÂÓÎÁ÷³Ì£¬½¨Á¢Í³Ò»µÄ¹ÜÀíÈë¿Ú¡£

Ŀǰ£¬51 ÐÅÓÿ¨ iOS ºÍ Android ¹² 30 ¶à¸öÓ¦Óà App¡¢ 200 ¶à¸öÀà¿âÒÀÍдó·ç³µÆ½Ì¨½øÐйÜÀí¡£ÏÂÃæÖ÷Òª½éÉÜÏÂÀà¿â¹ÜÀíÏà¹ØÄÚÈÝ¡£

Àà¿â¹ÜÀí

51 ÐÅÓÿ¨Ä¿Ç°ÓÐ 100 ¶à¸ö Android Àà¿â£¬Ã¿¸öÀà¿â¶ÔÓ¦Ò»¸ö¶ÀÁ¢µÄ Gitlab ²Ö¿â¡£¹ý¶àµÄ¶ÀÁ¢×é¼þ¼°¶ÀÁ¢²Ö¿â£¬¹ÜÀíÆðÀ´ÓÐЩÂé·³¡£

ÒÀÍÐÓÚ´ó·ç³µÆ½Ì¨£¬ËùÓÐÀà¿âµÄÃû³Æ¡¢×îа汾¼°±êÇ©ÀàÐͶ¼»áչʾÔÚÁбíÒ³£¬±êÇ©ÀàÐͶÔÓ¦×é¼þ»¯¼Ü¹¹µÄ²ã´Î½á¹¹£¬°üÀ¨£º»ù´¡×é¼þ¡¢µ¥ÒµÎñ¹¦ÄÜ×é¼þ¡¢¶àÒµÎñ¹¦ÄÜ×é¼þ¡£

ÔÚÀà¿âÏêÇéÒ³£¬»áÓпâµÄ¹¦ÄÜÃèÊö¡¢groupId:artifactId ÒÀÀµÐÅÏ¢¡¢°æ±¾ÀúÊ·¼Ç¼¡¢·ÖÖ§ÐÅÏ¢¡¢README¡¢CHANGELOG¡¢¸ºÔðÈ˵ÈÏêÇéÐÅÏ¢¡£

ËùÓеÄÀà¿â¹ÜÀí¹¤×÷¶¼¿ÉÒÔÔÚ´ó·ç³µÍê³É£¬°üÀ¨Ð½¨Àà¿â¡¢Àà¿â·¢°æ¡¢²éÔÄÏà¹ØÐÅÏ¢µÈµÈ£¬Õâ´ó´óÌá¸ßÁË»ù´¡×éµÄÑз¢Ð§ÂÊ£¬½µµÍÁËÍŶӼäµÄ¹µÍ¨³É±¾¡£

²¢ÇÒ App ¹¤³ÌÖУ¬¸Ã App ËùÒÀÀµµÄËùÓÐÀà¿âÐÅϢһĿÁËÈ»£¬ÔÚ¶àÈËά»¤¡¢¶àÀà¿â²¢Ðпª·¢¡¢Àà¿âƵ·±·¢°æµÄÇé¿öÏ£¬ÒÀÀµÀà¿âÐÅÏ¢ check ¸ü¼Ó±ã½Ý¡£

°æ±¾¹ÜÀí

ÓÉÓÚÀà¿âÖ®¼äÊDzֿâ¸ôÀ룬ËùÒÔËüÃǵÄÒÀÀµ¹ØÏµÊÇ maven ÒÀÀµ£¬ËùÓÐÀà¿âµÄ aar °ü¶¼ÐèÒª·¢²¼µ½ÄÚ²¿ maven ·þÎñÆ÷ÉÏ£¬ÉÏ´«¹¤×÷ÓÉ PublishMavenPlugin Íê³É¡£

SNAPSHOT Ô¤ÀÀ°æ

¶ÔÓÚ¿ª·¢µ÷ÊԽ׶Σ¬Ã¿¸öÀà¿â×Ô´ø DemoApp ¹¤³Ì£¬ËùÒÔ²ÉÓÃÔ´ÂëÒÀÀµ£»¿ª·¢Íê³Éºó£¬Àà¿âʹÓÃSNAPSHOT°æ±¾£¨±ÈÈç 1.0.0-SNAPSHOT£©·¢²¼µ½ maven ·þÎñÆ÷£¬½ÓÈë App ¹¤³Ìºó push ´úÂë´¥·¢´ó·ç³µ´ò°ü£¬½øÐм¯³É²âÊÔ¡£ÐèÒªÐÞ¸ÄÀà¿âʱ£¬¿ÉÒÔÔÙÖØ¸´·¢²¼Ïàͬ°æ±¾µÄSNAPSHOT°æ±¾¡£

SNAPSHOT°æ±¾¿ÉÒÔÔÚ¿ª·¢Í¬Ñ§×Ô¼ºµÄ»úÆ÷ÉϽøÐдò°ü·¢²¼¡£

Õýʽ°æ

¶ÔÓÚ·¢²¼½×¶Î£¬Àà¿â±ØÐëʹÓÃÕýʽ°æ±¾·¢²¼£¬ÓÉÓÚÕýʽ°æ±¾²»¿ÉÖØ¸´·¢²¼£¬ÕâÒ²¾ÍÒªÇ󿪷¢Í¬Ñ§±£Ö¤Ã¿¸öÕýʽ°æ±¾µÄ°æ±¾ÖÊÁ¿£¬ÔÚÕýʽ·¢²¼Ç°¶¼Ó¦´ïµ½·¢²¼±ê×¼¡£

ÓÉÓÚÀà¿âÄÚ²¿Ò²´æÔÚÏ໥ÒÀÀµµÄÇé¿ö£¬ËùÒÔÔÚÀà¿âÕýʽ·¢²¼Ê±£¬²»ÔÊÐíÒÀÀµ°üº¬SNAPSHOT°æ±¾µÄÀà¿â£¬DependencyCheck¹¤×÷Ò²»áÔÚ PublishMavenPlugin Íê³É¡£

ͬʱ£¬Õýʽ°æ±¾²»ÔÊÐí¿ª·¢Í¬Ñ§ÔÚ±¾»ú´ò°ü·¢²¼£¬PublishMavenPlugin »á¼ì²âÊÇ·ñÔÚÔÆ¶Ë´ò°ü»·¾³¡£¹¦ÄÜ·ÖÖ§¾­ CodeReview ºóºÏ²¢ master ·ÖÖ§£¬È»ºó´´½¨¶ÔÓ¦°æ±¾µÄ tag£¬´¥·¢´ó·ç³µ½øÐдò°ü·¢²¼¹¤×÷£¬·¢²¼³É¹¦ºó£¬»áÓʼþ֪ͨ Android ×éͬѧ£¬²¢¸½´ø CHANGELOG¡£

ÒÀÀµ¹ÜÀí

ÒÀÀµ´«µÝ

App ¹¤³ÌϲÉÓà compile ÒÀÀµ£¬compile »á½âÎöÀà¿â maven °üÖÐµÄ pom Îļþ£¬½ø¶ø¼ä½ÓÒÀÀµ pom ÎļþÖÐÉùÃ÷µÄÆäËûÀà¿â£¬Ò²¾ÍÊÇÒÀÀµ´«µÝ¡£Õý³£Çé¿öÏ£¬ÒÀÀµ´«µÝ»á¼õÉÙ²»±ØÒªµÄÀà¿âÉùÃ÷£¬µ±³öÏÖ°æ±¾³åͻʱ»á×Ô¶¯´¦Àí merge ²Ù×÷¡£

µ«ÊÇ£¬ÔÚ¶àÈËЭͬ¹¤×÷¡¢¶àÀà¿â²¢Ðпª·¢Çé¿öÏ£¬ÊÂÇé±äµÃÓÐЩ¸´ÔÓ¡£¿¼ÂÇÒ»ÖÖÇé¿ö£¬Ó¦Óà A ÒÀÀµÀà¿â B£¬Àà¿â B ÒÀÀµÀà¿â C£¬Õý³£Çé¿öÏ£¬A ÖÐÖ»ÐèÒªÉùÃ÷ÒÀÀµ B ¼´¿É£¬C »á±»ÒÀÀµ´«µÝ¹ýÈ¥¡£Èç¹û C ÖиıäÁË·½·¨Ç©Ãû£¬²¢ÇÒÔÚÓ¦Óà A ÖÐÏÔʾÉùÃ÷ÒÀÀµ C£¬±àÒëʱºÍÔËÐÐʱ»á·Ö±ð³öÏÖʲôÇé¿ö£¿ÔÚ±àÒëʱûÓÐÎÊÌ⣬Õý³£±àÒëͨ¹ý£»ÔÚÔËÐÐʱ£¬µ±ÔËÐе½Àà¿â B ÖÐʹÓõÄÀà¿â C Öб»¸Ä±äÇ©ÃûµÄ·½·¨Ê±£¬App crash¡£ÕâÊÇÒòΪ£¬maven ÔÚ´¦ÀíÀà¿â°æ±¾ merge ʱ£¬»á½« C Éý¼¶µ½×î¸ß°æ±¾£¬¶ø´Ëʱ B ÖÐÒѾ­±àÒëºÃµÄ class ÖÐʹÓõϹÊÇÀϰ汾 C Öеķ½·¨¡£

ΪÁË´¦ÀíÕâ¸öÎÊÌ⣬ÎÒÃÇʹÓà APICheckGradlePlugin ÔÚ±àÒëʱ½øÐÐ check ²Ù×÷£¬µ±·¢ÏÖ±»µ÷Óõķ½·¨ÕÒ²»µ½Ê±£¬Ö÷¶¯±¨´í£¬½«´íÎóÌáǰ±©Â¶ÔÚ±àÒëÆÚ£¬¶ø·ÇÔÚÔËÐÐʱ¡£Í¬Ê±ÄÚ²¿Ç¿µ÷ API ½Ó¿ÚµÄÏòϼæÈÝÐÔ£¬²»Óõķ½·¨±ê¼ÇΪ·ÏÆú£¬¶ø·ÇÖ±½ÓÐÞ¸ÄÆä·½·¨Ç©Ãû»òɾ³ý·½·¨¡£

APICheckGradlePlugin ºËÐÄ´úÂëÈçÏ£º

try {
c.getClassPool().get(callClassName)
isClassNotFound = false
m.getMethod()
} catch (NotFoundException e) {
if (isClassNotFound) {
dealException(String.format(" ÔÚ %s ÀàÖÐµÄµÚ %d ÐÐÊÇÓõ½µÄ %s À಻´æÔÚ ", className, line, callClassName))
} else {
dealException(String.format(" ÔÚ %s ÀàÖÐµÄµÚ %d ÐÐÊÇÓõ½µÄ %s ÀàµÄ %s ·½·¨²»´æÔÚ ", className, line, callClassName, methodName))
}
}

¶à module ·¢²¼

ÉÏÎÄÖÐÌáµ½£¬ÔÚ¶àÒµÎñ×é¼þ¿â¹¤³ÌÖлáÓжà¸ö module£¬Ò»¸ö api module£¬Ò»¸ö imp module£¬ÔÚʹÓà DemoApp ±àÒëµ÷ÊÔʱ²ÉÓÃÔ´ÂëÒÀÀµ£¬ imp module ÒÀÀµ api module£¬App ÒÀÀµ imp module£¬ÕâÑùÔÚ´ò°üÉÏ´« maven ʱ£¬»á³öÏÖÎÞ·¨Ò»ÆðÉÏ´«µÄÎÊÌ⣻²¢ÇÒÎÒÃÇҲҪȷ±£ api ºÍ imp µÄ°æ±¾ºÅÒ»Ö¡£ÎªÁ˽â¾öÕâ¸öÎÊÌ⣬ÐèÒªÔÚÉÏ´«Ê±¶¯Ì¬ÐÞ¸ÄËûÃÇµÄ pom Îļþ£¬´úÂëÈçÏ£º

modifyPom { pom ->
pom.dependencies.findAll { dep -> dep.groupId == rootProject.name }.collect { dep ->
dep.groupId = pom.groupId = rootProject.groupId
dep.version = pom.version = rootProject.sdkVersion
}
}

Ò»¼ü´´½¨ÏîÄ¿

Ä£°å¹¤³Ì

ÓÉÓÚÿ¸öн¨×é¼þÀà¿âµÄ App ¹¤³ÌÐèÒªÔËÐÐʱ»·¾³»ù±¾Ïàͬ£¬°üÀ¨ÍøÂç»·¾³¡¢µ÷ÊÔ»·¾³¡¢gradle ÅäÖá¢Í¨ÓÃÒÀÀµÅäÖõȵȣ¬ÕâÐ©ÖØ¸´ÐԵŤ×÷×îºÃ·ÅÔÚÒ»Æðͳһ´¦Àí¡£Îª´Ë£¬ÎÒÃÇ´´½¨ÁË×é¼þ¿âµÄÄ£°å¹¤³Ì£¬Ö»ÐèÒª clone ÏÂÀ´Ä£°å²Ö¿â£¬È»ºóÐÞ¸ÄһЩ´úÂë¼´¿É¿ª·¢ÐèÇó´úÂë¡£

Ò»¼ü´´½¨Àà¿â

µ«ÊÇ£¬ÕâÖÖ·½Ê½ÒÀÈ»Óкܶ๲ÐԵŤ×÷£¬±ÈÈç clone ´úÂë¡¢ÐÞ¸ÄÀà¿âÃû¡¢ÐÞ¸Ä groupId:artifactId¡¢´´½¨ÐµÄÀà¿â²Ö¿â¡¢push ´úÂë¡¢ÔÚ´ó·ç³µÖÐн¨Àà¿â¹ØÁª²Ö¿âµØÖ·µÈµÈ²Ù×÷¡£ÕâЩ¹²ÐÔ²Ù×÷ÈÔÈ»¿ÉÒÔÓûúÆ÷À´²Ù×÷£¬ËùÒÔÎÒÃÇÔÚ´ó·ç³µÐ½¨Àà¿âÕâÒ»²½ÖУ¬°ÑÇ°ÃæËùÓÐÒª×öµÄÊÂÇéÈ«²¿×öÍֻ꣬ÐèÒªÔÚн¨Àà¿âʱÌîÈë±ØÒªµÄ²ÎÊý£¬Ò»¼ü¾Í¿ÉÒÔ´´½¨³ö¿ÉÓõÄÀà¿âÏîÄ¿¡£

Ò»¼ü´´½¨Ó¦ÓÃ

Ëæ×ÅÎÒ˾ App Ô½À´Ô½¶à£¬Ð½¨ App µÄÅäÖÃͬÑùÃæÁÙÀà¿â¸Õ¿ªÊ¼Ê±µÄÀ§ÈÅ£¬Ð½¨ App Óëн¨Àà¿â±¾ÖÊÉÏÊÇÒ»ÑùµÄ£¬Ö»²»¹ýËùÐè²ÎÊý¸ü¶àһЩ£¬²¢ÇÒÕâЩ²ÎÊý¿ÉÄܲ»¹Ì¶¨£¬ÓÐЩ App ÐèÒªÓÐЩ App ²»ÐèÒª¡£²Î¿¼Àà¿â£¬ÎÒÃÇÌáÈ¡¹²ÐÔ²Ù×÷£¬´´½¨ÁË App µÄÄ£°å¹¤³Ì£¬²¢ÇÒ¶Ô½Ó´ó·ç³µ£¬Ò»¼ü¼´¿É´´½¨³ö App ¹¤³Ì£¬ÄÇЩ¿É±äµÄ²ÎÊýÁôÔÚÄ£°å¹¤³ÌÖа´ÐèÊÖ¶¯ÅäÖá£

Ä£¿é¸ºÔðÈË

ÔÚ×é¼þ»¯³õ²½¿ªÊ¼Ê±£¬ÎÒÃǵÄÿ¸öÄ£¿é¶¼Óй̶¨µÄ¸ºÔðÈË£¬Ã¿¸öÈËÊÖÉ϶¼Óй̶¨µÄÈô¸É¸öÄ£¿é£¬ÔðÈÎÈ˶Ô×Ô¼º¸ºÔðµÄÄ£¿é¸ºÔð¡£

µ«ÊÇËæ×Å×éÄÚµÄÈËÔ±±ä¶¯ºÍÒµÎñ±ä¶¯£¬µ¼ÖÂһЩģ¿éƵ·±Ò×Ö÷£¬Ò»Ð©Ä£¿éµÄÎĵµ³¤ÆÚ´¦ÓÚ²»±»Î¬»¤×´Ì¬£¬README ºÍ CHANGELOG ³£ÄêʧÐÞ¡£

ÒÀÀµ´ó·ç³µµÄÀà¿â¹ÜÀí£¬ÖØÐÂΪÿ¸öÄ£¿éÖ¸¶¨¸ºÔðÈË£¬²¢ÇÒÊáÀíÏÖ´æÀà¿âÄÄЩȱʧÎĵµ£¬½øÐв¹È«¡£×Ô´Ó´ó·ç³µ×Ô¶¯³­ËÍÀà¿â·¢°æ CHANGELOG ºó£¬CHANGELOG ²»È«µÄÇé¿öÒ²´ó·ù¸ÄÉÆ£¬»ù±¾Ã¿¸öеİ汾¶¼»á¸½Éϸð汾Ëù×öÐ޸ġ£

ͬʱ£¬ÎÒÃÇҲǿµ÷ CodeReview »úÖÆ£¬Ã¿¸öÄ£¿éÔÚÌá²âǰ½øÐÐ CodeReview£¬Ç¿ÖÆ merge request ±ØÐëÓÐÈ˵ãÔÞºó²ÅÄܺϲ¢ master ·ÖÖ§µÈµÈ´úÂëÉó²é»úÖÆ¡£Î´À´£¬ÎÒÃÇ¿ÉÄÜ»á½øÒ»²½Êµ¼ù¸ºÔðÈË backup ·½°¸£¬Ö÷¸±¸ºÔðÈËÏ໥ review£¬À©´ó´ó¼Ò¼¼ÊõÊÓÒ°µÄͬʱ£¬¿ÉÒÔ½øÒ»²½Ìá¸ß´ó¼ÒµÄÖ÷ÈËÎÌÒâʶ¡£

×ܽá

ºÃµÄ¼Ü¹¹²»ÊÇÉè¼Æ³öÀ´µÄ£¬¶øÊÇÑݽø³öÀ´µÄ¡£±¾Îļòµ¥²ûÊöÁË 51 ÐÅÓÿ¨ Android ¼Ü¹¹ÑݽøµÄһЩʵ¼ù¾­Ñ飬ͬʱÎÒÃǼáÐż¼Êõ·½°¸Ã»ÓÐ×îÓÅ½â£¬ÖØÒªµÄÊÇҪѡÔñÑ¡ÔñÊʺÏ×Ô¼ºµÄ¡£ÍÑÀëËù´¦»·¾³ºÍÎÊÌâ±¾Éí̸¼¼Êõ·½°¸£¬¶¼½«²»Äܵõ½ÊʺÏ×ÔÉíµÄ¿ª·¢¼Ü¹¹¡£Í¬Ê±£¬ÎÒÃÇÒ²Ó¦µ±ÎüÈ¡ºÍ½è¼øÒµ½çÓÅÐãµÄ¼Ü¹¹ºÍÉè¼ÆÀíÄ²¢½«Æä¸ù¾Ý×ÔÉíÊÊÓó¡¾°¼ÓÒÔ¸ÄÔ죬ÔÚÀíÂÛºÍʵ¼ùÖÐÖð½¥½»ÌæÌ½Ë÷Ñݽø¡£

µ±È»£¬ÎÒÃÇĿǰËùʹÓõļܹ¹ÒÀÈ»´æÔÚһЩÎÊÌ⣬±ÈÈç×é¼þ²ð·Ö²»ÍêÈ«¡¢Ö÷¹¤³ÌÒµÎñÈÔÈ»ºÜ¶à¡¢CodeReview »úÖÆ²»½¡È«¡¢´úÂëɨÃè²»¹»Ñϸñ¡¢Ò»Ð©×é¼þ¿âûÓÐÑϸñ°´ÕÕ api ¹¤³ÌÀ´¸ÄÔ졢һЩÀϵÄ×é¼þÒÀȻûÓÐ api module µÈµÈÎÊÌâ¡£ÎÒÃÇÒ²Ó¦¸Ã¿´µ½£¬ÕýÊÇÒòΪÕâЩʵ¼ÊµÄÎÊÌâÔÚÍÆ¶¯ÎÒÃǽøÐм¼Êõ¸ÄÔ죬¼Ü¹¹Éý¼¶¡£Í¬Ê±£¬ÎÒÃÇÒ²ÒªÉóÊÓÐÐÒµÄÚ´óµÄ·½Ïò£¬½ô¸ú¼¼ÊõÇ÷ÊÆ£¬Ö÷¶¯Óµ±§±ä»¯£¬±Ï¾¹¼¼ÊõÊÀ½çΨһ²»±äµÄ£¬±ãÊDZ仯¡£

   
2629 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

ÆóÒµ¼Ü¹¹¡¢TOGAFÓëArchiMate¸ÅÀÀ
¼Ü¹¹Ê¦Ö®Â·-ÈçºÎ×öºÃÒµÎñ½¨Ä££¿
´óÐÍÍøÕ¾µçÉÌÍøÕ¾¼Ü¹¹°¸ÀýºÍ¼¼Êõ¼Ü¹¹µÄʾÀý
ÍêÕûµÄArchimateÊÓµãÖ¸ÄÏ£¨°üÀ¨Ê¾Àý£©
Ïà¹ØÎĵµ

Êý¾ÝÖÐ̨¼¼Êõ¼Ü¹¹·½·¨ÂÛÓëʵ¼ù
ÊÊÓÃArchiMate¡¢EA ºÍ iSpace½øÐÐÆóÒµ¼Ü¹¹½¨Ä£
ZachmanÆóÒµ¼Ü¹¹¿ò¼Ü¼ò½é
ÆóÒµ¼Ü¹¹ÈÃSOAÂ䵨
Ïà¹Ø¿Î³Ì

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù