fastdex
Õ”éµ×£õĮĀÕ┐ŹÕÅŚõĖŹõ║åapkķŠ¤ķƤńÜäń╝¢Ķ»æ(Õ░żÕģȵś»ķĪ╣ńø?õĖŁµ£ēÕżÜõˬdex)’╝īfastdexÕÅ»õ╗źÕĖ?ÕŖ®õĮĀÕŖĀÕ┐½apkńö¤µłÉĶ┐ćń©ŗ
Android API 9(2.3)+ ; android-gradle-build 2.0.0+
ńēłµ£¼Ķ?░ÕĮĢ
õĮ┐ńö©µ¢╣Õ╝Å
idea µÅÆõ╗Č
Õ£©Android StudioõĖŁ’╝īµēōÕ╝õɣń┤óµÅÆõ╗ČķĪĄķØó’╝Ü
-
MacOS
Android Studio ŌåÆ Preferences ŌåÆ Plugins ŌåÆ Browse repositories
-
Windows ÕÆī Linux
File ŌåÆ Settings ŌåÆ Plugins ŌåÆ Browse repositories
µÉ£ń┤ófastdexÕ?ēĶŻģķćŹÕÉ»Android StudioÕ░▒ÕÅ»õ╗źõ║åŃĆé
µēŗÕŖ©ķģŹńĮ?
-
1ŃĆüÕģ│ķŚŁInstant RunÕŖ¤ĶāĮ ńé╣Õć╗ÕĘ”õ˪ͦÆAndroid studio -> Preferences -> Build,Execution,Deployment -> Instant Run -> Enable Instant Run......(µŖŖÕ»╣ÕŗŠÕÄ╗µÄē)
-
2ŃĆüÕ£©root projectõĖŗńÜäbuild.gradleõĖŁµĘ╗ÕŖĀõŠØĶĄ¢
buildscript { repositories { jcenter() } dependencies { classpath 'com.github.typ0520:fastdex-gradle:0.8.6' } } -
3ŃĆüÕ£©appńÜäķĪ╣ńø?õĖŁńÜäbuild.gradleµĘ╗ժµůõ╗Č
apply plugin: 'fastdex.app' -
4ŃĆüńø┤µÄźńé╣Õć╗studiońÜärunµł¢ĶĆģµē¦ĶĪīµēōÕīģÕæĮõ╗ż’╝īÕ░▒õ╝ÜÕ£©õ╗╗ժεē¦ĶĪīńÜäĶ┐ćń©ŗõĖŁÕüÜhook
ń¼¼õĖƵ¼ĪÕģ©ķćŵēōÕīģµłÉÕŖ¤ÕÉÄ’╝īfastdexµö»µīüµŖŖÕó×ķćÅńÜädexÕÆīĶĄäµ║ɵĩķĆüÕł░µŁŻÕ£©Ķ┐ÉĶĪīńÜäappķćīķćŹÕÉ»Õ╣ČÕŖĀĶĮĮ’╝īĶ┐ÖµĀĘõ╝Üń£üÕÄ╗Õ?ēĶŻģappńÜ䵌ČķŚ┤Õ╝ĆķöĆ µŗ┐debugõĖ║õŠŗÕ”éµ×£µ▓ε£ēķģŹńĮ?flavorÕ░▒µē¦ĶĪī(gradlew fastdex${Variant}) Mac/Linux: ./gradlew fastdexDebug Windows: gradlew.bat fastdexDebug
µ│©µäÅõ║ŗķĪ╣
-
1ŃĆüõĖŹĶ”üµŖŖfastdexµēōÕć║µØźńÜäÕīģńö©Õ£©ńö¤õ║¦ńÄ»Õóā’╝īÕøĀõĖ║fastdexµēōÕć║µØźńÜäÕīģķĪ╣ńø?µēƵ£ēńÜäõ╗ŻńĀüķāĮÕ£©ń¼¼õ║īõˬdexÕÉÄķØó’╝īõ╝ÜķƵłÉ5.0õ╗ź õĖŗµ£║Õ֩픢µ¼ĪĶ┐ÉĶĪīµ»öĶŠāµģó(Õ”éµ×£µś»µ£¼Õ£░Ķ░āĶ»ĢÕ░▒µŚĀµēĆĶ░ōõ║å)’╝øÕĮōµēōÕīģńö¤õ║¦ńÄ»ÕóāapkµŚČµ│©ķćŖµÄēÕŖĀÕģźµÅÆõ╗ČńÜäõ╗ŻńĀü //apply plugin: 'fastdex.app'
-
2ŃĆüfastdexõ╝ÜÕ┐ĮńĢźÕ╝ĆÕÉ»µĘʵĘåńÜäbuildType
-
3ŃĆüÕ╝║ńāłÕ╗║Ķ??õĮĀńÜäapplicationõĖŹĶ”üńø┤µÄźõŠØĶĄ¢libraryÕĘźń©ŗ’╝īµēōµłÉaarÕīģĶ?®applicationÕĘźń©ŗĶ┐£ń©ŗõŠØĶĄ¢
Õ?×ńÄ░ÕĤńÉå
-
gradleÕ£©µē¦ĶĪītransformClassesWithDexFor${variant}õ╗╗ÕŖĪńö¤µłÉdexµ¢ćõ╗ȵŚČõ╝ÜÕŠłµģó(Õ░żÕģȵś»Õ╝ĆÕÉ»õ║åmultidex)’╝īµłæõ╗¼Õ£©Õ╝ĆÕÅæõĖŁ’╝īõ┐?µö╣ńÜäÕćĀõ╣ÄÕ쩵ś»ķĪ╣ńø?õ╗ŻńĀü’╝īń¼¼õĖēµ¢╣Õ║ōµö╣ÕŖ©µ»öĶŠāÕ░ÅŃĆéfastdexńÜäÕĤńÉåÕ░▒µś»ķóäÕģłµŖŖµēƵ£ēõ╗ŻńĀüńö¤µłÉdex, ÕĮōõĖŗµ¼Īµē¦ĶĪīassembleõ╗╗ժεŚČÕŬõ╝ܵŖŖķĪ╣ńø?ńø?ÕĮĢõĖŗÕÅśÕī¢ńÜäõ╗ŻńĀüńö¤µłÉdex’╝īńäČÕÉÄÕÆīń╝ōÕŁśńÜädexÕÉłÕ╣Čńö¤µłÉapk’╝īĶ┐ÖµĀĘÕŹ│õĖŹÕĮ▒ÕōŹĶ░āͻ̒╝īÕÅłĶāĮÕ£©ńö¤µłÉdexńÜäĶ┐ćń©ŗõĖŁń£üõĖŗõ║åÕż¦ķćÅńÜ䵌ČķŚ┤ŃĆé Ķ»”µāģ
-
Õ║öńö©Õ?ēĶŻģńÜäķƤÕ║”µ»öĶŠāµģó’╝īÕ░żÕģȵś»5.0õ╗źÕÉÄńÜäńēłµ£¼’╝īfastdexõ╝ܵŖŖĶĪźõĖüdexÕÆīĶĄäµ║ÉķĆÜĶ┐ćadbµÄ©Õł░µŁŻÕ£©Ķ┐ÉĶĪīńÜäappķćīńø┤µÄźķćŹÕÉ»app
µēōÕīģµĄüń©ŗ
Õģ©ķćŵēōÕīģµŚČńÜ䵥üń©ŗ:
- 1ŃĆüÕÉłÕ╣ȵēƵ£ēńÜäclassµ¢ćõ╗Čńö¤µłÉõĖĆõˬjarÕīģ
- 2ŃĆüµē½µÅŵēƵ£ēńÜäķĪ╣ńø?õ╗ŻńĀüÕ╣ČõĖöÕ£©µ×äķƵ¢╣µ│ĢķćīµĘ╗ÕŖĀÕ»╣fastdex.runtime.antilazyload.AntilazyLoadń▒╗ńÜäõŠØĶĄ¢ Ķ┐ÖµĀĘÕüÜńÜäńø?ńÜ䵜»õĖ║õ║åͦŻÕå│class verifyńÜäķŚ?ķóś’╝ī Ķ»”µāģĶ»Ęń£ŗ Õ?ēÕŹōAppńāŁĶĪźõĖüÕŖ©µĆüõ┐?ÕżŹµŖĆµ£»õ╗ŗń╗Ź
- 3ŃĆüÕ»╣ķĪ╣ńø?õ╗ŻńĀüÕüÜÕ┐½ń즒╝īõĖ║õ║åõ╗źÕÉÄĶĪźõĖüµēōÕīģµŚČÕ»╣µ»öķéŻõ║øjavaµ¢ćõ╗ČÕÅæńö¤õ║åÕÅśÕī¢
- 4ŃĆüÕ»╣ÕĮōÕēŹķĪ╣ńø?ńÜäµēĆõ╗źõŠØĶĄ¢ÕüÜÕ┐½ń즒╝īõĖ║õ║åõ╗źÕÉÄĶĪźõĖüµēōÕīģµŚČÕ»╣µ»öõŠØĶĄ¢µś»ÕÉ”ÕÅæńö¤õ║åÕÅśÕ╝īÕ”éµ×£ÕÅśÕī¢ķ£ĆĶ”üµĖģķÖżń╝ōÕŁś
- 5ŃĆüĶ░āńö©ń£¤µŁŻńÜätransformńö¤µłÉdex
- 6ŃĆüń╝ōÕŁśńö¤µłÉńÜädex’╝īÕ╣ČõĖöµŖŖfastdex-runtime.dexµÅÆÕģźÕł░dexÕłŚĶĪ©õĖŁ’╝īÕüćÕ”éńö¤µłÉõ║åõĖżõˬdex’╝īclasses.dex classes2.dex ķ£ĆĶ”üÕüÜõĖĆõĖŗµōŹõĮ£ fastdex-runtime.dex => classes.dex classes.dex => classes2.dex classes2.dex => classes3.dex ńäČÕÉÄĶ┐ÉĶĪīµ£¤Õ£©ÕģźÕÅŻApplication(fastdex.runtime.FastdexApplication)õĮ┐ńö©MultiDexµŖŖµēƵ£ēńÜädexÕŖĀĶĮĮĶ┐øµØź
- @see fastdex.build.transform.FastdexDexTransform
- 7ŃĆüõ┐ØÕŁśĶĄäµ║ɵśĀÕ░äĶĪ©’╝īõĖ║õ║åõ┐صīüidńÜäÕĆ╝õĖĆĶć┤’╝īĶ»”µāģń£ŗ
- @see fastdex.build.task.FastdexResourceIdTask
ĶĪźõĖüµēōÕīģµŚČńÜ䵥üń©ŗ
- 1ŃĆüµŻĆµ¤źń╝ōÕŁśńÜäµ£ēµĢłµĆ¦
- @see fastdex.build.variant.FastdexVariant ńÜäprepareEnvµ¢╣µ│ĢĶ»┤µśÄ
- 2ŃĆüµē½µÅŵēƵ£ēÕÅśÕī¢ńÜäjavaµ¢ćõ╗ČÕ╣Čń╝¢Ķ»æµłÉclass
- @see fastdex.build.task.FastdexCustomJavacTask
- 3ŃĆüÕÉłÕ╣ȵēƵ£ēÕÅśÕī¢ńÜäclassÕ╣Čńö¤µłÉjarÕīģ
- 4ŃĆüńö¤µłÉĶĪźõĖüdex
- 5ŃĆüµŖŖµēƵ£ēńÜädexµīēńģ¦õĖĆÕ?ÜͦäÕŠŗµöŠÕ£©transformClassesWithMultidexlistFor${variantName}õ╗╗ÕŖĪńÜäĶŠōÕć║ńø?ÕĮĢ fastdex-runtime.dex => classes.dex patch.dex => classes2.dex dex_cache.classes.dex => classes3.dex dex_cache.classes2.dex => classes4.dex dex_cache.classesN.dex => classes(N + 2).dex