Fork me on GitHub

TemplateBuilder(中文版)

将Android Studio Template的开发过程集成于Android Studio Plugin中,只需要一键就能将当前文件制作为Template。

Android Studio的模板包括以下三种,这里讲的是第三种Multi Template。在阅读本文之前,默认你是了解该模板的,知道为什么要使用它,如果不清楚它是什么,可以在网上查阅相关资料,当然也可以直接点击这里查看一下同行们对它的评价

  • Live Template:代码片段级别
  • File Template:单文件级别
  • Multi Template:多个文件级别(以下称 Android Studio Template

WHAT

TemplateBuilder是一款能够帮助我们快速生成Android Studio Template的AS插件,将通过逐个文件去配置模板的方式改进为通过插件来实现,对于简单的模板制作,只需要一键即可生成。

HOW

安装

打开Android Studio,PreferencesPluginsBrown Repositories, 搜索TemplateBuilder 并下载,下载之后重启IDE即可使用。

使用

动态图展示

先直接贴上Gif的演示效果,分别对应模板的导出与导入

导出: 选择待导出的文件或文件夹,按下ALT + T,在弹出界面中更改模板名称(MVP Test)和描述后直接Finish,然后重启IDE;

导入: 选择一个包,按下Command + N键,输入模板分类名(默认为电脑用户名),选择MVP Test模板进行导入。

快速制作

这里我们拿对一个MVP模板的抽取来举例,首先选中需要制作为模板的类文件(如果需要选中某个文件夹里的全部文件,可以直接选中该文件夹),然后按下启动改插件的快捷键ALT + T,便能看到如下界面

下面来说明一下该界面对应的内容

  • Template Category 对应模板的分类,对应选择导入模板时的模板分类,这里默认值是电脑的用户名。
  • Template Name 对应模板名称,对应选择导入模板时的模板名称,默认值是当前的Project名称。
  • Template Description 对应模板描述信息,对应导入模板时弹出的导入界面的文字描述,默认为空。
  • Template Folder 对应生成模板所存放的位置,如果是Mac操作系统则默认为/Applications/Android Studio.app/Contents/plugins/android/lib/templates, Windows系统的话由于差异比较大,就默认为空了,可以自行配置[Android Studio安装目录]/plugins/android/lib/templates(这里只需要配置一次即可,插件将自动保存该位置)。
  • Input data区域 (见下:配置模板变量

如果你只是想简单抽取你写的这个模板,你只需要输入下Template NameTemplate Description即可,当然如果你不想输入的话这也可以省略掉。接下来直接点击Finish,就能在IDE底部看到弹出如下图所示的提示,此时你已经制作成功,重启IDE即可使用该模板。

到这里,如果你了解Android Studio Template制作流程的话,你可能觉得相对于完全自己手动去做这样固然简单,但是灵活性上降低了不少。例如模板中有组价依赖关系的时候,你需要在build.gradle.ftl中去添加对应的依赖;导入模板之后你想自动打开某个文件时,你需要编辑recipe.xml.ftl;选择模板适用于哪个版本时,你需要编辑template.xml等等。如果你有这方面的需求,可以点击Next来代替Finish,点击之后你就能看到如下界面,在这里提供了所有你需要关注的配置文件的编辑,编辑完成直接点击OK开始自动生成。

配置模板变量

在上面的界面中可以看到Input data区域,它对应着导入模板时的变量输入,如果你想增强模板的可配性将会用到它,它就对应着AS模板中template.xml<parameter />标签,也就是下面的每一个配置项。

关于Input data的使用,先解释下每个属性对应的含义

  • id 变量名,必须和模板中使用的变量名对应,必填
  • name 变量简介,必填
  • type 变量类型,string和boolean两种,通过下拉框选择,必填
  • default 变量对应的默认值,选填
  • help 添加该变量时的提示信息,选填

下面我举个例子,假设待导出的模板文件是UserActivity类,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
public class UserActivity extends Activity {

private TextView mUserName;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user);
mUserName = (TextView) findViewById(R.id.user_name);
}

}

代码很简单,假设我们想让引入模板时mUserName属性名是可配的,并且在Activity中是否调用setContentView方法也是可配的,那我们就需要这样改写该类:

1
2
3
4
5
6
7
8
9
10
11
12
13
public class UserActivity extends Activity {

private TextView ${textViewName};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
<#if setContentView>
setContentView(R.layout.activity_user);
${textViewName} = (TextView) findViewById(R.id.user_name);
</#if>
}
}

我们用到了textViewNamesetContentView两个变量,所以当我们按下ALT + T时就要在对应的Input data区域点击Add来添加两个对应的变量。

Input data textViewName setContentView
id textViewName setContentView
type string boolean
name TextView属性名 是否设置布局
default mUserName false
help 输入TextView对应的属性名 勾选则设置布局文件,反之不设置

添加完模板变量后导出,重启IDE选择导入该模板,此时便能看到刚才配置的两个变量,你可以输入不同的值来验证模板的正确性。

添加模板依赖

模板中需要添加gradle依赖时,点击Next在第二个页面中build.gradle.ftl添加如下所示对应的仓库和依赖即可。

1
2
3
4
5
6
7
8
9
repositories {
// 如果仓库是jcenter(),则可省略
jcenter()
}

dependencies {
compile 'io.reactivex.rxjava2:rxjava:2.0.6'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
}

WHY

如果你尝试过自己去制作一个Android Studio Template的话,相信你一定会为模板配置、更改文件名、添加可配参数等等繁琐的操作而烦恼,因为哪怕一个很简单的模板抽取都需要把这一系列流程全都走一遍,更改好几个配置文件。

说下我的个人感受,当我发现Android Studio Template时我顿时感觉有太多太多可以抽取出来的模板以供日后快速使用,但当我刚开始抽取几个模板的时候就已经被深深的恶心到了,因为这个过程真心很繁琐。记得当时还专门写groovy脚本来辅助进行这些模板的配置,但也还是需要向脚本里添加一些模板文件的入参信息,依然很麻烦。后来我决定将这个制作过程尽可能通过自动化来完成,当时考虑Gradle插件Java GUIAS Plugin等多种方式来完成模板制作,最终选择了快而方便的AS Plugin,插件的名称就是上面所提到的TemplateBuilder


------------- The end -------------