{"id":14979931,"url":"https://github.com/typ0520/fastdex","last_synced_at":"2025-05-16T14:05:51.714Z","repository":{"id":46101813,"uuid":"63214860","full_name":"typ0520/fastdex","owner":"typ0520","description":"🚀 加快 apk 的编译速度 🚀","archived":false,"fork":false,"pushed_at":"2018-02-06T09:37:21.000Z","size":8127,"stargazers_count":1493,"open_issues_count":31,"forks_count":205,"subscribers_count":43,"default_branch":"master","last_synced_at":"2025-04-19T16:10:50.208Z","etag":null,"topics":["aapt","android","android-studio","androidstudio","apk","buck","build-tool","dex","dexloader","dx","fast-build","freel","freeline","gradle","hotfix","idea-plugin","instant-run","layoutc","multidex","tinker"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/typ0520.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-07-13T04:41:28.000Z","updated_at":"2025-04-16T22:38:13.000Z","dependencies_parsed_at":"2022-07-20T08:17:23.889Z","dependency_job_id":null,"html_url":"https://github.com/typ0520/fastdex","commit_stats":null,"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typ0520%2Ffastdex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typ0520%2Ffastdex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typ0520%2Ffastdex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typ0520%2Ffastdex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/typ0520","download_url":"https://codeload.github.com/typ0520/fastdex/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254544146,"owners_count":22088807,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aapt","android","android-studio","androidstudio","apk","buck","build-tool","dex","dexloader","dx","fast-build","freel","freeline","gradle","hotfix","idea-plugin","instant-run","layoutc","multidex","tinker"],"created_at":"2024-09-24T14:00:57.113Z","updated_at":"2025-05-16T14:05:46.704Z","avatar_url":"https://github.com/typ0520.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# fastdex\n\n[![license](https://img.shields.io/hexpm/l/plug.svg)](https://raw.githubusercontent.com/typ0520/fastdex/master/LICENSE) [ ![Download](https://api.bintray.com/packages/typ0520/maven/com.github.typ0520%3Afastdex-gradle/images/download.svg) ](https://bintray.com/typ0520/maven/com.github.typ0520%3Agradle-plugin/_latestVersion)\n\n如果你忍受不了apk龟速的编译(尤其是项目中有多个dex)，fastdex可以帮助你加快apk生成过程\n\n![fastdex.png](fastdex-idea-plugin/src/main/resources/icons/bg_update.png)\n\nAndroid API 9(2.3)+  ; android-gradle-build 2.0.0+\n\n[版本记录](https://github.com/typ0520/fastdex/blob/master/CHANGELOG.md)\n\n## 使用方式\n\n\u003e idea 插件\n\n在Android Studio中，打开搜索插件页面：\n\n- MacOS\n\n    Android Studio → Preferences → Plugins → Browse repositories\n\n- Windows 和 Linux\n\n    File → Settings → Plugins → Browse repositories\n    \n搜索fastdex安装重启Android Studio就可以了。\n\n\u003e 手动配置\n\n- 1、关闭Instant Run功能\n     点击左上角Android studio -\u003e Preferences -\u003e Build,Execution,Deployment -\u003e Instant Run -\u003e Enable Instant Run......(把对勾去掉)\n\n- 2、在root project下的build.gradle中添加依赖\n\n  \t````\n  \tbuildscript {\n        repositories {\n            jcenter()\n        }\n        \n        dependencies {\n            classpath 'com.github.typ0520:fastdex-gradle:0.8.6'\n        }\n    }\n   \t````\n    \n- 3、在app的项目中的build.gradle添加插件\n\n    ````\n    apply plugin: 'fastdex.app'\n    ````\n    \n- 4、直接点击studio的run或者执行打包命令，就会在任务执行的过程中做hook\n\n    ````\n    第一次全量打包成功后，fastdex支持把增量的dex和资源推送到正在运行的app里重启并加载，这样会省去安装app的时间开销\n    拿debug为例如果没有配置flavor就执行(gradlew fastdex${Variant})\n    \n    Mac/Linux:\n    ./gradlew fastdexDebug\n    \n    Windows:\n    gradlew.bat fastdexDebug\n    ````\n\n## 注意事项\n\n- 1、不要把fastdex打出来的包用在生产环境，因为fastdex打出来的包项目所有的代码都在第二个dex后面，会造成5.0以\n    下机器首次运行比较慢(如果是本地调试就无所谓了)；当打包生产环境apk时注释掉加入插件的代码\n    //apply plugin: 'fastdex.app'\n    \n- 2、fastdex会忽略开启混淆的buildType\n\n- 3、强烈建议你的application不要直接依赖library工程，打成aar包让application工程远程依赖\n\n## 实现原理\n  - gradle在执行transformClassesWithDexFor${variant}任务生成dex文件时会很慢(尤其是开启了multidex)，我们在开发中，修改的几乎全是项目代码，第三方库改动比较小。fastdex的原理就是预先把所有代码生成dex,\n  当下次执行assemble任务时只会把项目目录下变化的代码生成dex，然后和缓存的dex合并生成apk，这样即不影响调试，又能在生成dex的过程中省下了大量的时间。\n  [详情](http://www.jianshu.com/p/53923d8f241c)\n  \n  - 应用安装的速度比较慢，尤其是5.0以后的版本，fastdex会把补丁dex和资源通过adb推到正在运行的app里直接重启app\n\n## 打包流程\n##### 全量打包时的流程:\n  - 1、合并所有的class文件生成一个jar包\n  - 2、扫描所有的项目代码并且在构造方法里添加对fastdex.runtime.antilazyload.AntilazyLoad类的依赖\n     这样做的目的是为了解决class verify的问题，\n     详情请看 [安卓App热补丁动态修复技术介绍](https://mp.weixin.qq.com/s?__biz=MzI1MTA1MzM2Nw==\u0026mid=400118620\u0026idx=1\u0026sn=b4fdd5055731290eef12ad0d17f39d4a)\n  - 3、对项目代码做快照，为了以后补丁打包时对比那些java文件发生了变化\n  - 4、对当前项目的所以依赖做快照，为了以后补丁打包时对比依赖是否发生了变化，如果变化需要清除缓存\n  - 5、调用真正的transform生成dex\n  - 6、缓存生成的dex，并且把fastdex-runtime.dex插入到dex列表中，假如生成了两个dex，classes.dex classes2.dex 需要做一下操作\n     fastdex-runtime.dex =\u003e classes.dex\n     classes.dex         =\u003e classes2.dex\n     classes2.dex        =\u003e classes3.dex\n     然后运行期在入口Application(fastdex.runtime.FastdexApplication)使用MultiDex把所有的dex加载进来\n  - @see [fastdex.build.transform.FastdexDexTransform](https://github.com/typ0520/fastdex/blob/master/fastdex-gradle/src/main/groovy/fastdex/build/transform/FastdexDexTransform.groovy)\n  - 7、保存资源映射表，为了保持id的值一致，详情看\n  - @see [fastdex.build.task.FastdexResourceIdTask](https://github.com/typ0520/fastdex/blob/master/fastdex-gradle/src/main/groovy/fastdex/build/task/FastdexResourceIdTask.groovy)\n\n\n##### 补丁打包时的流程\n  - 1、检查缓存的有效性\n  - @see [fastdex.build.variant.FastdexVariant](https://github.com/typ0520/fastdex/blob/master/fastdex-gradle/src/main/groovy/fastdex/build/variant/FastdexVariant.groovy) 的prepareEnv方法说明\n  - 2、扫描所有变化的java文件并编译成class\n  - @see [fastdex.build.task.FastdexCustomJavacTask](https://github.com/typ0520/fastdex/blob/master/fastdex-gradle/src/main/groovy/fastdex/build/task/FastdexCustomJavacTask.groovy)\n  - 3、合并所有变化的class并生成jar包\n  - 4、生成补丁dex\n  - 5、把所有的dex按照一定规律放在transformClassesWithMultidexlistFor${variantName}任务的输出目录\n     fastdex-runtime.dex    =\u003e classes.dex\n     patch.dex              =\u003e classes2.dex\n     dex_cache.classes.dex  =\u003e classes3.dex\n     dex_cache.classes2.dex =\u003e classes4.dex\n     dex_cache.classesN.dex =\u003e classes(N + 2).dex\n\n## Thanks\n[Instant Run](https://developer.android.com/studio/run/index.html#instant-run)\n\n[Tinker](https://github.com/Tencent/tinker)\n\n[Freeline](https://github.com/alibaba/freeline)\n\n[安卓App热补丁动态修复技术介绍](https://mp.weixin.qq.com/s?__biz=MzI1MTA1MzM2Nw==\u0026mid=400118620\u0026idx=1\u0026sn=b4fdd5055731290eef12ad0d17f39d4a)\n\n[Android应用程序资源的编译和打包过程分析](http://blog.csdn.net/luoshengyang/article/details/8744683)\n  \n  \n  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftyp0520%2Ffastdex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftyp0520%2Ffastdex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftyp0520%2Ffastdex/lists"}