TemplateBuilder(中文版)

Posted by Puke on 2017-03-06
将Android Studio Template的开发过程集成于Android Studio Plugin中,只需要一键就能将当前文件制作为Template。

文章目录
  1. 1. WHAT
  2. 2. HOW
    1. 2.1. 安装
    2. 2.2. 使用
      1. 2.2.1. 动态图展示
      2. 2.2.2. 快速制作
      3. 2.2.3. 配置模板变量
      4. 2.2.4. 添加模板依赖
  3. 3. WHY

English Version

声明

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