±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚ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仯¡£ |