Android-Resource-Usage-Count

插件地址: Jetbrains Plugin Page

Github 地址: Android-Resource-Usage-Count

插件说明

使用 IntelliJ IDEA 或者 Android Studio 打开 Android 项目的资源文件时, 会自动对文件中的资源标签统计其被引用次数, 展示在标签的前面, 统计结果会过滤 build 路径和 bin 路径的引用.

  • 支持的标签:

    • array
    • attr
    • bool
    • color
    • declare-styleable
    • dimen
    • drawable
    • eat-comment
    • fraction
    • integer
    • integer-array
    • item
    • plurals
    • string
    • string-array
    • style
  • 颜色说明:

    • 0 - 灰色
    • 1 - 蓝色
    • 其他 - 红色
    • 可以在 Preferences - Other Settings - Android Resource Usage Count 中自定义颜色

开发背景

在 Android 项目开发过程中, 我一直都是把各种 string color 等资源定义在资源文件中, 再在代码中引用它. 如果有新的 string 或者 color, 我会先对比一下是否存在, 如果存在直接使用, 不存在才创建新的资源文件.

但是资源文件可能会改动, 经常产品需要改动一个 string, 或者设计需要改动一个 color, 我都要先手动在那个资源文件上右键 - Find Usage , 引用次数为1就直接改动这个标签内容, 否则要新建一个标签. 但是觉得每次都要搜索很繁琐, 所以才产生了开发这个插件的想法, 直接显示每个资源文件的引用次数.

开发过程

其实插件开发的文档还是比较少的, 官网 提供的只是一个通用的开发过程, 按照文档你可以顺利创建项目, 然后就懵 B 了.

不过这里也是因为不同的插件需求不同, 所以还是建议想清楚自己想实现的功能和展示方式, 再多参考一下已有的系统功能怎么实现的, 已有的开源库怎么实现的, 最后当然是善用搜索.

说说我自己的开发过程, 我前期想实现的效果是

  1. 打开资源文件时自动对每个标签统计引用次数. (功能)
  2. 在标签上以 hint 的形式展示其引用次数. (展示形式)

先说功能这块:

  • 开发的时候我也是先从一个大多数例子都会提到的 Action 开始, 可是我怎么也找不到自己想要的 Action (打开某个资源文件). 最后只好随便建一个 Action 作为触发按钮, 先实现 FindUsage 的功能.

  • 然后在实现 FindUsage 的功能时, 直接参考系统的 FindUsageAction 类, 还可以通过 debug 模式直接断点代码, 简直不能更爽. 根据 FindUsageAction 类的实现过程, 把核心代码复制到自己的工具类, 简单修改后就实现了功能. 这里要说明的是, 尽量使用老版本的代码, 新版本的代码可能会在老版本上找不到方法而报错.

然后是展示形式:

  • 一开始我是希望像 Methods Count 这样
    不过我找不到它是怎么实现的…尴尬
  • 后面翻到了 LineMarkerProvider 这个类, 感觉这也是一种实现形式, 查看一下实现后也很简单, 最重要的是 LineMarkerProvider 是通过打开文件触发, 我还不用去找 Action 了.

最后是设置界面:

打包发布

  • 打包主要按照 官网 操作.
  • 发布时, 在提交页面提交 jar 包后会进去编辑页面, 在 Supported products 模块去掉勾选 Determine supported products by dependencies in plugin.xml, 改为自定义支持所需平台就好. 我发布时发现 plugin.xml 无法解析 com.intellij.modules.androidstudio, 不知道是我的问题还是写法不对.

已知问题

  1. 插件是由 LineMarkerProvider 来实现的, 打开文件会自动触发搜索统计操作. 但是有时候统计结果显示比较慢, 如果没有显示, 可以尝试重新打开文件/编辑文件/等待.

写在最后

因为自己在开发插件方面的经历实在有限, 这个插件也是根据自己的需求而实现的. 一方面是想看看大家是否也会有这样的需求, 另一方面也是希望大家可以多帮忙看看代码, 有没有更好的实现或者插件本身有值得改进的地方, 博客通知不及时, 如果遇到问题多多去 Github 上提 Issues 交流吧~