日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

提高开发效率之安卓模板(上面有四种模板的教程,我之前会两种,看完之后还是只会两种2333)

發布時間:2025/3/21 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 提高开发效率之安卓模板(上面有四种模板的教程,我之前会两种,看完之后还是只会两种2333) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址:?juejin.im/post/5c7339…

在平時的開發工作中,我們經常將一個地方的代碼,復制粘貼到另外一個地方,俗稱搬磚,搬磚搬多了,作為一個資深的挨踢民工,難免會總結一些提高生產力的搬磚經驗

?

?

?

Android Studio 模板是個提高生產力的好東西,使用過 MVPArms 的朋友,都應該使用過我提供的配套模板,使用該套模板,一鍵即可生成整個頁面需要的所有文件,甚至還可以一鍵生成整個 Module,真正的解放了大家的雙手,讓大家的雙手可以去做更多熱愛的事情

?

?

?

Android Stuidio 模板一共有 4 種類型,分別對應不同的功能,我先來簡單介紹下這 4 種模板,最后再著重介紹下一鍵生成 Module 的模板,因為前面 3 種模板在網上有太多優秀的教程了,而 Module 模板的資料非常少,我再重復寫一遍前 3 種模板的教程也不一定有別人寫得好,意義并不大,所以我前面只做簡單介紹,后面會貼出一些教程鏈接,沒了解過的就當科普了,了解過的就直接跳過

?

?

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,稍微修改一下就能應用到自己的項目當中

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 作為學習案例,里面的所有文件和代碼都是經過我篩選過后提取出來的,非常易于大家學習和理解

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.png</thumb></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"?> <!-- TODO: check include Cpp support; add driver module template --> <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 文件夾

{slashedPackageName(packageName)} 對應的是包名下的根目錄

${escapeXmlAttribute(topOut)} 對應的是整個工程的根目錄

${escapeXmlAttribute(projectOut)} 對應的是 Module 的根目錄

{escapeXmlAttribute(testOut)} 對應的是 Module 中放置測試文件的文件夾

模板文件

root 文件夾下模板文件的編寫也不難,因為 module Templates 沒有用到自定義變量,所以大多數情況下,就是將你寫好的 java 文件,后面加上 .ftl 后綴即可,看看下面我貼出的源代碼鏈接,你很快就能上手

你如果還想學到更多的 FreeMarker 語法,可以翻翻下面貼出的 FreeMarker 中文文檔

開源代碼鏈接

我給 MVPArms 寫的 File Templates

我給 MVPArms 寫的 Activity Templates

我給 MVPArms 寫的 module Templates

我給組件化項目寫的 module Templates

教程鏈接

快速寫出 Activity Templates 的插件

Live Templates 教程

File Templates 教程

Activity Templates 教程

FreeMarker 中文文檔

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的提高开发效率之安卓模板(上面有四种模板的教程,我之前会两种,看完之后还是只会两种2333)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。