{"id":15056563,"url":"https://github.com/tangpj/calces-gradle-plugin","last_synced_at":"2025-07-19T05:08:40.927Z","repository":{"id":171027381,"uuid":"136587193","full_name":"tangpj/calces-gradle-plugin","owner":"tangpj","description":"Android构建工具集：包含快速实现组件化构建脚本，快速实现屏幕最小宽度适配脚本","archived":false,"fork":false,"pushed_at":"2021-02-03T07:53:33.000Z","size":553,"stargazers_count":383,"open_issues_count":0,"forks_count":47,"subscribers_count":18,"default_branch":"master","last_synced_at":"2025-05-19T13:07:06.837Z","etag":null,"topics":["android","android-architecture","android-library","gradle","gradle-plugin","groovy","screen"],"latest_commit_sha":null,"homepage":"","language":"Groovy","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tangpj.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-06-08T08:03:05.000Z","updated_at":"2024-11-25T04:15:21.000Z","dependencies_parsed_at":null,"dependency_job_id":"47b0a0b3-9877-4cb5-ac08-718b675fcf83","html_url":"https://github.com/tangpj/calces-gradle-plugin","commit_stats":null,"previous_names":["tangpj/calces-gradle-plugin"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tangpj/calces-gradle-plugin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tangpj%2Fcalces-gradle-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tangpj%2Fcalces-gradle-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tangpj%2Fcalces-gradle-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tangpj%2Fcalces-gradle-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tangpj","download_url":"https://codeload.github.com/tangpj/calces-gradle-plugin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tangpj%2Fcalces-gradle-plugin/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265892321,"owners_count":23845009,"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-architecture","android-library","gradle","gradle-plugin","groovy","screen"],"created_at":"2024-09-24T21:53:19.988Z","updated_at":"2025-07-19T05:08:40.888Z","avatar_url":"https://github.com/tangpj.png","language":"Groovy","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align-\"center\"\u003e\n\n\u003cimg src=\"https://raw.githubusercontent.com/DobbyTang/MarkdownRes/master/github/calces_logo.jpg\" alt=\"Material Render Phone\"\u003e\n\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003e\u003ca href=\"http://tangpj.com/\" target=\"_blank\"\u003eCalces\u003c/a\u003e\u003c/h1\u003e\n\n\u003e 🍭wow Android辅助构建工具，机械性工作交给我来处理，把时间用在更有价值的工作上。\n\n\u003cp align=\"center\"\u003e\n\u003cimg alt=\"compnent version\" src=\"https://img.shields.io/badge/calces.screen-1.3.4--alpha02-brightgreen.svg\"/\u003e\n\u003cimg alt=\"screen version\" src=\"https://img.shields.io/badge/calces.screen-3.3.0--alpha01-brightgreen.svg\"/\u003e\n\u003ca href=\"https://plugins.gradle.org/plugin/calces.appconfig\"\u003e\u003cimg alt=\"AppConfig\" src=\"https://img.shields.io/badge/plugin-appConfig-blue.svg\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://plugins.gradle.org/plugin/calces.modules\"\u003e\u003cimg alt=\"Modules\" src=\"https://img.shields.io/badge/plugin-modules-yellowgreen.svg\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://plugins.gradle.org/plugin/calces.screen\"\u003e\u003cimg alt=\"Modules\" src=\"https://img.shields.io/badge/plugin-screen-%23B2EBF2.svg\"/\u003e\u003c/a\u003e\n\u003ca href=\"http://tangpj.com\"\u003e\u003cimg alt=\"Author\" src=\"https://img.shields.io/badge/author-Tangpj-ff69b4.svg\"/\u003e\u003c/a\u003e\n\u003ca href=\"http://groovy-lang.org/\"\u003e\u003cimg alt=\"Gradle\" src=\"https://img.shields.io/badge/groovy-2.4.12-orange.svg\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://developer.android.com/studio/releases/gradle-plugin\"\u003e\u003cimg alt=\"Gradle\" src=\"https://img.shields.io/badge/build%3Agradle-3.2.1-green.svg\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\n\n## 目录\n\n- [介绍](#介绍)\n- [教程](#教程)\n- [功能介绍](#功能介绍)\n- [快速开始](#快速开始)\n- [演示](#演示)\n- [属性介绍](#属性介绍)\n- [UPDATE](#UPDATE)\n- [TODO](#TODO)\n- [License](#License)\n\n\n\n## 介绍\nAndroid构建工具包，这个工具的主旨是使用脚本自动处理机械化的重复劳动，让开发者专注更有价值的工作。\n目前提供自动组件化控制与屏幕适配插件。\n\n- 组件化构建Gradle插件\n插件包的名字叫: component，其中提供了两个组件化辅助插件，分别叫calces.appconfig和calces.modules。\n主要的功能是: 提供Gradle配置App依赖的组件、配置组件是否能单独运行、实现多个依赖不同模块的App同时构建等。\n\n\n- 屏幕适配插件\n组件包的名字叫: screen,其中提供了calces.screen插件\n主要功能是: 根据设计稿与配置，自动生成smallestWidth适配文件，让你从此不需要再关注屏幕适配。\n\n## 教程\n- 组件化插件\n\n[Gradle自动实现Android组件化模块构建](https://tangpj.dev/2018/07/22/calces-componentization/)\n\n- 屏幕适配插件\n\n[给你一个全自动的屏幕适配方案（基于SW方案）！—— 解放你和UI的双手](https://tangpj.dev/2018/09/29/calces-screen/)\n\n## 功能介绍\n\n### 自动组件化构建插件\n- 根据Gradle配置，自动实现Android组件的构建模式（application or library）\n- 可配置多个依赖不同组件的App\n- 自动要依赖需要的组件\n- 自动配置组件独立运行（被依赖）时的AndroidManifest文件格式，即独立运行时自动配置启动Activity\n\n### 屏幕适配插件\n- 根据Gradle配置，自动生成你需要的smallestWidth适配文件\n- 自动压缩位图\n\n\n## 快速开始\n\n### 自动组件化构建插件\n1. 引入依赖库\n   在Gradle 2.1及更高版本的插件构建脚本代码：\n   在项目的build.gradle中\n\n   ```\n   buildscript {\n       ...\n   }\n   plugins {\n     id \"calces.appconfig\" version \"3.3.0-alpha01\"\n   }\n   ```\n\n   \n   在较旧版本的Gradle中或需要动态配置的情况下的插件构建脚本代码：\n\n   ```\n      buildscript {\n        repositories {\n          maven {\n            url \"https://plugins.gradle.org/m2/\"\n          }\n        }\n        dependencies {\n          classpath \"gradle.plugin.com.tangpj.tools:component:3.3.0-alpha01\"\n        }\n      }\n      \n      apply plugin: \"calces.appconfig\"\n   ```\n\n\n2. 在项目build.gradle配置AppConfig\n\n   ```groovy\n   appConfig {\n       debugEnable true\n       apps {\n           app1 {\n               mainActivity \"com.xxx.MainActivity1\"\n               modules ':modules1',\n                       ':modules2'\n           }\n   \n             app2 {\n               mainActivity \"com.xxx.MainActivity2\"\n               modules ':modules1'\n           }\n       }\n   \n       modules {\n           modules1 {\n               applicationId \"com.xxxx.modules1\"\n               mainActivity \".Modules1Activity\"\n               isRunAlone true\n           }\n   \n            modules2 {\n               applicationId \"com.xxxx.modules2\"\n               mainActivity \".Modules2Activity\"\n               isRunAlone true\n           }\n       }\n   } \n   \n   \n   ```\n\n   \n\n3. 在modules（子模块）引入模块自动化构建插件 (注意：不需要手动配置com.android.library或com.android.application)\n\n   ```groovy\n   apply plugin: 'calces.modules'\n   ```\n\n\n### 屏幕适配插件\n\n1. 引入依赖库\n   在Gradle 2.1及更高版本的插件构建脚本代码：\n   在项目的build.gradle中\n\n   ```\n   buildscript {\n       ...\n   }\n   plugins {\n     id \"calces.screen\" version \"1.3.4-alpha01\"\n   }\n   ```\n\n   \n   在较旧版本的Gradle中或需要动态配置的情况下的插件构建脚本代码：\n\n   ```\n      buildscript {\n        repositories {\n          maven {\n            url \"https://plugins.gradle.org/m2/\"\n          }\n        }\n        dependencies {\n          classpath \"gradle.plugin.com.tangpj.tools:screen:1.3.4-alpha01\"\n        }\n      }\n      \n      apply plugin: \"calces.screen\"\n   ```\n\n\n2. 在需要适配的组建上build.gradle配置Screen值\n```groovy\nscreen{\n    auto true\n    dimens{\n        designPx 375\n        smallesWidths 360,480\n        scale 3            //保留小数位，默认为2\n        scaleMode BigDecimal.ROUND_HALF_UP  //小数保留的方式\n    }\n}\n```\n\nauto 是用来确认是否需要自动生成sw文件的，会影响编译时间，如果values没有更新的话建议设置为false。\n除此之外，可以通过手动调用gradle任务来手动生成sw文件。\n\n\n## 演示\n\n[**Android-advanced-blueprint**](https://github.com/Tangpj/Android-advanced-blueprint) \n\n\n该开源项目包含了笔者关于Android进阶系列教程的示例代码，其中TodoCalces是该构建脚本的Demo。\n\n\n\n## 属性介绍\n\n### 自动组件化构建插件\n**AppConfig**\n\n- debugEnable, 布尔值\n  是否开个debug模式，只有当debugEnbale为true时，modules的isRunAlone才能生效。即modoules只能在debug模式中独立启动\n  \n- apps, String列表\n  app列表，控制当debug模式为false时的app数量与基础配置\n  \n- modules, String列表\n  组件列表，配置需要实现自动组件化控制的组件列表\n  \n\n**App（apps里面的配置项）**\n\n- name, String类型\n  app的名字，需要和项目路径对应，如果不填写默认为该配置的名字（如配置名为app的话，name则为:name）。导入规则和setting.gradle中的include规则保持一致\n- modules, String列表\n  需要依赖的组件列表，通过修改该属性实现依赖不同的组件\n- dependMethod, String类型\n  依赖的方法，默认为implementation，一般不需要配置该字段，除非有特殊需求\n- applicationId, String类型\n  动态填入applicationId。非特殊情况，建议为空\n- applicationName, String类型\n  配置启动Application（对应manifest中的application name属性）\n- mainActivity, String类型\n  配置启动Activity，为空则默认为AndroidManifest中的Activity。非特殊情况，建议为空\n\n\n**Modules（modules里的配置项）**\n\n- name, String类型\n  与app中的name一致\n- isRunAlone, 布尔值\n  该组件能否独立启动\n- applicationId, String类型\n  独立启动时的applicationId\n\n- applicationName, String类型\n  配置启动Application（对应manifest中的application name属性）\n- mainActivity, String类型\n  独立启动的Activity\n  \n### 屏幕适配插件\n**dimens( 自动化Sw屏幕适配方案配置 )**\n\n- dimensFileName, String类型\n  待转换dimensions文件名，默认为dimens(/res/values/dimens.xml)\n- designPx, int类型\n  设计稿width的px值，默认为375。需要根据设计稿的实际width值来确定\n- scale, int类型\n  保留小数位, 需要手动设置scaleMode值才会生效\n- scaleMode, int类型\n  取整方式，和BigDecimal的Sacle值一致，这里需要注意的是，必须要设置scaleMode值，scale才会生效。\n  不设置的话，默认**不**保留小数位，会把转换后的dp四舍五入成int值。\n- auto, 布尔值\n  是否自动启动转换任务，设置为false可以避免每次构建时自动检查是否转换\n  如果设置为false需要手动启动任务，任务名称为dimensCovert\n  启动方法：./gradlew dimensCovert\n- smallestWidths, int列表\n  需要适配的sw值\n\n**mipmap( 图片资源自动适配指定密度 )**\n- folder, String类型\n  待转换资源文件夹的文件夹名字，默认为mipmap，如果图片资源保存在drawable-xxx文件夹下，则设置为drawable\n- designDensity, String\n  待转换资源文件夹的密度，如xxxhdpi，会与folder组合成真正的文件夹名字。designDensity为xxxdpi, folder为mipmap时则待转换资源文件保存在mipmap-xxxhdpi路径下\n- convertDensity, String列表\n  需要转换的密度，只支持高密度图片转换为低密度图片。如待转换的图片密度为xxhdpi，则可以转换为xhdpi密度的图片，但是不能转换为xxxhdpi密度的图片\n- auto, 布尔值\n  作用与dimens的auto一样\n\n## UPDATE\n\n### Version 1.1.0\n\n- 增加applicationName属性，用于配置启动application\n- 不再直接对AndroidManifest进行修改，改成根据配置动态生成新的AndroidManifest的模式，生成目录：/app/calces\n  建议在使用版本管理的时候忽略对calces文件夹的跟踪。\n  \n### Version 1.2.0 \n- 增加ScreenPlugin屏幕适配插件\n- 可指定设计稿尺寸width，根据设计稿width值生成对应适配文件\n- 屏幕适配方案为smallestWidth方案\n\n### Version 1.2.3 \n- ScreenPlugin支持位图缩放功能\n- 可以根据配置，实现高分辨率位图自动缩放为低分辨率位图\n\n### Version 1.2.31 \n- 修复ModulesPlugin无法编译Manifest BUG\n\n### Version 1.2.42\n- screen插件提供转换文件路径控制。\n  dimens任务提供配置dimensFileName字段( 控制待转换dimensions文件的名称)\n  mipmap任务提供配置folder字段( 控制图片资源保存路径，目的时支持采用drawable保存图片资源的项目)\n- 更新com.android.tools.build:gradle插件版本到3.2.1\n\n### Version 1.2.52\n- screen插件dimens支持浮点数格式转换\n- dimens浮点数控制配置更新\n  更改为：sacle控制保留小数位，scaleMode控制小数保留模式\n  \n### 插件分离，由原来的calces插件包分离成calces.component包和calces.screen插件包\n主要目的是为了解耦，把组件化插件和屏幕适配插件分离。\n\n### calces.component version 3.3.0-alpha01\n组件化插件会依赖Android Build Plugin，所以从3.3.0版本开始，版本好会与Android Build Plugin保持一致，而alpha01则是calces.component自身的版本变化。\n\n### calces.screen version 1.3.4-alpha02\n与1.2.52功能一样，唯一的区别是能单独依赖calces.screen包，不需要再依赖整个calces插件包\n\n\n## TODO\n\n- 位图自动压缩，减少安装包体积\n- 组件版本管理支持\n- 暂时还没想到...\n  \n\n## License\n\n```\nCopyright 2018 Tang.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftangpj%2Fcalces-gradle-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftangpj%2Fcalces-gradle-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftangpj%2Fcalces-gradle-plugin/lists"}