AndroidStudio 4.1 사용자 정의 템 플 릿 사용 방법
12115 단어 AndroidStudio4.1사용자 정의 템 플 릿
그러나 4.1 버 전부터 새로운 방식 을 제공 합 니 다.Geminio 는 Kotlin 형식 으로 새로운 template 를 만 들 고 플러그 인 형식 을 사용 해 야 사용자 정의 템 플 릿 을 사용 할 수 있 습 니 다.며칠 동안 모색 한 끝 에 해결 되 었 습 니 다.
내 프로젝트 는 MVVM 의 개발 프레임 워 크 를 사용 하 는 것 이다.새로운 페이지 를 만 들 때마다 네 개의 파일 을 새로 만들어 야 한다.Activity/Fragment,ViewModel,Repository,xml 파일 을 많이 쓰 면 짜증 이 난다.사용자 정의 템 플 릿 을 사용 한 이후 머리카락 이 적 게 빠 졌 다.
착공!!!시작!!!
준비 하 다.
개발 도구 AndroidStudio 4.1
템 플 릿 기본 코드 설정
https://github.com/JetBrains/intellij-platform-plugin-template 을 열 고 녹색\#Use this template\#를 클릭 하여 자신의 github 에 템 플 릿 을 만 듭 니 다.
그리고 AndroidStudio 를 사용 하여 템 플 릿 을 로 컬 에 다운로드 합 니 다.
부호화
wizard-template.jar 추가
루트 디 렉 터 리 에 lib 폴 더 를 추가 하고 AndroidStudio 설치 디 렉 터 리 에 있 는 wizard-template.jar 를 추가 합 니 다./applications/Android\\Studio.app/contents/plugins/android/lib/디 렉 터 리 에 있 습 니 다.
build.gradle.kts 수정
dependencies 에 wizard-template.jar 의존 도 를 추가 합 니 다.
dependencies {
detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:1.15.0")
compileOnly(files("lib/wizard-template.jar"))
}
gradle.properties 수정gradle.properties 의 plugin Group,pluginName 을 수정 합 니 다.platformPlugins, platformVersion。
pluginGroup = com.bigaddemo.mvvm
pluginName_ = bigaddemo_MVVM
platformVersion = 2020.2
platformPlugins = java, com.intellij.java, org.jetbrains.android, android, org.jetbrains.kotlin
기본 listeners 의 부모 패키지 이름 을 원 하 는 모양 으로 조정 합 니 다.예 를 들 어 com.company.app.MyProjectManager Listener 수정
internal class MyProjectManagerListener : ProjectManagerListener {
override fun projectOpened(project: Project) {
projectInstance = project
project.getService(MyProjectService::class.java)
}
override fun projectClosing(project: Project) {
projectInstance = null
super.projectClosing(project)
}
companion object {
var projectInstance: Project? = null
}
}
src/main/kotlin 에 other 폴 더 를 만들어 서 사용자 정의 템 플 릿 을 설치 합 니 다.Activity 를 예 로 들 어 사용자 정의 템 플 릿 을 만 들 기 시작 합 니 다.
1.WizardTemplateProvider 구현
SamplePluginTemplateProviderImpl
package other
import com.android.tools.idea.wizard.template.Template
import com.android.tools.idea.wizard.template.WizardTemplateProvider
import other.mvvm.activity.mvvmActivityTemplate
import other.mvvm.fragment.mvvmFragmentTemplate
class SamplePluginTemplateProviderImpl : WizardTemplateProvider() {
override fun getTemplates(): List<Template> = listOf(
// activity
mvvmActivityTemplate,
// fragment
mvvmFragmentTemplate
)
}
2.mvvmActivityTemplate.kt 를 만 듭 니 다.이 파일 은 Activity 를 만 들 때 입력 하 는 정보 입 니 다.예 를 들 어 Activity Name,layotName,packageName,사용 가능 여부 등 입 니 다.
mvvmActivityTemplate.kt
package other
import com.android.tools.idea.wizard.template.Template
import com.android.tools.idea.wizard.template.WizardTemplateProvider
import other.mvvm.activity.mvvmActivityTemplate
import other.mvvm.fragment.mvvmFragmentTemplate
class SamplePluginTemplateProviderImpl : WizardTemplateProvider() {
override fun getTemplates(): List<Template> = listOf(
// activity
mvvmActivityTemplate,
// fragment
mvvmFragmentTemplate
)
}
3.mvvmActivity Recipe.kt 를 만 듭 니 다.이 파일 은 Activity,레이아웃 파일 등 생 성 된 파일 을 폴 더 에 저장 하 는 데 사 용 됩 니 다.원래 Activity 를 AndroidManifest 에 직접 추가 할 계획 이 었 으 나 generateManifest 에 문제 가 있어 생 성 된 플러그 인 을 사용 할 수 없 게 되 었 습 니 다.잠시 제거 하고 수 동 으로 추가 할 수 밖 에 없 었 습 니 다.
mvvmActivityRecipe.kt
package other.mvvm.activity
import com.android.tools.idea.wizard.template.ModuleTemplateData
import com.android.tools.idea.wizard.template.RecipeExecutor
import other.mvvm.activity.res.layout.mvvmActivityXml
import other.mvvm.activity.src.app_package.mvvmAcitivityKt
import other.mvvm.activity.src.app_package.mvvmRepository
import other.mvvm.activity.src.app_package.mvvmViewModel
fun RecipeExecutor.mvvmActivityRecipe(
moduleData: ModuleTemplateData,
activityClass: String,
layoutName: String,
packageName: String
) {
val (projectData, srcOut, resOut) = moduleData
val ktOrJavaExt = projectData.language.extension
// generateManifest(
// moduleData = moduleData,
// activityClass = "${activityClass}Activity",
// activityTitle = activityClass,
// packageName = packageName,
// isLauncher = false,
// hasNoActionBar = false,
// generateActivityTitle = true,
// requireTheme = false,
// useMaterial2 = false
// )
val mvvmActivity = mvvmAcitivityKt(projectData.applicationPackage, activityClass, layoutName, packageName)
// Activity
save(mvvmActivity, srcOut.resolve("${activityClass}Activity.${ktOrJavaExt}"))
// xml
save(mvvmActivityXml(packageName, activityClass), resOut.resolve("layout/${layoutName}.xml"))
// viewmodel
save(mvvmViewModel(packageName, activityClass), srcOut.resolve("${activityClass}ViewModel.${ktOrJavaExt}"))
// repository
save(mvvmRepository(packageName, activityClass), srcOut.resolve("${activityClass}Repository.${ktOrJavaExt}"))
}
4.mvvmAcitivityKt 를 만 듭 니 다.이 파일 은 Activity 의 템 플 릿 코드 를 만 들 고 자신의 상황 에 따라 스스로 조정 하 는 데 사 용 됩 니 다.
mvvmAcitivityKt.kt
package other.mvvm.activity.src.app_package
fun mvvmAcitivityKt(
applicationPackage:String?,
activityClass:String,
layoutName:String,
packageName:String
)="""
package ${packageName}
import android.os.Bundle
import com.bigademo.baselib.base.BaseActivity
import ${applicationPackage}.R
import ${applicationPackage}.BR;
import ${applicationPackage}.databinding.Activity${activityClass}Binding
class ${activityClass}Activity : BaseActivity<${activityClass}ViewModel, Activity${activityClass}Binding>() {
override fun getContentView(): Int {
return R.layout.${layoutName}
}
override fun init(savedInstanceState: Bundle?) {
super.init(savedInstanceState)
isShowTopBar = false
}
override fun initViewModel() {
viewModel = ${activityClass}ViewModel()
}
/**
*
*/
override fun observe() {
}
/**
*
*/
override fun onClick() {
}
override fun initData() {
super.initData()
}
override fun initVariableId(): Int {
TODO("Not yet implemented")
}
}
"""
5.mvvmRepository 를 작성 합 니 다.이 파일 은 mvvm 의 reposcory 층 코드 입 니 다.
mvvmRepository.kt
package other.mvvm.activity.src.app_package
fun mvvmRepository(
packageName:String,
activityClass:String
)="""
package ${packageName}
import androidx.lifecycle.MutableLiveData
import com.shide.baselib.base.basemvvm.BaseRepository
import com.shide.baselib.base.basemvvm.BaseViewModel
import com.shide.baselib.net.exception.ShideApiException
import kotlinx.coroutines.CoroutineScope
class ${activityClass}Repository(
baseViewModel: BaseViewModel,
coroutineScope: CoroutineScope,
errorLiveData: MutableLiveData<ShideApiException>
) : BaseRepository(baseViewModel, coroutineScope, errorLiveData) {
}
"""
6.mvvmViewModel 을 작성 합 니 다.이것 은 mvvm 의 viewmodel 층 mvvmViewModel.kt 입 니 다.
package other.mvvm.activity.src.app_package
fun mvvmViewModel(
packageName:String,
activityClass:String
)="""
package ${packageName}
import androidx.lifecycle.viewModelScope
import com.bigademo.baselib.base.basemvvm.BaseViewModel
class ${activityClass}ViewModel : BaseViewModel() {
private val repo by lazy { ${activityClass}Repository(this, viewModelScope, errorLiveData) }
}
"""
7.mvvmActivity Xml 를 작성 합 니 다.이 파일 은 레이아웃 파일 을 만 드 는 데 사용 되 는 mvvmActivity Xml.kt 입 니 다.
package other.mvvm.activity.res.layout
fun mvvmActivityXml(
packageName: String,
activityClass: String
) = """
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${packageName}.${activityClass}Activity">
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
8.plugin.xml 수정org.jetbrains.android,org.jetbrains.kotlin,com.intellij.modules.java 의 의존 도 를 추가 합 니 다.
applicationService 와 procject Service 의 값 을 수정 합 니 다.
applicationListenesv 에서 listener 의 값 을 수정 합 니 다.
방금 추 가 된 클래스 에 wizardTemplate Provider 를 추가 합 니 다.
<idea-plugin>
<id>com.bigaddemo.mvvm</id>
<name>bigaddemo_MVVM</name>
<vendor>bigademo</vendor>
<!-- Product and plugin compatibility requirements -->
<!-- https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html -->
<depends>org.jetbrains.android</depends>
<depends>org.jetbrains.kotlin</depends>
<depends>com.intellij.modules.java</depends>
<depends>com.intellij.modules.platform</depends>
<extensions defaultExtensionNs="com.intellij">
<applicationService serviceImplementation="com.bigaddemo.mvvm.services.MyApplicationService" />
<projectService serviceImplementation="com.bigaddemo.mvvm.services.MyProjectService" />
</extensions>
<applicationListeners>
<listener class="com.bigaddemo.mvvm.listeners.MyProjectManagerListener" topic="com.intellij.openapi.project.ProjectManagerListener" />
</applicationListeners>
<extensions defaultExtensionNs="com.android.tools.idea.wizard.template">
<wizardTemplateProvider implementation="other.SamplePluginTemplateProviderImpl" />
</extensions>
</idea-plugin>
jar 파일 생 성AS 맨 위 에서 Run plugin 을 실행 하 는 것 을 선택 하 십시오.성공 하면 build/libs 에서 해당 하 는 jar 파일 을 찾 을 수 있 습 니 다.마지막 으로 AS 설정 에서 이 jar 패키지 에 추 가 된 plugin 을 AS 로 다시 시작 하면 됩 니 다.
안 드 로 이 드 스튜디오 4.1 사용자 정의 템 플 릿 사용 방법 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 안 드 로 이 드 스튜디오 4.1 사용자 정의 템 플 릿 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.