Android ²»½öϵͳ°æ±¾Öڶ࣬»úÐÍÖڶ࣬¶øÇÒ¸÷¸öÊг¡¶¼¸÷Óи÷µÄÕþ²ßºÍÉóºËËÙ¶È£¬Ã¿´Î·¢²¼Ò»¸ö°æ±¾¶ÔÓÚ¿ª·¢Í¬Ñ§À´½²¶¼ÊÇÒ»ÖÖÂþ³¤µÄ¼å°¾¡£Ïà±ÈÓÚ iOS Á½ÈýÌì¾ÍÄÜ´ïµ½ 80% µÄ¸²¸ÇËٶȶøÑÔ£¬Android Ó¦Óð汾Éý¼¶ÖÁÉÙÐèÒªÁ½ÖܲÅÄÜ´ïµ½ 80% µÄÉý¼¶ÂÊ£¬ÑÏÖØ×è°Á˰汾µü´úËÙ¶È¡£Ò²µ¼ÖÂÊг¡ÉÏ App °æ±¾·ÖÉ¢£¬´¦Àí bug ºÍͶËßµÈÒ²Ô½À´Ô½Âé·³¡£ ÐÞ¸´µÄ bug ÐèÒªµÈ´ýϸö°æ±¾·¢²¼´°¿Ú²ÅÄÜ·¢²¼£¿
ÒѾ ready µÄÐèÇóÅŶÓÉÏÏߣ¬ÐèÒªµÈ´ýÆäËû Feature Team ºÏÈë´úÂ룿
Àϰ汾Éý¼¶ËÙ¶ÈÂý£¿Æµ·±ÉÏÏß°æ±¾ÌáÐÑÓû§Éý¼¶£¬Ó°ÏìÓû§ÌåÑ飿 Õ⼸¸öÎÊÌâÊÇÿ¸ö App ¿ª·¢Í¬Ñ§¶¼±ØÈ»ÒªÃæ¶ÔµÄ¡£ÄÇôÓÐûÓз½·¨ÄÜÔÚÓû§ÎÞ¸ÐÖªµÄÇé¿öϼÓËÙ bug ´¦ÀíºÍ°æ±¾µü´úËÙ¶È£¿ ÔÚÕâ·½Ãæ PC ¶Ë Chrome ä¯ÀÀÆ÷µÄ patch Éý¼¶·½°¸¸øÎÒÃÇÁËÒ»¸öºÜºÃµÄ½è¼ø£ºµ± Chrome Óа汾Éý¼¶µÄʱºò»á×Ô¶¯ÏÂÔØ patch Îļþ¡£ÏÂ´ÎÆô¶¯ºó£¬Chrome ¾ÍÒѾÊÇа汾¡£
Ëûɽ֮ʯ£¬¿ÉÒÔ¹¥Óñ ½üÒ»Á½Äê Android ÈȲ¹¶¡¿ò¼Ü·Ç³£ÈÈÃÅ¡£´Ó×î³õ 360 ¶¯Ì¬Ï·¢ lua ½Å±¾£¬µ½ºóÀ´³öÏֵĸ÷ÖÖ·½°¸£¬ÈçÓêºó´ºËñ°ã³öÏÖ¡£ÔçÆÚµÄ²¹¶¡¿ò¼ÜÆ«ÏòÓÚÒÔ´úÂëÐÞ¸´ÎªÖ÷£¬Ö÷Òª·ÖΪÁ½´óÀࣺnative hook ·½°¸ºÍ Multidex ·½°¸¡£ native hook ·½°¸Èç°¢Àï°Í°ÍµÄ AndFix ºÍ Dexposed¡£Multidex ·½°¸Èç Qzone¡£ÇÐÈëµã¶¼ÊÇÌæ»»µô½«ÒªÖ´ÐеĴúÂë¡£»ùÓÚ Qzone ·½°¸µÄ˼·£¬³öÏÖÁË nuwa Õâ¸ö±È½ÏÍêÉÆµÄ¿â£¬¹¤¾ßÁ´±È½ÏÍêÉÆ¡£ ÀàËÆ Chrome µÄ patch Éý¼¶·½°¸×ãÒÔÂú×ã¼ÓËÙ bug ´¦ÀíºÍ°æ±¾µü´úËٶȵÄÐèÇ󣬸øÁËÎÒÃǺܴóµÄ½è¼øÒâÒå¡£ÔÚ°²×¿ÏµÍ³ÉÏ£¬¿ÉÒÔͨ¹ý hotfix µÄ˼·À´´ïµ½ÕâһĿµÄ£ºÏ·¢²¹¶¡Îļþ£¬¸üРApp °æ±¾¡£
Õ¾ÔÚ¾ÞÈ˵ļç°òÉÏ ÔÚ½ñÄê 3 Ô·ݿªÊ¼×ö¼¼ÊõÑ¡Ð͵Äʱºò°ÑÉÏÃæµÄ¼¸ÖÖ·½°¸ÊÔÁËÒ»ÂÖ¡£ÆäÖÐ AndFix ÉõÖÁ¸úÉÏÁËÏÖÍøµÄÒ»¸ö·¢²¼°æ±¾£¬µ«ÊÇÓÉÓÚÓ°ÏìÕýÏò¿ª·¢¹ý³Ì£¨Ö»ÄÜÐ޸ķ½·¨¡¢²»ÄÜÐÞ¸Ä field¡¢²»ÄÜÐÂÔöÀàµÈÎÊÌ⣩¡¢¿â±¾ÉíÄÑÓÚά»¤£¨ÐèÒªÒÀÀµÍⲿ¿ªÔ´Á¦Á¿½øÐÐά»¤£©ÒÔ¼°·¢ÏÖµÄĪÃûÆäÃîµÄ bug£¨µ¼ÖÂÎÒÃÇ App Ï·¢ patch ºó°×ÆÁ£©£¬ËùÒÔ¼´Ê¹¸úÉÏÁË·¢²¼°æ±¾Ò²Ã»ÓÐʹÓá£nuwa ½öÖ§³Ö¸üРJava ´úÂ룬²»ÄܸüÐÂ×ÊÔ´ºÍ so Îļþ£¬Âú×ã²»ÁËÎÒÃǵÄÐèÇó¡£ Ã»ÓкÃÓõÄÂÖ×Ó£¬ÎÒÃǾö¶¨×Ô¼ºÔìÒ»¸ö£¬ÓÚÊÇÓÐÁËÏÖÔÚµÄ patch ·½°¸¡£
App Ö»ÊÇÒ»¸ö¼ÓÔØÆ÷ ¼ÈÈ»×ö°²×¿ patch ·½°¸£¬×îºÃµÄ½á¹û¾ÍÊÇÄÜÖ§³Ö¸üРApp ËùÓеĴúÂëºÍ×ÊÔ´¡£µ«ÊÇ Application ÀàÊÇ App Æô¶¯Ö®³õ¾Í±»°²×¿ÏµÍ³¼ÓÔØÆðÀ´£¬ËùÒÔÖÁÉÙ Application ÀàºÍËüÆô¶¯ÒÀÀµµÄÆäËûÒµÎñÀàÊDz»Äܱ»¸üеģ¿
ÐÞ¸´ bug »òÕß°æ±¾µü´ú¹ý³ÌÖÐÄÑÃâ»áÓöµ½ÐèÒªÐÞ¸Ä×ÊÔ´ÎļþµÄÇé¿ö¡£×ÊÔ´ÎļþÄܸüÐÂÂð£¿
native ʵÏÖµÄ so ÎļþÈçºÎ¸üУ¿ Õë¶ÔÉÏÃæÈý¸öÎÊÌ⣬ ÎÒÃǵÄÉè¼ÆÊÇ°Ñ App ½ö½öµ±×öÒ»¸ö¼ÓÔØÆ÷¡£ÏµÍ³Æô¶¯ App Ö®ºó£¬¼ÓÔØÆ÷¾ö¶¨½«ÒªÔËÐеĴúÂëºÍ×ÊÔ´µÄλÖᣵ±ÓÐй¦ÄÜ»òÕß bugfix ÐèÒªÍÆË͸øÓû§£¬Ìæ»»¼ÓÔØÆ÷ÄÚÈݼ´¿É¡£

Ö§³Ö¸üÐÂÈ«²¿´úÂë ÉÏÃæÌáµ½ Application ÓÉÓÚÆô¶¯¾Í±»¼ÓÔØ¶ø²»Äܱ»¸üеÄÎÊÌ⣬ÎÒÃÇ´úÀíÁËÕæÊµ Application ÀàµÄ´´½¨¹ý³Ì¡£Í¨¹ý´úÀí Application£¬¿ØÖÆ Application ´ÓРdex ÎļþÖмÓÔØ¡£¼ÙÉèÕæÊµµÄ Application ÀàÊÇ MyApplication¡£ÎÒÃÇÔÚ±àÒëÆÚ¼ä×Ô¶¯ÐÞ¸Ä AndroidManifest.xml Îļþ£¬°Ñ MyApplication Ìæ»»Îª MoaiApplication£¨ÊÇ App µÄÈë¿Ú Application£©¡£App Æô¶¯ºóÓÉ MoaiApplication ¼ÓÔØÍêÏàÓ¦µÄÎļþ£¨dex/×ÊÔ´Îļþ/so Îļþ£©ºó£¬ÔÙ½«¿ØÖÆÈ¨½»»Ø¸ø MyApplication¡£
´úÀíÉúÃüÖÜÆÚ ½«¿ØÖÆÈ¨½»»Ø¸ø MyApplication£¬ÎÒÃÇ×î³õÊÇ´úÀí MyApplication µÄÉúÃüÖÜÆÚ¡£¾ßÌå×ö·¨ÊÇ£¬MoaiApplication ¾ö¶¨¼ÓÔØÄÄÀïµÄÒµÎñ´úÂë¡¢×ÊÔ´ÎļþÒÔ¼° so ÎļþÖ®ºóÒÀÈ»¸ºÔð½ÓÊÕ App µÄÈ«²¿ÉúÃüÖÜÆÚ£¬È»ºó°ÑÉúÃüÖÜÆÚ´úÀí¸ø MyApplication£¬¼òµ¥Àý×ÓÈçÏ£º

»¹ÓбȽ϶àÉúÃüÖÜÆÚº¯ÊýÉÏÃæ´úÂë¾ÍûһһÁо١£ ´ÓÉÏÃæ´úÂëÈÝÒ×Ïëµ½´úÀí·½°¸µÄȱµã£º±ØÐëÒªÍêÕû´úÀíËùÓÐÉúÃüÖÜÆÚ½Ó¿Ú¡£·ñÔò MyApplication »áÓÉÓÚÉúÃüÖÜÆÚ²»ÍêÕû¶ø³öÏÖÆæ¹ÖµÄ bug¡£±ÈÈçÎÒÃÇ×î³õ°æ±¾ÔÚ²âÊÔ¹ý³ÌÖоͳöÏÖÁËûÓдúÀí registerActivityLifecycleCallbacks º¯Êý¶øµ¼ÖÂÄò»µ½ Activity ÉúÃüÖÜÆÚ onActivityCreated/onActivityDestroyed µÈ»Øµ÷¡£
·´Éä Application ²Èµ½ÉúÃüÖÜÆÚ»Øµ÷²»ÍêÕûµÄ¿ÓÖ®ºó£¬ÎÒÃÇ¿ªÊ¼¿¼ÂÇÄܲ»ÄÜ°Ñ App ÔËÐÐÆÚ¼ä Application µÄÒýÓÃÈ«²¿Ìæ»»³É MyApplication £¿ÕâÑù¾ÍÎÞÐè MoaiApplication °ÑÉúÃüÖÜÆÚ´úÀí¸ø MyApplication£¬¶øÊÇÓÉ MyApplication Ö±½Ó½ÓÊÕϵͳ»Øµ÷¡£°²×¿ÏµÍ³ ContextWrapper µÄʵÏÖÊǰü×°ÁËÒ»²ãÕæÕýµÄ mBase ÉÏÏÂÎÄ£¬App ÕæÕýʹÓõ½µÄ¾ÍÊÇÕâ¸ö mBase¡£Í¨¹ý·´Éä mBase ÒÔ¼°ÆäÖÐ×Ö¶Î¶Ô Application µÄÒýÓ㬡º³¹µ×¡»½â¾öÁËÐèÒªÊÖд´úÀí Application È«²¿ÉúÃüÖÜÆÚµÄ·½·¨¡£
dex·Ö°ü Qzone ·½°¸Ï·¢µÄ patch ÎļþÊDZä¸ü¹ýµÄ Java Àà×é³ÉµÄ patch.dex£¬ÔÚ dalvik ºÍ ART ÐéÄâ»úÏ·ֱðÐèÒª½â¾ö Class ref in pre-verified class resolved to unexpected implementation ºÍÄÚ´æµØÖ·´íÂÒÎÊÌâ¡£ÕâЩÎÊÌâ¸ùÔ´ÔÚÓڸıäÁËÀàÔ±¾ËùÊôµÄ dex Îļþ¡£¼ÈÈ»¸Ä±äÀàËùÔÚµÄ dex »áµ¼Ö¸÷ÖÖ¸÷ÑùµÄÎÊÌ⣬ÄÇÖ±½ÓÌæ»»µôÕû¸ö dex ²»¾ÍºÃÁË£¿ÔÚµ÷ÑÐ JRebal for Android ºÍ Instant Run µÄʱºòÒ²·¢ÏÖÁËËûÃÇÓÐÀàËÆµÄ×ö·¨¡£ ÎÒÃÇ°Ñ App µÄ dex ·Ö³ÉÁ½²¿·Ö£º patch ¿âµÄ dex Îļþ -> classes.dex
ÆäËûÒµÎñ´úÂëµÄ dex Îļþ -> classes[N].dex ÆäÖÐ classes.dex Öнö°üº¬ÁË patch ¿âµÄÈ«²¿´úÂ룬²¢²»°üº¬ÈÎºÎÆäËûÒµÎñ´úÂë¡£ ¼ÙÉè apk Öаüº¬Èý¸öÎļþ£ºclasses.dex¡¢classes2.dex¡¢classes3.dex¡£classes.dex ³äµ±µÄ½ÇÉ«¾ÍÊǼÓÔØÆ÷£¬¸ºÔðÆô¶¯ App ²¢ÇÒ¼ÓÔØºóÃæµÄÁ½¸ö dex¡£ÕâÑù×öµÄÄ¿µÄÊÇ£¬App Æô¶¯ÐèÒªÓõ½µÄËùÓÐÀà¶¼¼¯ÖÐÔÚ classes.dex ÖУ¬ËùÓÐÒµÎñ´úÂëµÄÀà¶¼¼¯ÖÐÔÚ classes[N].dex ÖС£Èç¹ûij´ÎÏ·¢ patch ´úÂë°Ñ classes2.dex ±ä¸üΪ classes2-1.dex£¬ÄÇôÓɼÓÔØÆ÷¼ÓÔØ classes2-1.dex ºÍ classes3.dex ¼´¿ÉʵÏÖ¸üаüº¬ MyApplication ÀàÔÚÄÚµÄËùÓдúÂë¡£
Ôõô¼ÓÔØ¸üкóµÄ´úÂ룿 Èç¹û dex ÎļþÓиüУ¬¼ÓÔØÆ÷»áÑ¡Ôñ¼ÓÔØ¸üкóµÄÎļþ¡£ÎÒÃÇ×î³õ²ÉÓÃÁË Google ¹Ù·½µÄ Multidex ·½°¸£¬À©Õ¹ DexPathList µÄ dexElements ×ֶΡ£
Multidex ·½°¸´æÔÚÎÊÌâ Multidex ·½°¸ÉÏÏߺó·¢ÏÖijЩ»úÐÍ£¨±ÈÈçÈýÐÇs6 5.0.2 ROM£©²¢²»ÄܼÓÔØÀ©Õ¹½øÈ¥µÄ dex ÖеĴúÂë¡£debug ½×¶ÎÈ´ÄÜ˳Àû¼ÓÔØ£¨debugger ÍÏÂý´úÂëÖ´ÐÐËÙ¶È£©¡£Ä¿Ç°µÄ²Â²âÊÇijЩ³§ÉÌÔÚ 5.x ÒÔÉϰ汾¸Ä¶¯ ROM µ¼Ö App Æô¶¯Âß¼ÓжàÏ̲߳¢·¢Ö´ÐС£ ×îÖÕÎÒÃÇÆúÓÃÁË Multidex ·½°¸£¬×ª¶ø Hack ϵͳ ClassLoader¡£
ClassLoader Hack ·½°¸ ËùÓÐÏß³ÌʹÓõÄÊÇͬһ¸ö ClassLoader ¶ÔÏó¡£ËùÒÔÒ»µ© Hack ÁËÕâ¸ö¶ÔÏó£¬ËùÓÐÏ̶߳¼¿ªÊ¼Ê¹Óà Hack ¹ýµÄ¶ÔÏ󣬴ӶøÄܹ»½â¾ö¶àÏ̵߳¼Ö¼ÓÔØ²»µ½À©Õ¹µÄ dex ÎļþÖдúÂëµÄÎÊÌâ¡£ °²×¿ÏµÍ³¼ÓÔØ´úÂëµÄ ClassLoader ÊÇ PathClassLoader ºÍ BootClassLoader¡£ÎÒÃÇ×î³õÉè¼ÆµÄ·½°¸ÊÇÔÚ PathClassLoader ºÍ BootClassLoader Ö®¼ä²åÈëÒ»¸ö BaseDexClassLoader£¬ÈÃËùÓÐÒµÎñ´úÂë¶¼ÔÚÕâ¸ö²åÈëµÄ BaseDexClassLoader ÖмÓÔØ¡£µ«ÊÇÕâÑùµÄÉè¼Æ´æÔÚȱÏÝ£ºÒµÎñ´úÂëµÄ ClassLoader »á±ä³É BaseDexClassLoader£¬Èç¹ûÒµÎñ´úÂëÒÀÀµÁË patch ¿âµÄ´úÂ루ÔÚ classes.dex ÖУ©£¬»á³öÏÖ ClassNotFoundException¡£ ÔÚÕâ·½Ãæ Instant Run µÄÉè¼ÆºÜ¾«ÇÉ¡£ËüÈà PathClassLoader ²åÈëµÄ¸¸ loader £¨IncrementalClassLoader£©°ü×°ÁË DelegateClassLoader£¬²¢ÇÒ°Ñ DelegateClassLoader µÄ¸¸ loader ÉèÖÃΪ PathClassLoader£¬Ê¹µÃÀà¼ÓÔØµÄ·¾¶±ä³É£º

ÔÚ DelegateClassLoader ¼ÓÔØÒµÎñ´úÂëµÄʱºò£¨ÒµÎñ´úÂëÔÚ classesN.dex ÖУ©£¬Á÷³Ì»áÑØ×űê¼ÇµÄ˳Ðò×îÖÕµÚ 5 ²½³É¹¦¼ÓÔØµ½ÒµÎñ´úÂë¡£ÒµÎñ´úÂëÈç¹ûÒÀÀµ patch ¿âµÄ´úÂ룬»áÔÚ PathClassLoader ¼ÓÔØ¡£ÕâÑùËùÓдúÂë¶¼¿ÉÒÔ±»¼ÓÔØµ½¡£
Ôõô¸üÐÂ×ÊÔ´£¿ µ¥´¿¸üРJava ´úÂëµÄ patch ¿ò¼Ü£¬ÊµÓÃÐÔ»áÊܵ½ºÜ´óµÄ¾ÖÏÞ¡£¿ª·¢Í¬Ñ§ÐèÒª×ÐϸÑéÖ¤Ìá½»ÄÚÈÝ£¬È·±£Ìá½»Öв»°üº¬×ÊÔ´ÎļþµÄ±ä¸üÒÔ¼° native so µÄ¸Ä¶¯£¬»áµ¼Ö±¾¾Í¸´ÔӵĿª·¢Á÷³Ì±äµÃ¸ü¼Ó·±Ëö¡£ËùÒÔÎÒÃÇÔÚÖ§³Ö¸üРJava ´úÂëµÄ»ù´¡Ö®ÉÏ£¬Ò²Ö§³Ö¸üÐÂ×ÊÔ´ºÍ native so Îļþ¡£ App ¼ÓÔØ×ÊÔ´ÊÇÒÀÀµ Context#getResources º¯Êý·µ»ØµÄ Resources ¶ÔÏó¡£Resources ÄÚ²¿°ü×°ÁË AssetManager£¬×îÖÕÓÉ AssetManager ´Ó apk ÎļþÖмÓÔØ×ÊÔ´¡£ËùÒÔÎÒÃÇ·´ÉäÁËÌæ»»ÏµÍ³Ä¬È쵀 Resources£¬Èà AssetManager ´ÓÎÒÃǸüкóµÄ apk ÖмÓÔØ×ÊÔ´¡£Ïֽ׶εÄʵÏÖÖ§³Ö±ÈÈç string/anim/drawable/color/layout µÈ×ÊÔ´ÎļþµÄ±ä¸ü¡£ÓÉÓÚ Android ϵͳÔÚ°²×° apk ʱºòÒѾ°Ñ AndroidManifest.xml Îļþ½âÎö²¢Ð´È뵽ϵͳÖУ¬Ä¿Ç°»¹²»Ö§³ÖÐÞ¸ÄËÄ´ó×é¼þ£¬±ÈÈçÔö¼Ó Activity¡£ºóÐø»á¼ÌÐøÑо¿ÈçºÎ×öµ½ÎÞ·ìÐÞ¸ÄËÄ´ó×é¼þ¡£
Ôõô¸üРso Îļþ£¿ ÔÚ Android ÏîÄ¿ÖÐʹÓà native º¯ÊýǰÐèÒªÏȵ÷Óà System.loadLibrary(libName)¡£ µ± lib ÎļþÐèÒª¸üлòÕßÓÐ bug ʱºòÔõô°ì£¿Ê×ÏÈÏëµ½µÄÊÇÔÚ´úÂëÖаѼÓÔØ so ÎļþµÄ´úÂë¸Ä³ÉSystem.load(libFilePath)£¬ÈÃϵͳ¼ÓÔØ×Ô¼ºÖ¸¶¨µÄ libFilePath Îļþ¡£È»¶øÕâÑùµÄ¸Ä¶¯ÐèÒª ÔÚÔ´´úÂëÖÐÐ޸ĻòÕßʹÓù¤¾ßÔÚ±àÒëÆÚ°Ñ loadLibrary ½Ó¿Ú¸ÄΪ load
patch ¿â°Ñ so Îļþ´Ó patch ÎļþÖи´ÖƵ½Ìض¨Ä¿Â¼ ÕâÑùÔÚÔËÐÐÆÚ²ÅÓпÉÄܼÓÔØ¸üкóµÄ so Îļþ¡£ ͨ¹ý·ÖÎöϵͳ¼ÓÔØ so ÎļþµÄ·½Ê½ºó£¬ÎÒÃÇʹÓÃÁ˸ü¼òµ¥µÄ´¦Àí·½·¨¡£²éÕÒ lib ÎļþÊÇͨ¹ýµ÷Óà PathClassLoader µÄ findLibrary£¬×îÖÕµ÷Óõ½ DexPathList µÄ findLibrary¡£DexPathList »áÔÚ×Ô¼ºÎ¬»¤µÄÁбíĿ¼ÖвéÕÒ¶ÔÓ¦µÄ lib ÎļþÊÇ·ñ´æÔÚ¡£ËùÒÔÎÒÃÇÔÚ·¢ÏÖ patch ÎļþÖÐÓÐ so Îļþ±ä¸üµÄʱºò£¬»áÔÚ PathClassLoader µÄ nativeLibraryDirectories£¨Android6.0ÒÔÏ£©»òÕßnativeLibraryPathElements £¨Android 6.0¼°ÒÔÉÏ£©µÄ×îÇ°Ãæ²åÈë×Ô¶¨ÒåµÄlibÎļþĿ¼¡£ÕâÑù ClassLoader ÔÚ findLibrary µÄʱºò»áÏÈÔÚ×Ô¶¨ÒåµÄ lib Ŀ¼ÖвéÕÒ£¬ÓÅÏȼÓÔØ±ä¸ü¹ýµÄ so Îļþ¡£
patch °üµÄÉú³ÉÓëÓ¦Óà »Øµ½ÎÒÃÇ×î³õµÄÄ¿±ê£ºpatch ²»Ó¦¸ÃÓ°ÏìÕýÏò¿ª·¢Á÷³Ì¡£ÎÒÃÇÉú³É patch ÎļþÊÇÕë¶Ô apk ½øÐеģ¬¿ª·¢Í¬Ñ§ÎÞÐè¹ØÐĴ˴η¢²¼ÊÇ patch °æ±¾»¹ÊÇÕý³£°æ±¾£¬Ö»ÐèÒªÕý³£¿ª·¢²¢ÇÒ´ò°üÒª·¢²¼µÄ apk ¼´¿É£¬²»»á¶ÔÕýÏò¿ª·¢Á÷³Ì²úÉúÈκÎÓ°Ïì¡£ ÎÒÃÇÌṩ python ½Å±¾Éú³ÉÁ½¸ö apk µÄ£º¶Ô±ÈÁ½¸ö apk ÖеÄËùÓÐÎļþ£¬ÕÒ³öÓбä¸üµÄÎļþ½øÐÐ diff£¬°Ñ diff ½á¹ûдÈë patch Îļþ¡£ÏßÉÏÓû§ÏÂÔØ patch Îļþµ½±¾µØÖ®ºó£¬Æô¶¯Ò»ÌõеĽø³ÌʹÓà context.getApplicationInfo().sourceDir ·¾¶µÄ apk Óë patch ÎļþºÏ²¢£¬µÃµ½Ð嵀 apk£¨°üº¬×ÊÔ´Îļþ£¬²»°üº¬ dex Îļþ£©ÒÔ¼° dex Îļþ¡¢native so Îļþ£¬²¢ÔÚÕâÌõ½ø³ÌÖÐÌáǰ×ö dex ÓÅ»¯£¨dex2oat/dexopt£©¡£Õë¶Ô dex ÓÅ»¯¹ý³ÌÌ«ÂýµÄÎÊÌ⣨ÓÅ»¯¹ý³ÌÂý»áµ¼Ö½ø³Ì¿ÉÄÜ»áϵͳkill£¬½µµÍ patch ³É¹¦ÂÊ£©ÎÒÃDz¢·¢ÁË dex ÓÅ»¯¹ý³Ì£¬Ê¹ patch ¹ý³ÌºÄʱÏà¶Ô¼õС¡£Ð apk¡¢dexÎļþ¡¢so Îļþ¾Í¿ÉÒÔÔÚÏÂ´ÎÆô¶¯ App µÄʱºòÓɼÓÔØÆ÷¼ÓÔØ¡£
ÓÅÊÆºÍ²»×ã ÕýËùνûÓÐÍêÃÀµÄ¼Ü¹¹£¬Ö»ÓÐÊʺÏ×Ô¼ºµÄ¼Ü¹¹¡£µ±Ç°µÄ¿ªÔ´·½°¸²¢²»ÄÜÂú×ãÎÒÃǼÓËÙ bug´¦ÀíºÍ°æ±¾µü´úËٶȵÄÐèÇó£¬ÓÚÊÇÓÐÁËÕ¾ÔÚ¾ÞÈ˼ç°òÉϵÄ˼¿¼ºÍÎÒÃÇÏÖÔÚµÄ patch ·½°¸¡£ÎÒÃÇĿǰµÄÓÅÊÆ£º È«ÃæÖ§³Ö patch Java ´úÂë¡¢×ÊÔ´Îļþ ºÍ native so Îļþ¡£°æ±¾Ö»ÐèÒªÕý³£¹ö¶¯£¬¿ª·¢Í¬Ñ§ÎÞÐè¹ØÐÄÊÇ·¢²¼ patch °æ±¾»¹ÊÇÕý³£°æ±¾
ʹÓÃÏà¶Ô¼òµ¥£¨¼õÉÙ½ÓÈë³É±¾Ò²ÊÇÎÒÃǵÄ×î³õ˼¿¼µãÖ®Ò»£©£¬Ö»ÐèÒªÔÚ build.gradle ÖмÓÈëÈýÐдúÂë¼´¿É£¬ÎÞÐè¸ü¶àÅäÖᣠ´ÓÎÒÃÇÍŶӷ¢²¼µÄ¶à¸ö patch °æ±¾À´¿´£¬Ï·¢µÄ diff ½á¹ûÎļþÉÔ´ó¡£´óÎļþÏÂÔØ¹ý³Ì¿ÉÄܳöÏֵĴíÎóÒ²»á¼ä½ÓÓ°Ïìµ½ patch ÆÌ¿ªµÄËÙ¶È£¬ËùÒÔÎÒÃÇÒ²ÔÚ³¢ÊÔ¸üºÃµÄ diff ·½°¸¡£Chrome ×î³õÉý¼¶·½°¸Ò²ÊÇ bsdiff£¬¶øºóÂýÂýÑݱä³ö Courgette Ëã·¨¡£
ÑݽøÓë˼¿¼ ÎÒÃǶÔÓÚ²¹¶¡¿ò¼ÜµÄ¶¨Òå²»½ö½öÊÇ¡ºÐÞ¸´bug¡»¾Í×ã¹»£¬³ý´ËÖ®Í⣬ÈçºÎ¿ìËÙ½ÓÈ룬ÈçºÎ×öµ½²»Ó°ÏìÏÖÓÐÁ÷³Ì£¬Õâ¶ÔÓںܶàÓ¦ÓÃÀ´ËµÖÁ¹ØÖØÒª¡£ÔÚ´ËÖ®ÉÏ£¬¸ãÇå³þ¿ò¼ÜµÄ¶¨Î»£¬Êʵ±ÉáÆúһЩ²»ÖØÒª·½ÃæµÄʱºò£¬¿ìËÙµü´ú£¬ÔÚµü´úÖгÖÐøÓÅ»¯£¬ÊÂÇéÍùÍù±ÈÏëÏóµÄ¸ü¼Ó¼òµ¥¡£ ³ÖÐø½»¸¶Ò»Ö±¶¼ÊÇ¿ìËÙµü´ú˼ÏëµÄÒ»ÖÖ¼ùÐз½Ê½£¬¶ÔÓÚ App ¿ª·¢¶øÑÔ£¬Èç¹ûÎÒÃÇͨ¹ý¹¹Ôì²¹¶¡¿ò¼ÜÕâÑùÒ»¸öÇþµÀ£¬¿ÉÒÔͨ¹ý×Ô¶¯»¯ÏµÍ³°Ñ²¹¶¡¿ìËٵذÑй¦ÄÜÍÆË͸øÓû§£¬ÄÇÕâ¸öÊÂÇéµÄÒâÒå¾Í²»½ö½öÊÇ¡ºÐÞ¸´ bug¡»Õâô¼òµ¥¡£¼õÉÙÏßÉÏ crash ÂʺͼÓËÙ°æ±¾µü´ú¡¢ÈÃй¦Äܾ¡ÔçÓëÓû§¼ûÃæ£¬´Ó¶ø¿ÉÒÔÔÚ¸ü¶ÌµÄʱ¼äÄÚ²»¶ÏÊÕ¼¯Óû§·´À¡ÐÅÏ¢¶Ô²úÆ·½øÐдòÄ¥¡£ ĿǰÎÒÃÇÒѾÔÚ΢ÐŶÁÊéÏßÉÏÈý¸ö°æ±¾¿ªÊ¼ÊÔÐÐÁËÓò¹¶¡´úÌæ°æ±¾·¢²¼»òÕß¼ÓËÙÀϰ汾Éý¼¶µÄ×ö·¨£¬ÆÚ´ý½«À´ÄÜͨ¹ýÕâ¸öÇþµÀ£¬Îª°²×¿¿ª·¢Í¬Ñ§ÃÇ×öµ½ÎÞ¸ÐÖªµÄ³ÖÐø½»¸¶¹ý³Ì ¡£
|