freemarker ftl模板_效率提升百分之四十,AS模板也太好用了吧
点击蓝字 轻松关注
CV 工程师你好,以下内容会让你感觉到不适,慎入!
在平时的开发工作中,我们经常将一个地方的代码,复制粘贴到另外一个地方,俗称搬砖,搬砖搬多了,作为一个资深的挨踢民工,难免会总结一些提高生产力的搬砖经验
Android Studio 模板是个提高生产力的好东西,使用过 MVPArms 的朋友,都应该使用过我提供的配套模板,使用该套模板,一键即可生成整个页面需要的所有文件,甚至还可以一键生成整个 Module,真正的解放了大家的双手,让大家的双手可以去做更多热爱的事情
Android Stuidio 模板一共有 4 种类型,分别对应不同的功能,我先来简单介绍下这 4 种模板,最后再着重介绍下一键生成 Module 的模板,因为前面 3 种模板在网上有太多优秀的教程了,而 Module 模板的资料非常少,我再重复写一遍前 3 种模板的教程也不一定有别人写得好,意义并不大,所以我前面只做简单介绍,后面会贴出一些教程链接,没了解过的就当科普了,了解过的就直接跳过
现在还差几个 star 就超过 Mozilla 在模板语言 Freemarker 中排名 star 全球第一了,让我得瑟一下?
Live Templates
Live Templates 的功能主要是根据关键字快速生成代码块
在设置中找到 Live Templates,点击红框中的按钮 "+",即可新建 Live Templates
File Templates
File Templates 顾名思义,主要功能就是一键生成单个文件
在设置中找到 File and Code Templates,点击红框中的按钮 "+",即可新建 File Templates
Activity Templates
Activity Templates 可以一键生成多个文件,但不光可以生成 Activity 文件,还可以根据需求生成任何 Java 文件、XML 文件以及其他类型的文件
新建 Activity Templates 要比上面的两个模板复杂的多,需要使用到 FreeMarker,感兴趣的朋友,可以看看我开源的 Activity Templates(https://github.com/JessYanCoding/MVPArmsTemplate),稍微修改一下就能应用到自己的项目当中
Module Templates
Module Templates 可以一键生成 Module 以及 Module 中所需要的所有文件
Module Templates 也是使用 FreeMarker 创建的,如果你能理解 Activity Templates,那你也可以快速的新建一个 Module Templates
详解 Module Templates
不知道大家了解过一键生成 Module 的 Android Stuidio 模板吗,这种类型的模板我在网上没搜到有相关的开源库和文章,所以我就自己研究了一段时间,在去年就开源给了 MVPArms 的使用者
Module Templates 其实要比 Activity Templates 简单很多,因为 Module Templates 的某些限制,导致它的配置面板不能自定义一些新增的功能,所以复杂性降低很多,但是功能性和灵活性就要弱于 Activity Templates,不过即使这样也能满足我们大部分的需求了
Android Studio 中所有的 Module Templates 都放在 gradle-projects 这个目录中(Android Studio 安装目录/plugins/android/lib/templates/gradle-projects),如果按照很多教程中对 Activity Templates 学习方法的描述,我们应该按照和 Activity Templates 一样的学习方式,打开 gradle-projects 目录中的 NewAndroidModule 进行学习
但是我可以告诉大家,在你没有足够经验的情况下,最好不要这样做,因为这个文件夹中包含着 Android Studio 创建 Android Module 所需要的所有文件和代码,里面比较复杂,有很多判断条件,很多东西对你的项目来说都用不到,在学习时会耽误你很多时间
所以为了让大家快速上手,我就用我已经开源的 Module Templates(https://github.com/JessYanCoding/MVPArms-Module-Template) 作为学习案例,里面的所有文件和代码都是经过我筛选过后提取出来的,非常易于大家学习和理解
Module Templates 结构
NewArmsComponent├── root│ ├── res //Module 中的资源文件都放这里│ ├── ├── anim│ ├── ├── layout│ ├── ├── mipmap-hdpi│ ├── ├── mipmap-xhdpi│ ├── ├── mipmap-xxhdpi│ ├── ├── mipmap-xxxhdpi│ ├── ├── values│ ├── src/app_package //Module 中的源文件模板都放这里│ ├── ├── ActivityLifecycleCallbacksImpl.java.ftl│ ├── ├── Api.java.ftl│ ├── ├── AppLifecyclesImpl.java.ftl│ ├── ├── ...│ ├── test/app_package //Module 中的测试文件模板都放这里│ ├── ├── ExampleInstrumentedTest.java.ftl│ ├── ├── ExampleUnitTest.java.ftl│ ├── AndroidManifest.xml.ftl //AndroidManifest.xml 模板文件│ ├── CMakeLists.txt.ftl //不用 CMake 可以忽略│ ├── build.gradle.ftl //App build.gradle 模板文件│ ├── native-lib.cpp.ftl //不用 C 可以忽略│ ├── root-build.gradle.ftl //根目录 build.gradle 模板文件│ ├── settings.gradle.ftl //settings.gradle 模板文件├── globals.xml.ftl├── recipe.xml.ftl├── template.xml├── template_new_project.png
root 文件夹下包含的是生成 Module 所需要的模板文件,template_new_project.png 是模板的封面图,globals.xml.ftl 我们暂时用不到,recipe.xml.ftl、template.xml 这两个文件存放的是模板的配置参数,是整个模板的核心文件,我们来看看这两个文件
template.xml
template.xml 放置的是配置面板的参数,配置面板是什么东西?看下图
Module Templates 和 Activity Templates 的配置面板不一样,Activity Templates 可以任意修改和新增配置面板中的项目,但是 Module Templates 不可以,只能固定为图中的这四项
看看 template.xml 里面的内容
<?xml version="1.0"?><templateformat="5"revision="2"name="MVPArms Module"description="Creates a new MVPArms Module.">
<category value="Application" />
<formfactor value="Things" />
----------------------- 分割线 ----------------------- <thumbs> <thumb>template_new_project.pngthumb> thumbs>
<parameterid="packageName"name="Package name"type="string"constraints="app_package|nonempty"default="com.mycompany.myapp" />
...
<globals file="globals.xml.ftl" /> <execute file="recipe.xml.ftl" />template>
只用看分割线以上的标签即可,下面的标签基本用不上,每个 parameter 标签在配置面板中都对应一个项目,但 parameter 标签只在 Activity Templates 中可以任意修改和新增,在 Module Templates 中的任何修改和新增都是无效的,这点大家可以试试
name 标签和 description 标签顾名思义,这就不用多解释了,category 标签固定为 Application 即可
这里要特别要提一下 formfactor 标签,在 NewAndroidModule 中,formfactor 标签的值为 Mobile,最开始我也和它一样,将值赋为 Mobile,结果发现无法生成文件,我想可能是 Android Studio 只允许存在一个 Android 的 Module 模板,我又试着改成了 TV、Glass、Wear ...,发现都不完美,要不是无法生成文件,要不就生成太多不需要的文件,最后改成 Things 后,效果就接近完美了
recipe.xml.ftl
recipe.xml.ftl 的功能就是告诉模板引擎,你打算怎么处理你的模板文件
<?xml version="1.0"?>
<recipe> <mkdir at="${escapeXmlAttribute(projectOut)}/libs" /> <mkdir at="${escapeXmlAttribute(resOut)}/anim" /> <mkdir at="${projectOut}/src/main/java/${slashedPackageName(packageName)}/app/utils" />
<merge from="root/settings.gradle.ftl"to="${escapeXmlAttribute(topOut)}/settings.gradle" /> <merge from="root/root-build.gradle.ftl"to="${escapeXmlAttribute(topOut)}/build.gradle" />
<copy from="root/res/mipmap-hdpi/ic_launcher.png"to="${escapeXmlAttribute(resOut)}/mipmap-hdpi/ic_launcher.png" /> <copy from="root/res/mipmap-xhdpi/ic_launcher.png"to="${escapeXmlAttribute(resOut)}/mipmap-xhdpi/ic_launcher.png" /> <copy from="root/res/mipmap-xxhdpi/ic_launcher.png"to="${escapeXmlAttribute(resOut)}/mipmap-xxhdpi/ic_launcher.png" /> <copy from="root/res/mipmap-xxxhdpi/ic_launcher.png"to="${escapeXmlAttribute(resOut)}/mipmap-xxxhdpi/ic_launcher.png" />
<instantiate from="root/build.gradle.ftl"to="${escapeXmlAttribute(projectOut)}/build.gradle" /> <instantiate from="root/AndroidManifest.xml.ftl"to="${escapeXmlAttribute(manifestOut)}/AndroidManifest.xml" /> <instantiate from="root/res/values/styles.xml.ftl"to="${escapeXmlAttribute(resOut)}/values/styles.xml" />
<instantiate from="root/src/app_package/GlobalConfiguration.java.ftl"to="${projectOut}/src/main/java/${slashedPackageName(packageName)}/app/GlobalConfiguration.java" /> <open file="${projectOut}/src/main/java/${slashedPackageName(packageName)}/app/GlobalConfiguration.java" /> <instantiate from="root/src/app_package/AppLifecyclesImpl.java.ftl"to="${projectOut}/src/main/java/${slashedPackageName(packageName)}/app/AppLifecyclesImpl.java" /> <open file="${projectOut}/src/main/java/${slashedPackageName(packageName)}/app/AppLifecyclesImpl.java" />
<#if unitTestsSupported> <instantiate from="root/test/app_package/ExampleUnitTest.java.ftl"to="${escapeXmlAttribute(unitTestOut)}/ExampleUnitTest.java" />#if> recipe>
Module 所需要的模板文件都放在 root 文件夹下,而使用 recipe.xml.ftl 中的标签就是为了告诉模版引擎,你打算将哪个模板文件通过什么方式放到 Module 中的什么位置
mkdir 标签,顾名思义,就是生成一个空的文件夹
merge 标签中的 from 填写模板文件的地址,to 填写 Module 中的目标位置,merge 标签会将 from 中填写的模板文件,放到 to 中填写的目标位置上,如果目标位置已经存在一个相同文件名的文件,则将模板文件中的全部内容复制到已经存在的文件中,否则则创建一个新的文件
copy 标签会将 from 中填写的文件,放到 to 中填写的目标位置上,如果目标位置已经存在一个相同文件名的文件,则会覆盖此文件
instantiate 标签会将 from 中填写的模板文件,放到 to 中填写的目标位置上,如果目标位置已经存在一个相同文件名的文件,则会覆盖此文件,看描述和 copy 标签差不多,那它们的区别是什么呢?
copy 标签的目标对象是普通文件,也就是没有 .ftl 后缀的文件,instantiate 标签的目标对象是模板文件,也就是有 .ftl 后缀的文件,那有 .ftl 后缀的文件和没有 .ftl 后缀的文件有什么区别呢?
有 .ftl 后缀的文件中可以使用 FreeMarker 语法,在生成文件时,模版引擎会根据文件中的 FreeMarker 语法对文件内容进行相应的修改,比如根据不同的条件生成不同的内容,而没有 .ftl 后缀的文件,文件中的内容一旦确定在生成时是无法改变的,就如同单纯的复制粘贴
${escapeXmlAttribute(resOut)} 对应的是 Module 中的 res 文件夹
${projectOut}/src/main/java/${slashedPackageName(packageName)} 对应的是包名下的根目录
${escapeXmlAttribute(topOut)} 对应的是整个工程的根目录
${escapeXmlAttribute(projectOut)} 对应的是 Module 的根目录
${escapeXmlAttribute(manifestOut)} 对应的是放置 AndroidManifest.xml 的文件夹
${escapeXmlAttribute(testOut)} 对应的是 Module 中放置测试文件的文件夹
模板文件
root 文件夹下模板文件的编写也不难,因为 Module Templates 没有用到自定义变量,所以大多数情况下,就是将你写好的 java 文件,后面加上 .ftl 后缀即可,看看下面我贴出的源代码链接,你很快就能上手
你如果还想学到更多的 FreeMarker 语法,可以翻翻下面贴出的 FreeMarker 中文文档
开源代码链接
我给 MVPArms 写的 File Templates:
https://github.com/JessYanCoding/MVPArms/blob/master/MVP_generator_solution
我给 MVPArms 写的 Activity Templates:
https://github.com/JessYanCoding/MVPArmsTemplate
我给 MVPArms 写的 Module Templates:
https://github.com/JessYanCoding/MVPArms-Module-Template
我给组件化项目写的 Module Templates:
https://github.com/JessYanCoding/ArmsComponent-Template
教程链接
快速写出 Activity Templates 的插件:
https://www.jianshu.com/p/e3548f441440
Live Templates 教程:
https://www.jianshu.com/p/065877f0c33d
File Templates 教程:
https://www.jianshu.com/p/57e734864b46
Activity Templates 教程:
https://blog.csdn.net/lmj623565791/article/details/51635533
FreeMarker 中文文档:
http://freemarker.foofun.cn/toc.html
freemarker ftl模板_效率提升百分之四十,AS模板也太好用了吧相关推荐
- 苹果cms10好看的模板_简洁黑色自适应苹果CMSv10网站模板
苹果cms10好看的模板_简洁黑色自适应苹果CMSv10影视模板 我的主题网[第十四套]苹果CMSv10最新原创酷黑渐变特色自适应视频站模板 酷黑渐变特色功能触动封面直接播放视频内容,苹果cms自适应 ...
- unity 输入框弹出输入法_效率提升300%,百度输入法正式更新,手写输入全面升级...
搜狗.百度.讯飞输入法,是我们在生活中常见的3大输入法.但是要问谁是输入法的领军者,我认为是百度.百度输入法的特点,就是覆盖全年龄段的所有人群,有年轻化的一面(比如主题),也尤其关注中老年人的需求.痛 ...
- 应付账款账龄分析模板_超全的财务会计表单模板分享
还在为了工作而心乱如麻? 还在网上茫无头绪的找模板? 还在对找的而模板无所适从? 相信不少新入门的会计 甚至一些做了不少时间的老会计 也时常会为一些财务表格而发愁 如果还有朋友还在为了这事而心乱如麻 ...
- h5 bootstrap 小程序模板_汉中餐饮行业支付宝小程序模板
汉中餐饮行业支付宝小程序模板 r2y8w85 汉中餐饮行业支付宝小程序模板 在上,都能够开设自身的美妆旗舰店,根据这类方法开展精细化的服务,随后去一些线下用户流量.命名合适的小程序名称商城在搭建过程之 ...
- 微软crm在哪新建审批模板_如何在Microsoft Word中创建模板
微软crm在哪新建审批模板 Templates let you configure all the relevant settings you want pre-applied to document ...
- velocity模板_使用Velocity进行客户端和服务器端模板
以标准表示或交换格式(例如HTML和XML)操作和转换文本数据是每个软件开发人员都参与的频繁且通常乏味的活动. 模板引擎可以通过在模板中维护输出的静态部分,同时动态生成和定位变化部分来促进此过程. V ...
- wordpress模板_如何在WordPress中创建类别模板
wordpress模板 Have you visited a site where each category has different layout? In WordPress theme dev ...
- ppt复制切片器_这6个新手必学的PPT技能,让你效率提升10倍!套模板都比别人快...
天下武功,唯快不破! 把日常操作 PPT 的时间节省 50%,把时间留给脑力劳动和价值提升,何乐不为? 下面六招 PPT 高效隐藏技巧,让你指如疾风,势如闪电.职场快人一步,成长快人一步! 快速访问工 ...
- gogs可以自动化部署吗_效率提升利器:你还害怕自动化部署吗?
嗨,我是你稳定输出.干货多多的勾勾(。・∀・)ノ゙.今天要聊一聊"自动化部署". 比尔盖茨曾提到过自动化的重要性:"技术在业务中使用的第一原则是,将自动化应用在正确的操作 ...
最新文章
- 计算机视觉研究生文献和复现哪个更重要?
- Linux下MySql出现#1036 – Table ‘ ‘ is read only 错误解决方法
- div+css 技巧摘录
- UML图系列——建模和面向对象
- SAP Spartacus和传统的Accelerator超时机制(timeout)的区别
- U3D-FSM有限状态机的简单设计
- 跨越解决方案之nginx
- Launch Image Source
- 一个老程序员对数据库的一点纠结
- 完美解决 fatal: unable to access ‘https://github.com/.../.git‘: Could not resolve host: github.com
- 正则表达式匹配html标签
- linux 命令英文全称
- linux进入pe系统,如何进入pe系统【设置模式】
- 【经验】如何学习插画的构图?插画构图的基本原则!
- 计算机表格要学些什么,刚学电脑,不知道在电脑上怎么制作各种表格, – 手机爱问...
- Nature Communications:基于弥散张量成像的人类纤维束连接体方法面临的挑战
- Unity基础开发之事件函数的执行顺序
- 卸载计算机更新程序包,Win7清除Win10更新安装包的方法
- Mob短信验证码的继承
- 【身份证识别】基于形态学实现ID号码识别系统matlab源码含GUI
热门文章
- CSS3技巧 —— 渐变
- sql server 2005 T-SQL BULK INSERT (Transact-SQL)
- C++学习——抽象类
- 第一章 计算机网络 1 计网体系结构的概念和功能 [计算机网络笔记]
- html表格ui,table表格 - 基础 - H-ui前端框架官方网站
- 编程题走迷宫_C++程序算法题----迷宫(一)
- matlab向量归一化_已知近似的特征值,求特征向量
- Grafana 使用教程 --- 开源的度量分析与可视化套件
- Python 操作 Elasticsearch 实现 增 删 改 查
- DOS 命令、必会的 10个 DOS 命令