gradle插件id必须符合反向域名规范:全小写、仅含字母数字点号和连字符,以公司域名倒序开头(如com.example),推荐三级结构;命名错误会导致插件无法解析或类加载失败。

Gradle插件ID必须符合反向域名规范
Gradle插件ID不是随便起的字符串,它本质是插件的全局唯一标识符,用于plugins {}块中引用。如果命名不合规,apply plugin: 'xxx'或plugins { id 'xxx' }会直接失败,报Plugin with id 'xxx' not found或更隐蔽的Could not resolve plugin错误。
必须满足以下三点:
- 全部小写字母、数字、连字符(
-)和点号(.),不能含下划线、大写字母或空格 - 以反向域名开头,比如你公司域名为
example.com,就应从com.example开始 - 推荐用三级结构:
com.example.build(团队/领域)、com.example.build.versioning(具体功能)
为什么不能用myplugin或android-utils这类名字
短名看似方便,但实际踩坑极多:
-
myplugin:没有命名空间,和别人写的同名插件冲突概率极高;本地测试时可能误加载了缓存中的旧版本 -
android-utils:含大写字母,Gradle解析时直接抛Invalid plugin id;且未体现归属,CI上多人协作时无法判断来源 -
com.example.MyPlugin:含大写,同样非法;Gradle只认全小写ID
正确示例:com.example.android.apk-namer、com.company.infra.gradle-cache-tuner
在resources/META-INF/gradle-plugins/里配错ID会怎样
这是最容易被忽略的硬性绑定点。插件JAR包里的xxx.properties文件内容必须和代码中implementation-class=的值严格对应,且这个xxx就是你在build脚本里写的ID。
- 文件名写成
my-plugin.properties,但build.gradle里写id 'com.example.myplugin'→ 找不到插件 - 文件里写
implementation-class=com.example.MyPlugin(类名带大写)→ 类加载失败,报ClassNotFoundException - 多个插件共用一个properties文件(比如都叫
build.properties)→ Gradle随机加载其中一个,行为不可控
企业级项目建议加版本前缀或环境标识
当团队维护多个插件,或需区分内部/对外发布时,ID本身可携带轻量语义:
- 用
-internal后缀标示仅限CI使用的插件:com.example.build.signing-internal - 避免用
-v1或-2024这类易过期的版本号,ID应长期稳定;版本信息放在plugins { id 'xxx' version '1.2.0' }里管理 - Android项目慎用
android-前缀——AGP官方插件已占位,自定义插件起名如android-apk-namer可能触发AGP内部冲突或警告
ID一旦发布到私有仓库并被下游项目依赖,就几乎不可更改。起名时多花两分钟查重、验证格式,能省掉后续所有人排查Plugin resolution failed的时间。











