{"id":15026384,"url":"https://github.com/iqiyi/qigsaw","last_synced_at":"2025-05-15T16:08:22.402Z","repository":{"id":39953929,"uuid":"193444509","full_name":"iqiyi/Qigsaw","owner":"iqiyi","description":"🔥🔥Qigsaw ['tʃɪɡsɔ] is a dynamic modularization library which is based on Android App Bundles(Do not need Google Play Service). It supports dynamic delivery for split APKs without reinstalling the base one.","archived":false,"fork":false,"pushed_at":"2023-10-25T03:57:57.000Z","size":68305,"stargazers_count":1686,"open_issues_count":39,"forks_count":272,"subscribers_count":52,"default_branch":"master","last_synced_at":"2025-04-07T21:14:49.656Z","etag":null,"topics":["android","android-app-bundle","dynamic","iqiyi","java","play","play-core","plugin-framework","split-apk"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iqiyi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.MD","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2019-06-24T06:09:28.000Z","updated_at":"2025-03-31T14:31:38.000Z","dependencies_parsed_at":"2024-01-15T16:44:27.017Z","dependency_job_id":null,"html_url":"https://github.com/iqiyi/Qigsaw","commit_stats":null,"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iqiyi%2FQigsaw","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iqiyi%2FQigsaw/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iqiyi%2FQigsaw/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iqiyi%2FQigsaw/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iqiyi","download_url":"https://codeload.github.com/iqiyi/Qigsaw/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254374475,"owners_count":22060611,"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":["android","android-app-bundle","dynamic","iqiyi","java","play","play-core","plugin-framework","split-apk"],"created_at":"2024-09-24T20:04:23.633Z","updated_at":"2025-05-15T16:08:17.391Z","avatar_url":"https://github.com/iqiyi.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Qigsaw\n\n![](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat)\n![](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat)\n![](https://img.shields.io/badge/release-1.4.1-red.svg?style=flat)\n\nQigsaw is a dynamic modularization library which is based on [Android App Bundles](https://developer.android.com/guide/app-bundle/). It supports dynamic delivery for split APK without reinstalling the base one.\n\n[README 中文版](./README.zh-CN.md)\n\n![qigsaw](./assets/qigsaw.png)\n\n## Getting started\n\nImport qigsaw-gradle-plugin as a dependency in your main `build.gradle` in the root of your project:\n\n```gradle\nbuildscript {\n    dependencies {\n        classpath 'com.iqiyi.android.qigsaw:gradle-plugin:1.4.1-hotfix01'\n    }\n}\n```\nThen \"apply\" the plugin and import dependencies by adding the following lines to your `app/build.gradle`.\n\n```gradle\ndependencies {\n    //qigsaw core lib\n    implementation \"com.iqiyi.android.qigsaw:splitcore:1.4.1-hotfix01\"\n}\n...\n...\napply plugin: 'com.iqiyi.qigsaw.application'\n```\nAt Last, \"apply\" another plugin by adding the following lines to your `dynamicfeature/build.gradle`.\n\n```gradle\n...\n...\napply plugin: 'com.iqiyi.qigsaw.dynamicfeature'\n```\nConsidering that every app has its own downloader, qigsaw just provides an interface Downloader and you are expected to implement it. Learn more from the sample [SampleDownloader](./app/src/main/java/com/iqiyi/qigsaw/sample/downloader/SampleDownloader.java).\n\nQigsaw-gradle-plugin will upload split APKs which require dynamic delivery during compilation, so you have to implement SplitApkUploader to upload split APKs to your own CND server. Learn more from the sample [SampleSplitApkUploader](./qigsaw-android-sample/buildSrc/src/main/groovy/com/iqiyi/qigsaw/buildtool/gradle/sample/upload/SampleSplitApkUploader.groovy).\n\nHow to install qigsaw? Learn more from the sample [QigsawApplication](./app/src/main/java/com/iqiyi/qigsaw/sample/QigsawApplication.java).\n\nFor proguard, we have already made the proguard config automatically via qigsaw-gradle-plugin.\n\nFor multiDex, learn more from the sample [multidexkeep.pro](./app/multidexkeep.pro).\n\nFor more qigsaw configurations, learn more from the sample [app/build.gradle](./app/build.gradle).\n\nHow to install split APKs? Qigsaw provides the same APIs to [Play Core Library](https://developer.android.com/guide/app-bundle/playcore#monitor_requests), so you may read google developer docs to install.\n\nHow to build base and split APKs? During development, you may use `qigsawAssembleDebug` task or just click `Run` app in Android Studio to build. When releasing your app, use `qigsawAssembleRelease` task to build.\n\nHow to update splits? Please see our [Split Update Guide](./SPLIT_UPDATE_GUIDE.MD).\n\n## Known Issues\nThere are some issues which Qigsaw can't update or support at present.\n\n1. Can't update split AndroidManifest.xml dynamically, for example adding Android Component.\n2. Can't update base APK dynamically.\n3. Doesn't support Android OS version lower than 4.0.\n4. Doesn't support incremental update for split APK.\n5. Learn more from the [Known issues](https://developer.android.com/guide/app-bundle/#known_issues) about Android App Bundle.\n\n## Extensive Functions\n\nQigsaw supports some functions which Android App Bundle doesn't yet.\n\n1. Supports to declare Application in split AndroidManifest. Qigsaw will invoke `Applicaton#attachBaseContext` and `Applicaton#onCreate` methods for split application.\n2. Supports to declare ContentProvider in split AndroidManifest.\n\n## Support\n\n1. Learn more from [qigsaw-sample-android](./qigsaw-android-sample).\n2. Study the source code.\n3. Check [wiki](https://github.com/iqiyi/Qigsaw/wiki) or FAQ for help.\n4. Contact us \u003ca href=\"mailto:kisson_cjw@hotmail.com\"\u003ekisson_cjw@hotmail.com\u003c/a\u003e.\n5. Join QQ group chat.\n\n![qigsaw_qq_group_chat](./assets/qigsaw_qq_group_chat.jpeg)\n\n## Contributing\n\nFor more information about contributing, issues or pull requests, please check our [Qigsaw Contributing Guide](./CONTRIBUTING.MD).\n\n## License\n\nQigsaw is MIT licensed. Read the [LICENSE](./LICENSE) file for detail.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiqiyi%2Fqigsaw","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiqiyi%2Fqigsaw","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiqiyi%2Fqigsaw/lists"}