-
TanJiaJunActivityForDagger2:用于生成Dagger2版本的Activity对应的xml、Activity和ViewModel。
-
TanJiaJunFragmentForDagger2:用于生成Dagger2版本的Fragment对应的xml、Fragment和ViewModel。
-
TanJiaJunActivityForKoin:用于生成Koin版本的Activity对应的xml、Activity和ViewModel。
-
TanJiaJunFragmentForKoin:用于生成Koin版本的Fragment对应的xml、Fragment和ViewModel。
然后把TanJiaJunActivityForDagger2和TanJiaJunActivityForKoin放到Activity模板目录下,把TanJiaJunActivityForKoin和TanJiaJunFragmentForKoin放到Fragment模板目录下。Activity模板目录地址:/Applications/Android Studio.app/Contents/plugins/android/lib/templates/activities,如下图所示:
Fragment模板目录地址:/Applications/Android Studio.app/Contents/plugins/android/lib/templates/fragments,如下图所示:
最后重启Android Studio,然后就可以使用这些模板了,如下图所示:Activity
Fragment
创建面板界面如下图所示:
下面用TanJiaJunActivityForDagger2来描述目录结构。
目录结构如下图所示:
用于定义全局变量,代码如下所示:
<#include “…/common/common_globals.xml.ftl” />
该文件可以定义如下常用的标签:
-
copy:复制文件到目标目录,可以用于将图标复制到项目的文件夹。
-
merge:合并,可以用于将文件和项目中现有的文件合并。
-
instantiate:通过FreeMarker将ftl文件中的变量都转换成对应的值,并且生成我们想要的文件。
-
open:在代码生成后,打开指定的文件。
FreeMarker是一个模板引擎,它可以用来生成输出文本(例如:HTML网页、电子邮件、配置文件、源代码等)的通用工具,如下图所示:
FreeMarker的工作原理,如下图所示:
代码如下所示:
<@kt.addAllKotlinDependencies />
<instantiate
from=“root/res/layout/activity_tan_jia_jun_for_dagger2.xml.ftl”
to=“ e s c a p e X m l A t t r i b u t e ( r e s O u t ) / l a y o u t / {escapeXmlAttribute(resOut)}/layout/ escapeXmlAttribute(resOut)/layout/{layoutName}.xml” />
<instantiate
from=“root/src/app_package/TanJiaJunActivityForDagger2.kt.ftl”
to=“ e s c a p e X m l A t t r i b u t e ( s r c O u t ) / u i / {escapeXmlAttribute(srcOut)}/ui/ escapeXmlAttribute(srcOut)/ui/{businessName}/activity/${activityName}.kt” />
<instantiate
from=“root/src/app_package/TanJiaJunViewModelForDagger2.kt.ftl”
to=“ e s c a p e X m l A t t r i b u t e ( s r c O u t ) / u i / {escapeXmlAttribute(srcOut)}/ui/ escapeXmlAttribute(srcOut)/ui/{businessName}/viewmodel/${viewModelName}.kt” />
我解释下代码的逻辑:在指定的目录下,用activity_tan_jia_jun_for_dagger2.xml.ftl文件生成 l a y o u t N a m e . x m l 文 件 , 用 T a n J i a J u n A c t i v i t y F o r D a g g e r 2. k t . f t l 文 件 生 成 {layoutName}.xml文件,用TanJiaJunActivityForDagger2.kt.ftl文件生成 layoutName.xml文件,用TanJiaJunActivityForDagger2.kt.ftl文件生成{activityName}.kt文件,用TanJiaJunViewModelForDagger2.kt.ftl文件生成 v i e w M o d e l N a m e . k t 文 件 , 最 后 打 开 {viewModelName}.kt文件,最后打开 viewModelName.kt文件,最后打开{activityName}.kt文件。
存放ftl文件,也就是模板代码,代码如下所示:activity_tan_jia_jun_for_dagger2.xml.ftl
<layout xmlns:android=“http://schemas.android.com/apk/res/android”
xmlns:app=“http://schemas.android.com/apk/res-auto”>
<variable
name=“viewModel”
type=“ k o t l i n E s c a p e d P a c k a g e N a m e . u i . {kotlinEscapedPackageName}.ui. kotlinEscapedPackageName.ui.{businessName}.viewmodel.${viewModelName}” />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:background=“@color/background_color”>
</androidx.constraintlayout.widget.ConstraintLayout>
TanJiaJunActivityForDagger2.kt.ftl
package k o t l i n E s c a p e d P a c k a g e N a m e . u i . {kotlinEscapedPackageName}.ui. kotlinEscapedPackageName.ui.{businessName}.activity
import android.os.Bundle
import androidx.activity.viewModels
import ${applicationPackage}.R
import a p p l i c a t i o n P a c k a g e . d a t a b i n d i n g . A c t i v i t y {applicationPackage}.databinding.Activity applicationPackage.databinding.Activity{objectKind}Binding
import com.tanjiajun.androidgenericframework.ui.BaseActivity
import k o t l i n E s c a p e d P a c k a g e N a m e . u i . {kotlinEscapedPackageName}.ui. kotlinEscapedPackageName.ui.{businessName}.viewmodel.${viewModelName}
class a c t i v i t y N a m e : B a s e A c t i v i t y < A c t i v i t y {activityName} : BaseActivity<Activity activityName : BaseActivity<Activity{objectKind}Binding, ${viewModelName}>() {
override val layoutRes: Int = R.layout.${layoutName}
override val viewModel by viewModels<${viewModelName}> { viewModelFactory }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
}
TanJiaJunViewModelForDagger2.kt.ftl
package k o t l i n E s c a p e d P a c k a g e N a m e . u i . {kotlinEscapedPackageName}.ui. kotlinEscapedPackageName.ui.{businessName}.viewmodel
import com.tanjiajun.androidgenericframework.ui.BaseViewModel
import javax.inject.Inject
class ${viewModelName} @Inject constructor() : BaseViewModel() {
}
展示模板界面的缩略图,如下图所示:
用于定义创建面板的控件,代码如下所示:
<template
format=“8”
revision=“8”
name=“TanJiaJun Activity For Dagger2”
minApi=“9”
minBuildApi=“26”
description=“Creates a new activity of Android Generic Framework For Dagger2.”>
<parameter
id=“packageName”
name=“Package Name”
type=“string”
constraints=“package”
default=“com.tanjiajun.androidgenericframework” />
<parameter
id=“businessName”
name=“Business Name”
type=“string”
constraints=“nonempty”
default=“main” />
<parameter
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
总结
算法知识点繁多,企业考察的题目千变万化,面对越来越近的“金九银十”,我给大家准备好了一套比较完善的学习方法,希望能帮助大家在有限的时间里尽可能系统快速的恶补算法,通过高效的学习来提高大家面试中算法模块的通过率。
这一套学习资料既有文字档也有视频,里面不仅仅有关键知识点的整理,还有案例的算法相关部分的讲解,可以帮助大家更好更全面的进行学习,二者搭配起来学习效果会更好。
部分资料展示:
有了这套学习资料,坚持刷题一周,你就会发现自己的算法知识体系有明显的完善,离大厂Offer的距离更加近。
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
解,可以帮助大家更好更全面的进行学习,二者搭配起来学习效果会更好。
部分资料展示:
[外链图片转存中…(img-u19XO5gz-1712782196915)]
[外链图片转存中…(img-uvHAUrji-1712782196915)]
[外链图片转存中…(img-kC6XuHxc-1712782196915)]
[外链图片转存中…(img-rEr765pR-1712782196915)]
有了这套学习资料,坚持刷题一周,你就会发现自己的算法知识体系有明显的完善,离大厂Offer的距离更加近。
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-OsxtYxa3-1712782196916)]