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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
AndroidÖÐÈÈÐÞ¸´¿ò¼ÜRobustÔ­Àí½âÎö+²¢½«¿ò¼Ü´úÂë´Ó¡±±ÕÔ´¡±±ä³É¡±¿ªÔ´¡±(ÏÂÆª)
 
À´Ô´£ºÍøÂç ·¢²¼ÓÚ£º 2017-1-5
  1931  次浏览      27
 

Ò»¡¢»Ø¹Ë¿ò¼ÜÔ­Àí

±¾Æª¼ÌÐøÀ´¿´ÈÈÐÞ¸´¿ò¼ÜRobustÔ­Àí£¬ÔÚ֮ǰµÄһƪÎÄÕÂÖÐÒѾ­Ïêϸ½²½âÁË£ºRobust¿ò¼ÜÔ­Àí£¬ÒòΪÕâ¸ö¿ò¼Ü²»ÊÇ¿ªÔ´µÄ£¬ËùÒÔͨ¹ý¹Ù·½¸ø³öµÄÔ­Àí½éÉÜ£¬Õ¦ÃÇ×Ô¼ºÄ£ÄâÁ˰¸ÀýºÍ¿ò¼ÜÂß¼­µÄ¼òµ¥Êµ¼ù¡£×îºóÔÚͨ¹ý·´±àÒëÃÀÍÅapp½øÐÐÑéÖ¤Õ¦ÃǵÄÂß¼­ÊµÏÖÊÇ·ñ´óÖ²»²î¡£×îÖÕÈ·¶¨Êµ¼ùµÄÂß¼­´óͬСÒì¡£µ«ÊÇÔÚÉÏһƪÎÄÕÂĩβ¶à´ÎÇ¿µ÷ÁË£¬Õâ¸ö¿ò¼ÜÎüÒýÎÒÑо¿µÄ²»ÊÇËûÈÈÐÞ¸´¼¼Êõ£¬¶øÊÇËûÓÐÒ»¸ö¼¼Êõµã£¬¾ÍÊÇÈçºÎÔÚ±àÒëÆÚ¸øÃ¿¸öÀàÿ¸ö·½·¨¶¼¼ÓÉÏÐÞ¸´¹¦ÄÜ´úÂ룬¶ÔÓÚÉϲ㿪·¢´úÂëÊÇ͸Ã÷µÄ¡£ÒòΪ´Ó֮ǰ°¸Àý¿ÉÒÔ¿´µ½£¬Èç¹û·½·¨Ã»ÓÐÐÞ¸´¹¦ÄÜ´úÂ룬ÄÇô´Ë·½·¨¾ÍɥʧÁËÐÞ¸´¹¦ÄÜ£¬ÔÙÀ´¿´Ò»ÏÂÕâ¸ö¿ò¼ÜµÄÔ­Àíͼ£¬°üÀ¨±àÒëÆÚ¶¯Ì¬²åÈë´úÂëºÍ¼ÓÔØÐÞ¸´°üÂß¼­£º

¶þ¡¢×Ô¶¯²åÈëÔ­Àí·ÖÎö

ÄÇôÏÂÃæ¾ÍÀ´Ïêϸ½éÉܱàÒëÆÚÕâ¸ö¿ò¼ÜÊÇÈçºÎ½«ÏîÄ¿ÖÐÿ¸öÀàÿ¸ö·½·¨¶¼²åÈëÒ»¶ÎÐÞ¸´´úÂë¡£ÔÚ½éÉÜÕâ¸ö֪ʶµã£¬¿ÉÒÔÏÈÈ¥Á˽âһϣ¬JavaÖÐÈçºÎÀûÓÃasm°ü²Ù×÷×Ö½ÚÂëÂß¼­¡£»òÕß¿ÉÒÔ¿´Ò»ÏÂÕâÆªÎÄÕ£ºAndroidÖж¯Ì¬²åÈë´úÂ빤¾ßicodetools ÕâÆªÎÄÕÂÖÐÒѾ­Ïêϸ½éÉÜÁËÈçºÎÔÚÿ¸öÀàµÄÿ¸ö·½·¨ÖвåÈëÒ»¶Î´úÂë¡£Æäʵ±¾ÎľÍÊÇ»ùÓÚÕâ¸ö¼¼ÊõÀ´½øÐвÙ×÷µÄ¡£²»¹ýÕâÀï²åÈëµÄ´úÂë±ÈÄǸöÒª¸´ÔÓ¡£²»¶à½âÊÍÁË£¬Ö±½ÓÀ´¿´Ôõô²Ù×÷¡£

ΪÁËÑÝʾºÍÌî¿Ó·½±ã£¬Õ¦ÃÇ×îºÃ¿ªÊ¼Ê¹ÓÃÒ»¸ö¼òµ¥µÄ°¸ÀýÀ´£¬ÒòΪµÚÒ»´ÎË­¶¼±£Ö¤²»ÁËÄÜÒ»·«·ç˳²åÈë³É¹¦¡£ËùÒÔÕâÀï¾ÍÓÃÒ»¸ö¼òµ¥µÄÀàÎļþ½øÐм´¿É¡£ÕâÀﶨÒåÒ»¸ö¼òµ¥µÄÀàPerson£¬ÄÚ²¿¶¨Òå¶à¸ö²»Í¬ÀàÐ͵ķ½·¨£¬°üÀ¨·½·¨µÄ·µ»ØÖµ£¬²ÎÊý£¬ÀàÐ͵ȡ£ÕâÒ²ÊÇΪÁ˺óÐø¼ì²âÎÒÃDzåÈë´úÂëµÄ¸÷ÖÖÇéÐÎÊÇ·ñ¶¼Äܳɹ¦¡£ÎÒÃǵÄÄ¿µÄÒ²Ö»ÓÐÒ»¸ö£¬¾ÍÊÇÈçºÎ¶¯Ì¬¸øPersonÕâ¸öÀàÖÐÿ¸ö·½·¨²åÈë֮ǰÌáµ½µÄ¶¯Ì¬´úÂ룺

if(changeQuickRedirect != null){
if(PatchProxy.isSupport(new Object[]{xxx,xxx,...}, this, changeQuickRedirect, false)){
return ((XXX) PatchProxy.accessDispatch(new Object[0], this, changeQuickRedirect, false));
}
}

ÔÚÀàÖвåÈëÒ»¸ö¾²Ì¬±äÁ¿£º

public static ChangeQuickRedirect changeQuickRedirect;

Õ¦ÃǶ¨ÒåµÄPersonÀàÈçÏ£º

Õâ¸öÀà·Ç³£¼òµ¥£¬¶¨ÒåÁ˺ܶ಻ͬÀàÐ͸ñʽµÄ·½·¨£¬ÏÂÃæÎÒÃǾÍÒªÀ´±àд´úÂ룬×Ô¶¯¸øÃ¿¸ö·½·¨×¢ÈëÄǶÎÐÞ¸´´úÂëÒÔ¼°¸øÕâ¸öÀàÌí¼ÓÒ»¸ö¾²Ì¬±äÁ¿¡£ÓÐÁË֮ǰµÄÄÇÆªÎÄÕ£ºAndroidÖж¯Ì¬²åÈë´úÂ빤¾ßicodetools£¬ÎÒÃDzÙ×÷¾ÍºÜ¼òµ¥ÁË£¬ÕâÀïÒÀÈ»ÐèÒª½èÖúasm°üºÍEclipseµÄ²å¼þBytecode£¬Õ¦ÃÇÖ±½ÓÀûÓÃBytecode²å¼þ²é¿´ÄǶδúÂëµÄasm¶ÔÓ¦µÄ´úÂ룬²»¹ýÕâÀïÐèҪעÒ⣬ÿ¸ö·½·¨²åÈëµÄ´úÂ벻ͬ£¬ÏÈÀ´¿´ÐÞ¸´´úÂëµÄÁ½¸öÖØÒª·½·¨£ºisSupportºÍaccessDispatch£¬ÕâÁ½¸ö·½·¨¶¼ÓÐËĸö²ÎÊý£º

µÚÒ»¸ö²ÎÊý£ºObjectÊý×飬´æ·ÅµÄÊÇÕâ¸ö·½·¨µÄËùÓвÎÊýÖµ£¬¿´µ½Èç¹ûÊÇ»ù±¾ÀàÐÍÐèÒª×ö·âÏäת»¯¡£

µÚ¶þ¸ö²ÎÊý£ºµ±Ç°·½·¨ËùÊôµÄ¶ÔÏó£¬Èç¹û·½·¨ÊÇstaticÀàÐ;ÍÊÇnull£¬Èç¹û·½·¨ÊÇ·ÇstaticµÄ¾ÍÊÇthis¡£

µÚÈý¸ö²ÎÊý£ºÐÞ¸´½Ó¿ÚÀàÐÍ£¬Ò²¾ÍÊÇÎÒÃÇÐèÒª²åÈëµÄ¾²Ì¬±äÁ¿changeQuickRedirect¡£

µÚËĸö²ÎÊý£º·½·¨ÊÇ·ñΪstaticÀàÐÍ¡£

ËùÒÔ´ÓÉÏÃæÕâËĸö²ÎÊý£¬¾ÍÖªµÀÎÒÃÇÔÚ²åÈë´úÂëʱÐèÒª×öÈçÏ´¦Àí£¬Ö÷Òª°üÀ¨ÒÔϼ¸µã£º

1¡¢Ã¿¸ö·½·¨µÄ²ÎÊý²»Í¬£¬ÒòΪÎÒÃÇ¿´µ½²åÈëµÄÐÞ¸´´úÂëµÄisSupportºÍaccessDispatch·½·¨µÄµÚÒ»¸ö²ÎÊý¶¼ÊÇÒ»¸öObjectÊý×飬Ҳ¾ÍÊÇÕâ¸ö·½·¨µÄËùÓвÎÊý¡£

2¡¢·½·¨ÀàÐÍÉùÃ÷²»Í¬£¬Èç¹ûÒ»¸ö·½·¨ÊÇstaticÀàÐ͵ģ¬isSupportºÍaccessDispatch·½·¨µÄµÚ¶þ¸ö²ÎÊýÊÇnull£¬ÒÔ¼°×îºóÒ»¸ö²ÎÊýÊÇtrue£¬·ñÔò¾ÍÊÇthisºÍfalseÖµ¡£

3¡¢·½·¨µÄ·µ»ØÖµ²»Í¬£¬¶ÔÓÚ·½·¨ÊÇ·ñÓзµ»ØÖµÐèÒª×öÌØÊâ´¦Àí£¬ÒÔ¼°·½·¨·µ»ØÖµÀàÐͲ»Í¬Ò²Òª×ö´¦Àí¡£

Ö÷ÒªÊÇÕâÈýµã£¬µ«ÊÇʵ¼Ê²Ù×÷»¹ÓкܶàСµÄϸ½ÚÎÊÌ⣬±ÈÈç²ÎÊýÈç¹ûÊÇ»ù±¾ÀàÐÍ£¬Õ¦ÃÇ»¹µÃ×ö·âÏä²Ù×÷£¬½«Æä±ä³É¶ÔÏóÀàÐÍ¡£·µ»ØÖµÈç¹ûÊÇ»ù±¾ÀàÐÍ£¬»¹µÃ×ö²ðÏä²Ù×÷£¬°Ñ¶ÔÏóÀàÐͱä³É»ù±¾ÀàÐÍ¡£

Èý¡¢×Ô¶¯²åÈë°¸Àý

ÉÏÃæ·ÖÎöÍêÁË»ù±¾Ô­Àí£¬ÏÂÃæÖ±½ÓÀ´²Ù×÷£¬¿ªÊ¼ÎÒÃÇÓÃÒ»¸ö¼òµ¥µÄ·½·¨×ö°¸Àý£¬È»ºóÊÖ¶¯µÄÏȲåÈëÒ»¶ÎÐÞ¸´´úÂ룬ÔÚ½èÖúBytecode²å¼þ²é¿´Õâ¶Î´úÂë¶ÔÓ¦µÄasm´úÂ룺

ͨ¹ýasm´úÂ룬ÎÒÃÇÐèҪעÒâµÄ¾ÍÊDzÎÊýÊý×é¹¹½¨£¬ºÍ·µ»ØÖµ×ª»¯£º

ÏÂÃæÎÒÃÇ¿ÉÒÔ°ÑÕâ¶Îasm´úÂëÖ±½Ó¿½±´µ½Java´úÂëÖУ¬ÔÚÕâ¸ö¹ý³ÌÖУ¬ÎÒÃÇÐèÒª¶ÔÄǸö²ÎÊýÊý×é¹¹½¨×ö´¦ÀíÁË£¬ÒòΪÏÖÔÚ·½·¨µÄ²ÎÊý¸öÊýÊDz»È·¶¨µÄ£¬ËùÒÔÕ¦Ãǵñàд¶¯Ì¬¹¹½¨´úÂ룺

Õâ¶Î´úÂë¾ÍÊÇÍê³ÉÁËÐÞ¸´´úÂëµÄ¶¯Ì¬²åÈ룬Âß¼­ºÍ˳ÐòºÜÇåÎú£¬Ê×Ïȵù¹Ôì³ö·½·¨µÄËĸö²ÎÊý£¬ÆäÖÐ×îÖØÒªµÄ¾ÍÊǵÚÒ»¸ö²ÎÊýObjectÊý×éÁË¡£

µÚÒ»¸ö²ÎÊý£º¹¹½¨·½·¨²ÎÊýÊý×é

ÔÚÕâÀﻹµÃÇø·Ö£¬Ò»¸ö·½·¨ÊÇ·ñΪÓвÎÊýºÍÎÞ²ÎÊýµÄÇé¿ö¡£×öÌØÊâ´¦Àí£¬È»ºó×îºËÐĵĵط½¾ÍÊÇ´´½¨¶à¸ö²ÎÊýÊý×éÀàÐ͵ĴúÂëÁË£º

ÉÏÃæ´úÂ룬¾Í¿ªÊ¼´´½¨Ò»¸ö·½·¨µÄËùÓвÎÊýÀàÐÍÊý×飬ÐèÒª×öÒÔϼ¸¸öÌØÊâ´¦Àí£º

1¡¢ÒòΪ×Ö½ÚÂëÖ¸ÁîÖг£Á¿ÖµÖ¸ÁîÊÇOpcode.ICONST_0µ½Opcode.ICONST_5µÄ£¬ËùÒÔÈç¹ûÒ»¸öÊý×é´óС³¬¹ýÕâ¸öÖ¸ÁΧÁË£¬¾ÍµÃ½èÖúOpcode.BIPUSH½øÐвÙ×÷ÁË¡£

2¡¢Åжϵ±Ç°·½·¨ÊÇ·ñΪstaticÀàÐ͵ģ¬ÒòΪÕâ¸öÀàÐ͹ØÏµµ½ºóÃæÈ¡·½·¨¾Ö²¿²ÎÊýµÄË÷ÒýÖµ£¬ÎÒÃÇÖªµÀ·ÇstaticÀàÐ͵ķ½·¨ÓÐÒ»¸öÒþº¬µÄ²ÎÊýthis£¬ËùÒÔÕâÀïÒª×öÒ»´Î¾Ö²¿²ÎÊýË÷ÒýÖµÅжϡ£staticÀàÐÍ´Ó0¿ªÊ¼£¬·ÇstaticÀàÐÍ´Ó1¿ªÊ¼¡£

3¡¢ÔÚ½øÐÐÊý×éÊý¾ÝÌî³äµÄʱºò£¬ÒòΪÐèҪͨ¹ýË÷ÒýÖµ·ÃÎÊ£¬ÕâÀïÒÀȻҪ×öÌØÊâ´¦Àí£¬³¬¹ý5ͨ¹ýOpcode.BIPUSHÖ¸Áî½øÐвÙ×÷ÁË¡£

4¡¢¶ÔÓÚ²ÎÊý´¦ÀíÐè񻂿·Ö»ù±¾ÀàÐͺͶÔÏóÀàÐÍ£¬ÒòΪËûÃDzÉÓõÄLOADÖ¸Áͬ£¬Ò»°ã»ù±¾ÀàÐÍÖÐlongÊÇLLOAD£¬doubleÊÇDLOAD£¬floatÊÇFLOAD£¬ÆäËû»ù±¾ÀàÐͶ¼ÊÇILOAD£»¶ÔÓÚ¶ÔÏóÀàÐͶ¼ÊÇALOAD¡£

5¡¢¶ÔÓÚ²ÎÊýÖУ¬Èç¹ûÒ»¸ö²ÎÊýµÄÇ°ÃæÒ»¸ö²ÎÊýÊÇlong£¬doubleÀàÐÍ£¬Òª¶Ô²ÎÊýË÷Òý×öÌØÊâ´¦Àí£¬ÕâÀï²ÂÏë¿ÉÄܺÍÕâÁ½ÖÖÀàÐÍÕ¼ÓõÄ×Ö½ÚÊýÓйأ¬±Ï¾¹ËûÃǶ¼ÊÇÕ¼ÓÃ8¸ö×Ö½Ú¡£¶øÆäËûÀàÐͶ¼ÊÇÔÚ4¸ö×Ö½ÚÒÔÄڵġ£µ±Óöµ½ÊÇÕâÖÖÁ½ÖÖÀàÐÍ£¬²ÎÊýË÷ÒýÖµ¾ÍµÃ¼ÓÒ»¡£

¿´µ½ÕâÀïÓÐÕâô¶à¸ö¿Ó£¬¿ÉÒÔÏëµ½ÎÒÔÚÌî¿ÓµÄʱºò¶àôʹ¿à£¬µ«ÊÇÌî¿Ó·½·¨Ò²ÊǺܼòµ¥µÄ£¬¿ÉÒÔÏÈÄ£ÄⶨÒåÕâÑùµÄ·½·¨£¬È»ºó²é¿´Ëû¶ÔÓ¦µÄasm´úÂë¼´¿É£º

Õâ¸ö·½·¨¾Í°üº¬¶à¸ö²ÎÊý£¬¶øÇÒËùÓÐÌØÊâÇé¿ö¶¼°üº¬ÁË£¬²é¿´asm´úÂë¼´¿É£º

ÕâÑùÕ¦ÃǾͰѿӸøÌîÍêÁË¡£¼ÌÐø¿´ÉÏÃæµÄ´úÂ룬ÔÚ´¦ÀíÌØÊâµÄ»ù±¾ÀàÐÍ£¬ÒòΪÉÏÃæÌáµ½»ù±¾ÀàÐͳýÁËLOADÖ¸Áî²»Ò»Ñù£¬»¹ÓоÍÊÇÐèÒª½øÐжÔÏó·âÏä²Ù×÷£¬´Óasm´úÂëÖÐÒ²¿ÉÒÔ¿´µ½£¬¿´¿´¾ßÌå·½·¨£º

¶ÔÓÚ²»Í¬»ù±¾ÀàÐÍ×öÁËÌØÊâ´¦Àí£¬ÏÂÃæ¿´Ò»ÏÂbooleanÀàÐ͵Ĵ¦Àí£º

ÆäËû»ù±¾ÀàÐͶ¼´óÖÂÏàͬÁË£¬ÕâÀï²»ÔÙ½âÊÍÁË¡£

µÚ¶þ¸ö²ÎÊý£ºµ±Ç°·½·¨ËùÊôµÄÀà¶ÔÏó

µ½ÕâÀï¾Í¿´ÍêÁË£¬ÐÞ¸´·½·¨µÄµÚÒ»¸ö²ÎÊý£º¶ÔÏóÊý×é¹¹½¨£¬Ò²ÊÇÕû¸ö¹ý³ÌÖеĺËÐÄ£¬Ò²ÊÇ×Ôӵġ£Õ¦ÃÇÔڻعýÍ·¼ÌÐø¿´£¬µÚ¶þ¸ö²ÎÊý£º·½·¨µ±Ç°ËùÊôµÄ¶ÔÏó

ÕâÀïÐèÒª×öÅжϾÍÊÇ·½·¨ÊÇ·ñΪstaticÀàÐÍ£¬Èç¹ûÊÇstaticÀàÐÍÖ±½Ó´«Èënull¼´¿É£¬Èç¹ûÊÇ·ÇstaticÀàÐ;ÍÒªÖ±½Ó´«ÈëÒþº¬µÄµÚÒ»¸ö²ÎÊýthisÁË¡£

µÚÈý¸ö²ÎÊý£º¾²Ì¬±äÁ¿changeQuickRedirect

Õâ¸ö²ÎÊý¾Í¼òµ¥ÁË£¬Ö±½ÓÓÃÀàµÄ¾²Ì¬±äÁ¿changeQuickRedirect¼´¿É£º

µÚËĸö²ÎÊý£º·½·¨ÊÇ·ñΪstaticÀàÐÍ

ÓÐÁËÉÏÃæËĸö²ÎÊýÖ®ºó£¬ÏÂÃæ¾Í¿ÉÒÔ¿ªÊ¼µ÷ÓÃÁËÐÞ¸´µÄÁ½¸ö·½·¨ÁË£¬Ò»¸öÊÇisSupport£º

Õâ¸ö·½·¨·µ»ØÖµÊÇbooleanÀàÐÍ£¬Ò²¾ÍÊÇÔÚifÓï¾äÖÐÖ´ÐУ¬¿ÉÒÔÓÃIFEQÖ¸Áî¼´¿É¡£²»¹ýÕâÀﻹÓÐÒ»¸ö¿Ó£¬¾ÍÊÇÈç¹ûÊÇBytecode²å¼þÖ±½ÓµÃµ½µÄasm´úÂ룬·½·¨µÄ²ÎÊýÇ©ÃûµÚÒ»¸öÊÇLjava/lang/Object;£¬Õâ¸öÃ÷ÏÔ²»¶ÔµÄ£¬ÒòΪÎÒÃÇÖªµÀµÚÒ»¸ö²ÎÊýÊÇÊý×éÀàÐÍ£¬ËùÒÔÐèÒªÊÖ¶¯¸Ä³É[Ljava/lang/Object;£¬Õâ¸ö¿ÓÕÒÁ˺þòÅÌî³É¹¦ÁË¡£

È»ºó¾ÍÊÇaccessDispatch·½·¨µ÷Óã¬ÔÚµ÷ÓÃÕâ¸ö·½·¨Ö®Ç°£¬ÎÒÃÇÒÀÈ»ÐèÒª¹¹ÔìËĸö²ÎÊý£¬²»¹ýÕâ¸ö¹¹Ôì¹ý³ÌºÍ֮ǰÊÇһģһÑùµÄ¡£Ö±½Ó³­¹ýÀ´¾Í¿ÉÒÔÁË£¬Ö÷ÒªÊÇÖ´ÐÐÍêÕâ¸ö·½·¨Ö®ºóµÄÊ£¬ÓÖÓкöà¿Ó£º

ÕâÀï¿´µ½£¬ÎÒÃÇÓÖµÃÏñÉÏÃæ¹¹ÔìÄǸö¸´Ôӵķ½·¨²ÎÊýÊý×éÒ»ÑùÌî¿ÓÁË¡£ÕâÀïÐèÒª×öÕ⼸¸öÌØÊâ´¦Àí£º

1¡¢·½·¨ÊÇ·ñÓзµ»ØÖµ£¬Èç¹ûûÓзµ»ØÖµ£¬Ö±½Óµ÷ÓÃOpcode.RETURNÖ¸Áî¼´¿É¡£

2¡¢·½·¨·µ»ØÖµÀàÐÍÈç¹ûÊÇ»ù±¾ÀàÐÍÐèÒªÌØÊâ´¦Àí¡£

3¡¢·½·¨·µ»ØÖµÀàÐÍÊǶÔÏóÀàÐÍ£¬ÐèÒª×öÀàÐÍÇ©Ãû´¦Àí£¬Èç¹ûÊÇÊý×éÀàÐͲ»×ö´¦Àí£¬Èç¹ûÊÇ·ÇÊý×éÀàÐÍÐèҪȥ³ýÇ°ÃæµÄL×Ö·û£¬ÒÔ¼°ºóÃæµÄ·ÖºÅ×Ö·û£¬²»È»ºóÃæÔÚʹÓÃdxÃüÁîת»¯jarµÄʱºò±¨´í¡£

ÏÂÃæÀ´¿´¿´Èç¹û·µ»ØÖµÊÇ»ù±¾ÀàÐÍ£¬ÎÒÃÇÐèÒª½øÐвðÏä²Ù×÷£¬¼´°Ñ¶ÔÏóÀàÐͱä³É»ù±¾ÀàÐÍ£º

´úÂëÒ²ºÜ¼òµ¥£¬Ö±½Ó¿½±´asm´úÂë¼´¿É£¬¶Ôÿ¸ö»ù±¾ÀàÐÍ×öÅжϼ´¿É¡£×îºó¾ÍÊÇ·µ»ØÖ¸ÁÒòΪ²»Í¬»ù±¾ÀàÐͺͶÔÏóÀàÐͲÉÓõIJ»Ò»Ñù£¬»ù±¾ÀàÐÍÖÐfloatÀàÐÍÊÇFRETURN£¬longÀàÐÍÊÇLRETURN£¬doubleÀàÐÍÊÇDRETURN£¬ÆäËûÀàÐͶ¼ÊÇIRETURN£¬Èç¹ûÊǶÔÏóÀàÐÍÖ±½ÓÊÇARETURN¼´¿É£º

ËÄ¡¢Óöµ½µÄÎÊÌâ

µ½ÕâÀïÎÒÃǾÍÍê³ÉÁ˶¯Ì¬´úÂë×¢ÈëµÄ±àд£¬Õû¸ö¹ý³Ì¿ÉÒÔ¿´µ½ÓÐºÜ¶àµØ·½ÐèÒª´¦Àí£¬Ò²¾ÍÊÇÌî¿Ó£¬ÔÚÎÞÊý´ÎʵÑéÖÐÓöµ½ÎÊÌâ½â¾öÎÊÌ⣬ÒòΪÈç¹û¿ªÊ¼°Ñasm¶ÔÓ¦µÄ´úÂ뿽±´¹ýÀ´»áÓöµ½Ò»Ð©ÎÊÌâµÄ¡£²»¹ýÿ´ÎÓöµ½ÎÊÌâµÄʱºò½â¾ö°ì·¨Ò²ºÜ¼òµ¥£¬½èÖújd-gui¹¤¾ß£¬²é¿´ÎÒÃÇÿ´Î´¦ÀíÖ®ºóµÄclassÎļþ£¬±ÈÈçÕâÀ

ÕâÀï¿´µ½£¬Õâ¸ö·½·¨´¦Àí¾Í±¨´íÁË£¬ÆäʵÕâ¸ö¾ÍÊÇ֮ǰÓöµ½µÄ¿Ó£¬Èç¹ûÒ»¸ö²ÎÊýÇ°ÃæÒ»¸ö²ÎÊýÊÇlong,doubleÀàÐÍûÓÐ×öÌØÊâ´¦ÀíµÄ½á¹û¡£Õâʱºò·¢ÏÖÓÐÎÊÌ⣬ÎÒÃÇ¿ÉÒÔÏÈÊÖ¶¯±àдÐÞ¸´´úÂ룬Ȼºó½èÖúEclipseµÄBytecode²å¼þ²é¿´Æä¶ÔÓ¦µÄasm´úÂ룬ºÍÎÒÃÇÉú³É´úÂëÂß¼­×÷±È½Ï¼´¿É¡£

»¹ÒªÒ»ÖÖ·½·¨£¬¿ÉÒÔʹÓÃjavapÃüÁîÉú³ÉÁ½¸öclassµÄ×Ö½ÚÂ룬Ȼºó¶Ô±ÈÒ²¿ÉÒÔ£º

È»ºó¶Ô±ÈÕâÁ½¸öclassÎļþµÄ×Ö½ÚÂ룺

²»Ò»ÑùµÄµØ·½£¬ÔÙ¼ÌÐøÐÞ¸ÄÖ¸Áî¼´¿É¡£

Îå¡¢²È¹ýµÄ¿Ó

µ½ÕâÀïÎÒÃǾͰѶ¯Ì¬²åÈë´úÂëµÄÂß¼­±àдÍê±ÏÁË£¬×ܽáÒ»ÏÂÎÒÃÇÓöµ½µÄ¿Ó£º

µÚÒ»¡¢´¦Àí¹¹Ôì·½·¨²ÎÊýÊý×é

1¡¢²ÎÊý¸öÊý£¬×Ö½ÚÂëÖ¸Áî³£ÊýÖµÊÇICONST_0µ½ICONST_5£¬¹ýÁËÕâ¸ö·¶Î§£¬¾ÍµÃÓÃBIPUSHÖ¸Áî¡£

2¡¢»ù±¾ÀàÐÍÐèÒª½øÐзâÏä²Ù×÷¡£

3¡¢²ÎÊýÇ°ÃæÒ»¸ö²ÎÊýÊÇlongºÍdoubleÀàÐÍ£¬ÐèÒª×öÌØÊâ´¦Àí¡£

4¡¢»ù±¾ÀàÐͺͶÔÏóÀàÐÍÔÚ´æ·ÅÖµµÄʱºòÓõÄLOADÖ¸Áͬ¡£

µÚ¶þ¡¢·½·¨·µ»ØÖµ´¦Àí

1¡¢·½·¨ÓÐÎÞÖµ·µ»Ø¡£

2¡¢·µ»ØÖµÊÇ»ù±¾ÀàÐÍÐèÒª×ö²ðÏä´¦Àí¡£

3¡¢¶ÔÓÚ·µ»ØÖµÊÇÊý×éºÍ·ÇÊý×éÀàÐÍ´¦Àí¡£

4¡¢»ù±¾ÀàÐͺͶÔÏóÀàÐÍ·µ»ØÖ¸Áͬ¡£

Áù¡¢°ü×°³ÉС¹¤¾ß

ÏÂÃæ»¹Ã»Í꣬ÒòΪÉÏÃæÎÒÃÇ¿´µ½Ö»ÊDZàдÍêÁ˲åÈë´úÂëµÄ¹¤¾ßÀà·½·¨£¬»ØÍ·¿ÉÒÔ¿´µ½£¬Õâ¸ö·½·¨ÐèÒª´«È뼸¸ö²ÎÊý£º

ÏÂÃæÀ´ËµÃ÷Õ⼸¸ö²ÎÊýµÄº¬Ò壺

µÚÒ»¸ö²ÎÊý£º²Ù×÷·½·¨µÄÀàMethodVisitor

µÚ¶þ¸ö²ÎÊý£º·½·¨ËùÊôÀàµÄÈ«³ÆÃû³Æ

µÚÈý¸ö²ÎÊý£º·½·¨²ÎÊýÇ©Ãû×Ö·û´®Áбí

µÚËĸö²ÎÊý£º·½·¨·µ»ØÖµÀàÐÍÇ©Ãû

µÚÎå¸ö²ÎÊý£º·½·¨ÊÇ·ñΪstaticÀàÐÍ

ÏÂÃæÕ¦ÃÇÐèÒª½èÖúasm°üÖеÄapiÀ´´¦ÀíclassÎļþÁË£¬ÔÚ֮ǰ½éÉÜAndroidÖж¯Ì¬²åÈë´úÂ빤¾ßicodetools µÄʱºò£¬Ëµ¹ýÒ»¾ä£¬²Ù×÷ÀàʹÓÃClassVisitor£¬²Ù×÷·½·¨Ê¹ÓÃMethodVisitor¼´¿É£¬Ö±½Ó¿´´úÂ룺

ÕâÀï¿ÉÒÔͨ¹ý·½·¨µÄÃèÊö×Ö¶Îdesc£¬Í¨¹ýTypeÀàµÃµ½·½·¨µÄ²ÎÊýÀàÐͺͷµ»ØÖµÀàÐÍ

ÔÚÕâÀ¿ÉÒÔͨ¹ýaccess×ֶλñÈ¡·½·¨ÊÇ·ñΪstaticÀàÐÍ£¬¶øÇÒÐèÒª¸øÃ¿¸öÀàÌí¼ÓÒ»¸ö¾²Ì¬±äÁ¿changeQuickRedirect

È»ºó¾ÍÐèÒª½èÖúClassReaderÀ࣬ÕâÀï´«ÈëµÄÊÇÐèÒª´¦ÀíµÄÀàµÄ×Ö½ÚÊý×飬Ȼºó¿ÉÒÔ»ñÈ¡µ½ÀàÃû¡£´¦ÀíÖ®ºóÔÚ·µ»ØÀàµÄ×Ö½ÚÊý×é¼´¿É¡£

ÍⲿÔÚ·â×°Ò»¸ö·½·¨£¬¶ÁдÎļþ£¬ËùÕâÀïΪÁ˺óÃæ·½±ãʹÓ㬱àдÁËÁ½¸ö¼òµ¥Ð¡¹¤¾ß£¬Ò»¸öÊÇÓÃÓÚµ¥¶ÀclassÎļþ´¦Àí£¬Ò»¸öÊÇΪÁËjarÎļþ´¦Àí£¬Ö»ÒªÊäÈëÔ´Îļþ£¬Êä³ö¾ÍÊÇ´¦ÀíÖ®ºóµÄ½á¹ûÁË£º

Õâ¸öÏîÄ¿ÖоßÌå´úÂë¾Í²»¶à½âÊÍÁË£¬ºóÃæ»á¸ø³öÏîÄ¿µÄÏÂÔØµØÖ·£¬¿ÉÒÔ×Ô¼ºÅªÏÂÀ´ÂýÂý½â¶Á¡£µ«ÊÇÕâÀïÐèҪעÒâÒ»µã£¬¾ÍÊÇÕâÀïµÄChangeQuickRedirectºÍPatchProxyÕâÁ½¸öÀà±ØÐëºÍÓ¦Óù¤³ÌÖеÄÃû³Æ°üÃû±£³ÖÒ»Ö£¬²»È»²åÈëÊÇʧ°ÜµÄ¡£ÏÂÃæ¾Í¼òµ¥Óô¦Àíµ¥¸öµÄclassÎļþ¹¤¾ß´¦ÀíÒ»ÏÂPersonÀࣺ

ºÃÁË£¬µ½ÕâÀզÃǾʹ¦ÀíÍêÁËRobust¿ò¼Ü¶¯Ì¬²åÈë´úÂëµÄÂß¼­ÁË¡£ÌṩÁËÁ½¸ö¹¤¾ß£¬Ò»¸öÊÇ´¦ÀíjarÎļþ£¬Ò»¸öÊÇ´¦Àíµ¥¶ÀclassÎļþ¡£ÄÇôÓÐͬѧ¿ÉÄÜ»áÀ§»ó£¿ÃÀÍÅÏîĿӦ¸Ã»¹ÓÐÆäËû²Ù×÷°É¡£µÄÈ·Èç´Ë¡£

Æß¡¢ÏîÄ¿ÖÐÈçºÎʹÓù¤¾ß

ÓÐÁËÕâÁ½¸ö¹¤¾ß£¬ÎÒÃÇ¿ÉÒÔ½«Æäµ¼³ö³ÉjarÎļþ£¬ÔÚÏîÄ¿±àÒëÆÚ¼ä¿ªÊ¼²Ù×÷£¬ÏȲ»¹ÜÏîÄ¿ÓÃant½Å±¾£¬»¹ÊÇgradle½Å±¾ÁË£¬²»Á˽âÓýű¾±àÒëAndroidÓ¦ÓõÄͬѧ£¬¿ÉÒԲ鿴ÕâÀAndroidÖÐʹÓýű¾±àÒëÓ¦Óã»Óýű¾±àÒëÏîÄ¿¶¼ÊÇÐèÒª¾­ÀúÕâô¼¸¸ö½×¶ÎµÄ£º

1¡¢Ê¹ÓÃAndroid SDKÌṩµÄaapt.exeÉú³ÉR.javaÀàÎļþ

2¡¢Ê¹ÓÃAndroid SDKÌṩµÄaidl.exe°Ñ.aidlת³É.javaÎļþ£¨Èç¹ûûÓÐaidl£¬ÔòÌø¹ýÕâÒ»²½£©

3¡¢Ê¹ÓÃJDKÌṩµÄjavac.exe±àÒë.javaÀàÎļþÉú³ÉclassÎļþ

4¡¢Ê¹ÓÃAndroid SDKÌṩµÄdx.batÃüÁîÐнű¾Éú³Éclasses.dexÎļþ

5¡¢Ê¹ÓÃAndroid SDKÌṩµÄaapt.exeÉú³É×ÊÔ´°üÎļþ£¨°üÀ¨res¡¢assets¡¢androidmanifest.xmlµÈ£©

6¡¢Ê¹ÓÃAndroid SDKÌṩµÄapkbuilder.batÉú³ÉδǩÃûµÄapk°²×°Îļþ

7¡¢Ê¹ÓÃjdkµÄjarsigner.exe¶ÔδǩÃûµÄ°ü½øÐÐapkÇ©Ãû

ÄÇô½Å±¾ÊÇÎÒÃÇ×Ô¼º¿ØÖƵģ¬ËùÒÔ¿ÉÒÔÔÚÁ½¸ö½×¶ÎÑ¡Ôñ´¦Àí£¬Ò²¾ÍÓÐÁ½¸ö·½°¸£º

µÚÒ»¸ö·½°¸£ºÖ»ÐèÒªÔÚ½«javaÎļþÓÃjavacÃüÁî±àÒë³ÉclassÎļþÖ®ºó£¬ÀûÓÃÉÏÃæµÄÄǸö¿ÉÒÔ´¦Àíµ¥¸öclassÎļþ¹¤¾ß½øÐд¦Àí¼´¿É¡£ÕâÑù¶ÔÓÚ¿ª·¢ÈËÔ±ÆäʵÊÇÎÞ¸ÐÖªµÄ¡£ÔÚ±àÒë½×¶Î×Ô¶¯Íê³ÉÁË¡£

µÚ¶þ¸ö·½°¸£ºÔÚ±àÒëËùÓÐÎļþµÃµ½classÎļþÖ®ºó£¬½«Æä´ò°ü³ÉjarÎļþ£¬È»ºóÔÚ½èÖúÉÏÃæÌáµ½µÄ´¦ÀíjarÎļþ¹¤¾ß½øÐд¦Àí¼´¿É¡£È»ºóÔÚʹÓÃdxÃüÁ´¦ÀíÖ®ºóµÄjarÎļþ±ä³ÉdexÎļþ¼´¿É¡£

Æäʵ²»¹ÜÊÇÄÄÖÖ·½°¸£¬Ö»ÒªÔÚ±àÒëÆÚÕÒ¶Ôʱ»ú£¬ÀûÓÃÉÏÃæ¸ø³öµÄÁ½¸ö¹¤¾ß¶¼¿ÉÒÔÍê³ÉµÄ¡£Æäʵ»¹ÓÐÒ»ÖÖ˼·£¬¾ÍÊÇÐèÒª½èÖú֮ǰÌáµ½µÄicodetools¹¤¾ß£¬ÐèÒª°ÑÕâ¸ö¹¤¾ß½øÐиÄһϣ¬°Ñ±¾ÎÄÖеĶ¯Ì¬²åÈë´úÂëÂß¼­ÒÆÖ²µ½icodetools¹¤¾ßÖУ¬È»ºóÕ¦ÃÇ¿ÉÒÔÊäÈëÒ»¸öapk£¬Êä³öµÄapk¾ÍÊÇÒѾ­Ìí¼Ó³É¹¦µÄ½á¹ûÁË¡£²»¹ýÕâÖÖ·½Ê½²»¿ÉÈ¡£¬ÎÒÏàÐÅÃÀÍŲ»»áÓÃÕâÖÖ˼·ȥ´¦ÀíµÄ¡£

°Ë¡¢ÓÅ»¯¹¤×÷

µ½ÕâÀïÎÒÃǾÍËã°ÑÃÀÍŵÄRobust¿ò¼ÜÖж¯Ì¬²åÈëÐÞ¸´´úÂëµÄÂß¼­½²½âÍêÁË£¬µ«ÊÇÕâÀﻹÓÐһЩϸ½ÚÎÊÌâÐèÒª´¦Àí£º

1¡¢Ìí¼ÓºÚÃûµ¥¹æÔò£¬ÎÒÃÇ¿ÉÒÔ¿´µ½£¬Õâ¸ö¶¯Ì¬²åÈë´úÂë¶ÎÊÇΪÁËÐÞ¸´×÷Óã¬ÄÇôһ¸öapkÖÐËùÓÐÀàÊÇ·ñ¶¼ÓбØÒª²åÈëÄØ£¿Ã÷ÏÔ²»ÐèÒª£¬±ÈÈçÎÒÃÇÓõ½ÁËv4°üÖеÄÀ࣬ÄÇôÕâÀïµÄÀà¿Ï¶¨²»ÐèÒª²åÈëµÄ¡£µ±È»»¹ÓÐһЩÎÒÃÇ×Ô¼º¶¨ÒåµÄÀàµÄһЩ·½·¨Ò²²»Ïë²åÈëµÄ¡£ËùÒÔÕâÀï¾ÍÒªÓÐÒ»¸ö²åÈëʱµÄºÚÃûµ¥£¬Õâ¸öÐèÒªÔÚÉÏÃæ²åÈ빤¾ßÀï×ö´¦Àí£¬±È½Ï¼òµ¥£¬ÒòΪÎÒÃÇÖªµÀ´¦ÀíµÄ·½·¨ÃûºÍÀàÃûÁË£¬Ö»ÊÇ×öÒ»¸ö¼òµ¥¹ýÂ˼´¿É¡£

2¡¢´ÓÉÏÃæ¿´µ½Ã¿¸öÀàÐèÒªÓÐÒ»¸öchangeQuickRedirect±äÁ¿£¬Õâ¸ö±äÁ¿ÃûÊÇΨһµÄ£¬µ«ÊÇÓÖ²»Äܱ£Ö¤ÔÚ¿ª·¢¹ý³ÌÖУ¬Ã¿¸ö¿ª·¢ÈËÔ±¶¼»áʹÓÃÕâ¸öÃû×Ö£¬Èç¹ûÓÐÈËʹÓÃÁË£¬¶øÎÒÃÇÓÖ×Ô¶¯²åÈëÁË£¬ÄÇô±àÒë¿Ï¶¨»á±¨´íµÄ¡£ËùÒÔÎÒÃÇÔÚ²åÈë´úÂë֮ǰÐèÒª×öһЩÅжÏÂß¼­¡£Èç¹ûÓÐÕâ¸ö±äÁ¿¾Í²»²åÈëÁË¡£²¢ÇÒ¸øÓëһЩÐÅÏ¢Ìáʾ¡£

¾Å¡¢¿ò¼ÜÓÅȱµã

½áºÏ֮ǰµÄ¿ò¼ÜÔ­Àíʵ¼ù°¸ÀýÒÔ¼°±¾ÎĵÄ֪ʶ£¬ÏÂÃæÀ´¿´Ò»ÏÂÃÀÍÅÕâ¸öÈÈÐÞ¸´¿ò¼ÜµÄÓÅȱµã£º

Óŵ㣺ÔÚ֮ǰһƪÎÄÕÂÖÐÒѾ­ÖªµÀËûµÄ¼ÓÔØÂß¼­·Ç³£¼òµ¥£¬Ö±½ÓʹÓÃDexClassLoaderÀà¼ÓÔØÐÞ¸´°ü¼´¿É¡£ËùÒÔ¿ÉÒÔ¿´µ½Õâ¸öÐÞ¸´¿ò¼ÜµÄ¼æÈÝÐԷdz£ºÃ¡£ÒòΪֱ½ÓʹÓÃϵͳÌṩµÄapi£¬²»»áÓкܸߵıÀÀ£ÂÊ£¬²»ÏñAndFix¿ò¼Ü½èÖúµ×²ã£¬»áÓÐϵͳÏÞÖÆÐèÒª×ö¼æÈݲÙ×÷µÄ¡£

ȱµã£º´Ó±¾ÎľͿÉÒÔÖªµÀÁË£¬Ò»¸öÆóÒµ¼¶Ó¦ÓôúÂë±¾Éí¾ÍºÜÅÓ´ó£¬ÔÚÕâÑù¸øÃ¿¸öÀàÿ¸ö·½·¨¶¼²åÈëÁËÕâ¶Î´úÂëÄÇô£¬¿ÉÏë¶øÖª£¬²åÈë´úÂëÖ®ºóµÄapk°üµÃ¶à´ó¡£¶øÇÒ»¹ÓÐһЩ»ìÏýÎÊÌ⣬ºÍAndFix¿ò¼ÜÒ»Ñù£¬²»Ö§³Ö×ÊÔ´ÐÞ¸´¡£

ËùÒÔÈç¹û°ÑÕâ¸ö¿ò¼ÜÕæÕý¼¯³Éµ½ÏîÄ¿Öл¹Óкܶà¿ÓÐèÒªÎÒÃÇÈ¥Ìµ±È»Õâ¸ö²»ÊDZ¾ÎĽéÉܵķ¶Î§ÁË¡£¸ÐÐËȤµÄͬѧ¿ÉÒÔÈ¥ÍøÉÏËÑһϹØÓÚRobust¿ò¼ÜµÄÎÊÌ⣬ÓÐÏêϸ˵Ã÷¡£ÈÈÐÞ¸´Â·ÂýÂýÆäÐÞÔ¶Ù⣬ÎὫÉÏ϶øÌî¿Ó£¡

ÏîÄ¿ÏÂÔØµØÖ·:https://github.com/fourbrother/RobustInsertCodeTools

Ê®¡¢×ܽá

±¾ÎÄÖ÷Òª¼ÌÐøÇ°ÃæÒ»ÆªÎÄÕ½éÉÜRobust¿ò¼ÜµÄÔ­ÀíºÍʵ¼ù°¸ÀýÖ®ºó£¬¿´Ò»ÏÂÕâ¸ö¿ò¼ÜµÄºËÐļ¼Êõµã¾ÍÊÇÈçºÎÔÚ±àÒëÆÚ¼ä×Ô¶¯¸øÃ¿¸öÀàÿ¸ö·½·¨ÖвåÈë´úÂ룬½èÖúasm°üºÍBytecode²å¼þÍê³ÉÁË¡£¶øÕâ¸öÒâÒå²»½ö½öÊǾÖÏÞÓÚÑо¿ÁËRobust¿ò¼Ü£¬¶øÊÇΪÁ˺óÐø²Ù×÷¶¼ÓÐÓã¬Ò²¾ÍÊÇ˵ÒÔºóÈç¹ûÓÐ×Ô¶¯²åÈë´úÂëÂß¼­£¬±¾ÎÄÒ²ÊÇÒ»¸ö·Ç³£²»´íµÄ°¸Àý¡£ºóÃæ»¹»á¼ÌÐø·ÖÎöÊÐÃæÉϵÄ×îºóÒ»¸öÈÈÐÞ¸´¿ò¼ÜTinkerÁË¡£×îºóС±àÖÜĩдÎÄÕÂÕæµÄºÃÀÛ£¬¼ÇµÃ¿´ÍêÖ®ºó¶à¶àÀ©É¢·ÖÏí£¬ÒªÊÇÓдòÉ;͸üºÃÁË¡£

   
1931 ´Îä¯ÀÀ       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ÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ