如何用Spotless规范Android项目代码风格:PhotoAffix完整教程
如何用Spotless规范Android项目代码风格PhotoAffix完整教程【免费下载链接】photo-affix Stitch your photos together vertically or horizontally easily!项目地址: https://gitcode.com/gh_mirrors/ph/photo-affixPhotoAffix 是一款开源的 Android 图片拼接应用可以把多张照片轻松竖向或横向拼成长图。本文以它为例带你完整走一遍用Spotless规范 Java / Kotlin 代码风格的实战流程——从引入插件到配置规则新手也能照做。为什么用 Spotless 规范 Android 代码风格代码风格不统一是团队协作中最常见的问题缩进 2 还是 4import 顺序谁说了算文件末尾要不要换行Spotless 是 Android 社区事实上的代码格式化标准它的核心优势✅一键格式化跑一条命令全项目代码自动统一✅零心理负担格式化交给工具Code Review 只看逻辑✅CI 友好可以挂到持续集成里风格不合格直接拦截✅多语言支持Java、Kotlin、Groovy、XML、SQL 都能管第一步在 build.gradle 引入 Spotless 插件在根目录 build.gradle 的buildscript中声明插件依赖classpath com.diffplug.spotless:spotless-plugin-gradle: versions.spotlessPlugin版本号不写死在build.gradle里而是集中放在 dependencies.gradle 中管理spotlessPlugin : 3.18.0小技巧所有依赖版本集中到一个文件管理升级时只改一处这是 PhotoAffix 值得借鉴的工程习惯。第二步编写核心规则文件 spotless.gradle整个风格规则集中在 spotless.gradle 一个文件里只有不到 20 行apply plugin: com.diffplug.gradle.spotless spotless { java { target **/*.java trimTrailingWhitespace() removeUnusedImports() googleJavaFormat() endWithNewline() } kotlin { target **/*.kt ktlint().userData([indent_size: 2, continuation_indent_size: 2]) licenseHeaderFile ../spotless.license.kt trimTrailingWhitespace() endWithNewline() } }逐条拆解这套组合拳规则作用googleJavaFormat()Java 代码采用 Google Java 官方风格ktlint()Kotlin 代码采用社区主流 linter 规则indent_size: 2强制 2 空格缩进Android 惯例trimTrailingWhitespace()清除行尾多余空格removeUnusedImports()自动删除没用的 importendWithNewline()文件末尾必须有一个换行licenseHeaderFile每个源码文件自动加上许可头部第三步用 licenseHeaderFile 自动加 Apache 许可头许可头模板单独放在 spotless.license.kt 中内容是标准的 Apache License 2.0 声明。配置生效后所有 Kotlin 文件开头都会被自动补上许可头比如 App.kt/** * Designed and developed by Aidan Follestad (afollestad) * * Licensed under the Apache License, Version 2.0 (the License); * ... */你完全不需要手动复制粘贴——新建文件跑一次格式化就自动加好。两条命令搞定日常使用Spotless 的使用只需要记住两条 Gradle 命令# 自动修复全项目代码风格开发时随手跑 ./gradlew spotlessApply # 只检查不修改发现不合规就报错CI 流水线用 ./gradlew spotlessCheck推荐工作流写代码时随便写提交前跑一次spotlessApplyCI 上用spotlessCheck兜底拦截。多模块项目一套规则覆盖 6 个子模块PhotoAffix 是个典型的多模块 Android 项目settings.gradle 中定义了 6 个模块include :app, :viewcomponents, :prefs, :utilities, :dialogs, :engine由于target **/*.kt用的是全项目通配符根目录这一份spotless.gradle就能同时管住 engine/图片拼接核心引擎、dialogs/设置对话框、utilities/工具类等所有模块——规则一处定义处处生效这正是 Spotless 在多模块项目里省心的地方。总结PhotoAffix 的 Spotless 配置速查文件职责build.gradle声明 Spotless 插件依赖dependencies.gradle统一管理插件版本号spotless.gradleJava Kotlin 风格规则spotless.license.kt源码文件许可头模板3 步落地清单①build.gradle加插件 → ② 仿照上面写好spotless.gradle→ ③ 跑./gradlew spotlessApply。从此代码风格之争永久结案。✍️【免费下载链接】photo-affix Stitch your photos together vertically or horizontally easily!项目地址: https://gitcode.com/gh_mirrors/ph/photo-affix创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

SwiftyTimer 完整 API 参考指南:从 Timer.after 到 new(every:) 的全部方法详解与示例

SwiftyTimer 完整 API 参考指南:从 Timer.after 到 new(every:) 的全部方法详解与示例

SwiftyTimer 完整 API 参考指南:从 Timer.after 到 new(every:) 的全部方法详解与示例 【免费下载链接】SwiftyTimer Swifty API for NSTimer 项目地址: https://gitcode.com/gh_mirrors/sw/SwiftyTimer SwiftyTimer 是一款轻量级的 Swift 计时器工具库&…

2026/11/2 18:46:09 阅读更多 →
2026 Embedding 向量嵌入:AI 靠什么“看懂“你的话?MonkeyCode 免费上手

2026 Embedding 向量嵌入:AI 靠什么“看懂“你的话?MonkeyCode 免费上手

2026 Embedding 向量嵌入:AI 靠什么"看懂"你的话?产品经理小陈被老板一句话问住了:“AI 客服明明接上了咱们 2 万条 FAQ,为什么用户问"退款几天到账”,它却答非所问?"问题出在——匹配…

2026/11/13 5:11:04 阅读更多 →
Postman接口测试(断言、关联、参数化、输出测试报告)

Postman接口测试(断言、关联、参数化、输出测试报告)

基本界面展示Get、Post请求Postman断言使用postman来判断预期结果与实际结果是否一致响应状态码断言响应包含字符串断言判断字符串的格式关联用于解决http请求之间存在依赖关系依赖:一个http请求的响应结果中的数据,被另一个请求使用登录 http请求&#…

2026/10/25 10:33:45 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/12 5:00:00 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/12 5:13:20 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/12 5:13:20 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/12 18:22:26 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/12 18:22:25 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/12 5:13:20 阅读更多 →

日新闻

周新闻

月新闻