如何用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/8/26 20:24:52 阅读更多 →
2026 Embedding 向量嵌入:AI 靠什么“看懂“你的话?MonkeyCode 免费上手

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

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

2026/8/26 20:24:52 阅读更多 →
Postman接口测试(断言、关联、参数化、输出测试报告)

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

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

2026/8/26 20:23:52 阅读更多 →

最新新闻

Claude Code新手入门:MCP、Token与Skill核心概念与实战配置指南

Claude Code新手入门:MCP、Token与Skill核心概念与实战配置指南

1. 项目概述:为什么Claude Code让新手既兴奋又困惑? 最近在开发者圈子里,Claude Code的热度居高不下。作为一个深度体验过Codex、Cursor以及各类AI编程工具的老码农,我最初接触Claude Code时,也经历了从“不明觉厉”到…

2026/8/26 20:57:12 阅读更多 →
本地免费声音克隆实战:Coqui TTS与Tortoise-TTS组合方案详解

本地免费声音克隆实战:Coqui TTS与Tortoise-TTS组合方案详解

1. 项目概述:从“云端付费”到“本地免费”的声音克隆革命如果你和我一样,曾经为了给视频配音、制作有声内容,或者只是想玩点有趣的AI语音,而对着各种云端TTS(文本转语音)服务的API价格和调用限制头疼不已&…

2026/8/26 20:57:12 阅读更多 →
算法面试核心:六大基础体系与实战技巧

算法面试核心:六大基础体系与实战技巧

1. 算法面试的核心价值与准备策略在技术岗位的招聘流程中,算法能力考察始终占据着不可替代的地位。根据我参与数百场技术面试的经验,算法题目不仅能检验候选人的编码基本功,更能反映其问题拆解、逻辑思维和优化意识等核心素质。大厂校招笔试中…

2026/8/26 20:57:12 阅读更多 →
自动驾驶技术困境与工程实践:从L4幻想到务实攻坚

自动驾驶技术困境与工程实践:从L4幻想到务实攻坚

1. 从“画饼”到“啃硬骨头”:自动驾驶的十字路口最近和几个在主机厂、Tier1做自动驾驶研发的老朋友聊天,话题总绕不开一个词:务实。前几年行业论坛上,大家开口闭口都是“L4就在眼前”、“L5是终极目标”,PPT做得一个比…

2026/8/26 20:57:12 阅读更多 →
Google 把 Agent 训练场「拆」成两层:EnvHarness + EnvRigger 让 17 位作者的论文把 5 个 benchmark 同时刷高

Google 把 Agent 训练场「拆」成两层:EnvHarness + EnvRigger 让 17 位作者的论文把 5 个 benchmark 同时刷高

Google 把 Agent 训练场「拆」成两层:EnvHarness EnvRigger 让 17 位作者的论文把 5 个 benchmark 同时刷高 Hugging Face 每日论文(2026-08-23 精选) 8 月 23 日 Hugging Face 每日论文榜的第一名(社区 307 票赞、258 票投出&am…

2026/8/26 20:57:12 阅读更多 →
蓝桥杯国赛“轨道炮”难题解析:动态规划与状态压缩实战

蓝桥杯国赛“轨道炮”难题解析:动态规划与状态压缩实战

1. 项目概述:从“轨道炮”到蓝桥杯国赛真题的深度解析看到“轨道炮”这个标题,很多人的第一反应可能是科幻电影里那种威力巨大的电磁武器。但在蓝桥杯的赛场上,尤其是在2019年国赛的A组C题(简称“国AC”)中&#xff0c…

2026/8/26 20:56:12 阅读更多 →

日新闻

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 0:00:40 阅读更多 →
《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》索引目录: 《Microsoft Sql server 2008 Internals》读书笔记--目录索引 在上篇文章中,主要介绍了创建数据库的基本语法和FileGroup的初步知识。需要注意的是: 关于FileGroup 如果你的系统是用Raid设备直接存…

2026/8/26 1:18:18 阅读更多 →
政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体已经从概念试点阶段,转入了政务服务的常态化落地应用;在实际使用过程中,它能自主理解办事需求、辅助完成填报申报、开展材料预审,并联动多个系统协同作业,真正嵌入到政务办理的全流程当中。但在落地推进过…

2026/8/26 1:18:18 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/26 14:45:33 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/26 17:46:43 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 14:46:37 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/26 17:46:39 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →