如何禁止团队使用Material 3 Compose的Button组件或标记其禁用?
一、完全禁止访问(编译报错强制阻止)
最直接的方式是通过同名类覆盖+废弃注解,让团队成员无法正常使用Material3的Button:
- 在项目中创建与Material3 Button完全同名的类,包名必须为
androidx.compose.material3:
package androidx.compose.material3 import androidx.compose.runtime.Composable @Deprecated( message = "禁止使用Material3原生Button,请使用项目自定义的Button组件", level = DeprecationLevel.ERROR ) @Composable fun Button( onClick: () -> Unit, content: @Composable () -> Unit ) { error("当前组件已被禁用,请切换至项目自定义Button") }
只要团队成员导入并使用androidx.compose.material3.Button,编译阶段就会直接抛出错误,强制其改用自定义组件。
注意:要确保这个类被项目所有模块依赖,比如放在公共基础模块中,让其他模块都能引用到。
二、添加“请勿使用”标记(警告提示)
如果不想完全阻断,仅做提示引导,可以调整废弃注解的级别为警告,甚至自动转发到自定义组件:
- 同样创建同名类,将废弃级别设为
WARNING:
package androidx.compose.material3 import androidx.compose.runtime.Composable import com.yourproject.ui.components.CustomButton // 替换为你的自定义Button路径 @Deprecated( message = "优先使用项目自定义的CustomButton组件,不推荐使用Material3原生Button", level = DeprecationLevel.WARNING ) @Composable fun Button( onClick: () -> Unit, content: @Composable () -> Unit ) { // 自动转发到自定义Button,兼容旧代码同时引导替换 CustomButton(onClick = onClick, content = content) }
这样成员使用原生Button时会收到编译警告,且代码实际运行时会调用自定义组件,实现平滑过渡。
三、进阶方案:自定义Lint规则
如果需要更灵活的检测(比如扫描全项目代码、自定义提示文案),可以编写自定义Lint规则:
- 实现一个Lint检测器,扫描代码中是否引用了
androidx.compose.material3.Button - 触发时抛出警告或错误,引导团队使用自定义组件
- 将规则打包为Lint库,方便在多模块项目中统一配置
内容的提问来源于stack exchange,提问作者Cameron Henige
相关产品推荐
相关产品推荐

