关于建设网站的申请,中国建设银行龙网站首页,有哪些游戏可以做网站,wordpress响应式主题下载点击蓝字 轻松关注CV 工程师你好#xff0c;以下内容会让你感觉到不适#xff0c;慎入#xff01;在平时的开发工作中#xff0c;我们经常将一个地方的代码#xff0c;复制粘贴到另外一个地方#xff0c;俗称搬砖#xff0c;搬砖搬多了#xff0c;作为一个资深的挨踢民… 点击蓝字 轻松关注CV 工程师你好以下内容会让你感觉到不适慎入在平时的开发工作中我们经常将一个地方的代码复制粘贴到另外一个地方俗称搬砖搬砖搬多了作为一个资深的挨踢民工难免会总结一些提高生产力的搬砖经验Android Studio 模板是个提高生产力的好东西使用过 MVPArms 的朋友都应该使用过我提供的配套模板使用该套模板一键即可生成整个页面需要的所有文件甚至还可以一键生成整个 Module真正的解放了大家的双手让大家的双手可以去做更多热爱的事情Android Stuidio 模板一共有 4 种类型分别对应不同的功能我先来简单介绍下这 4 种模板最后再着重介绍下一键生成 Module 的模板因为前面 3 种模板在网上有太多优秀的教程了而 Module 模板的资料非常少我再重复写一遍前 3 种模板的教程也不一定有别人写得好意义并不大所以我前面只做简单介绍后面会贴出一些教程链接没了解过的就当科普了了解过的就直接跳过现在还差几个 star 就超过 Mozilla 在模板语言 Freemarker 中排名 star 全球第一了让我得瑟一下?Live TemplatesLive Templates 的功能主要是根据关键字快速生成代码块在设置中找到 Live Templates点击红框中的按钮 即可新建 Live TemplatesFile TemplatesFile Templates 顾名思义主要功能就是一键生成单个文件在设置中找到 File and Code Templates点击红框中的按钮 即可新建 File TemplatesActivity TemplatesActivity Templates 可以一键生成多个文件但不光可以生成 Activity 文件还可以根据需求生成任何 Java 文件、XML 文件以及其他类型的文件新建 Activity Templates 要比上面的两个模板复杂的多需要使用到 FreeMarker感兴趣的朋友可以看看我开源的 Activity Templates(https://github.com/JessYanCoding/MVPArmsTemplate)稍微修改一下就能应用到自己的项目当中Module TemplatesModule 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.pngroot 文件夹下包含的是生成 Module 所需要的模板文件template_new_project.png 是模板的封面图globals.xml.ftl 我们暂时用不到recipe.xml.ftl、template.xml 这两个文件存放的是模板的配置参数是整个模板的核心文件我们来看看这两个文件template.xmltemplate.xml 放置的是配置面板的参数配置面板是什么东西看下图Module Templates 和 Activity Templates 的配置面板不一样Activity Templates 可以任意修改和新增配置面板中的项目但是 Module Templates 不可以只能固定为图中的这四项看看 template.xml 里面的内容?xml version1.0?templateformat5revision2nameMVPArms ModuledescriptionCreates a new MVPArms Module. category valueApplication / formfactor valueThings /----------------------- 分割线 ----------------------- thumbs thumbtemplate_new_project.pngthumb thumbs parameteridpackageNamenamePackage nametypestringconstraintsapp_package|nonemptydefaultcom.mycompany.myapp / ... globals fileglobals.xml.ftl / execute filerecipe.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.ftlrecipe.xml.ftl 的功能就是告诉模板引擎你打算怎么处理你的模板文件?xml version1.0?recipe mkdir at${escapeXmlAttribute(projectOut)}/libs / mkdir at${escapeXmlAttribute(resOut)}/anim / mkdir at${projectOut}/src/main/java/${slashedPackageName(packageName)}/app/utils / merge fromroot/settings.gradle.ftlto${escapeXmlAttribute(topOut)}/settings.gradle / merge fromroot/root-build.gradle.ftlto${escapeXmlAttribute(topOut)}/build.gradle / copy fromroot/res/mipmap-hdpi/ic_launcher.pngto${escapeXmlAttribute(resOut)}/mipmap-hdpi/ic_launcher.png / copy fromroot/res/mipmap-xhdpi/ic_launcher.pngto${escapeXmlAttribute(resOut)}/mipmap-xhdpi/ic_launcher.png / copy fromroot/res/mipmap-xxhdpi/ic_launcher.pngto${escapeXmlAttribute(resOut)}/mipmap-xxhdpi/ic_launcher.png / copy fromroot/res/mipmap-xxxhdpi/ic_launcher.pngto${escapeXmlAttribute(resOut)}/mipmap-xxxhdpi/ic_launcher.png / instantiate fromroot/build.gradle.ftlto${escapeXmlAttribute(projectOut)}/build.gradle / instantiate fromroot/AndroidManifest.xml.ftlto${escapeXmlAttribute(manifestOut)}/AndroidManifest.xml / instantiate fromroot/res/values/styles.xml.ftlto${escapeXmlAttribute(resOut)}/values/styles.xml / instantiate fromroot/src/app_package/GlobalConfiguration.java.ftlto${projectOut}/src/main/java/${slashedPackageName(packageName)}/app/GlobalConfiguration.java / open file${projectOut}/src/main/java/${slashedPackageName(packageName)}/app/GlobalConfiguration.java / instantiate fromroot/src/app_package/AppLifecyclesImpl.java.ftlto${projectOut}/src/main/java/${slashedPackageName(packageName)}/app/AppLifecyclesImpl.java / open file${projectOut}/src/main/java/${slashedPackageName(packageName)}/app/AppLifecyclesImpl.java /#if unitTestsSupported instantiate fromroot/test/app_package/ExampleUnitTest.java.ftlto${escapeXmlAttribute(unitTestOut)}/ExampleUnitTest.java /#if recipeModule 所需要的模板文件都放在 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/e3548f441440Live Templates 教程:https://www.jianshu.com/p/065877f0c33dFile Templates 教程:https://www.jianshu.com/p/57e734864b46Activity Templates 教程:https://blog.csdn.net/lmj623565791/article/details/51635533FreeMarker 中文文档:http://freemarker.foofun.cn/toc.html