如何让Checkstyle的CustomImportOrder与Android Studio正常适配?
问题根源
Android Studio 默认的导入排序采用分组优先、同组内字典序的逻辑,默认分组顺序从上到下为:
android.*/androidx.*开头的系统框架包- 所有其他第三方包(包括
coil.*、org.json.*等非系统包) java.*/javax.*开头的JDK内置包kotlin.*开头的Kotlin标准库包
你遇到的Checkstyle违规是因为当前使用的Checkstyle导入排序规则和Android Studio默认规则不匹配:
- 报错
Wrong lexicographical order for 'coil.Coil' import. Should be before 'java.util.concurrent.TimeUnit':说明你的Checkstyle规则要求所有导入按纯字典序排序,字母c的序位在j之前,所以要求coil包放在java包前面 - 报错
Wrong lexicographical order for 'java.util.Map' import. Should be before 'org.json.JSONObject':说明你的Checkstyle规则的分组逻辑是把java.*包放在org.*等第三方包前面,和Android Studio默认把所有第三方包放在java包前面的逻辑相反。
解决方案1:自定义Android Studio导入排序适配Checkstyle
你可以直接调整Android Studio的导入排序规则,和当前的Checkstyle规则对齐:
- 打开设置路径:
File > Settings > Editor > Code Style > Java(Kotlin代码请切换到Kotlin标签页) - 切换到
Imports标签,找到Import Layout配置区域 - 可以拖动调整分组的先后顺序、新增/删除自定义分组,也可以勾选
Sort imports alphabetically实现全导入纯字典序排序,调整完成后后续使用自动导入、优化导入功能就不会再触发违规。
解决方案2:调整Checkstyle配置适配Android Studio默认逻辑
如果不想修改Android Studio的默认排序习惯,可以修改Checkstyle的ImportOrder规则配置,示例配置如下:
<module name="ImportOrder"> <!-- 分组顺序和Android Studio默认对齐:androidx/android > 第三方包 > java/javax > kotlin --> <property name="groups" value="^android\..*,^androidx\..*,*,^java\..*,^javax\..*,^kotlin\..*"/> <!-- 同组内按字典序排序 --> <property name="ordered" value="true"/> <!-- 静态导入也按字典序排序 --> <property name="sortStaticImportsAlphabetically" value="true"/> <!-- 分组之间用空行分隔 --> <property name="separatedByBlankLines" value="true"/> </module>
配置更新后重新执行Checkstyle检查即可和Android Studio默认的导入排序逻辑对齐。
内容的提问来源于stack exchange,提问作者Teng-pao Yu
相关产品推荐
相关产品推荐

