ARCHIVE/일기

Android Custom Template Plugin 개발 (2)

권퓨터 2022. 3. 16. 17:19
반응형

https://github.com/KwonGeneral/KwonTemplate.git

 

GitHub - KwonGeneral/KwonTemplate: 안드로이드 스튜디오 커스텀 템플릿

안드로이드 스튜디오 커스텀 템플릿. Contribute to KwonGeneral/KwonTemplate development by creating an account on GitHub.

github.com

 

< 참고 >

https://github.com/kyh8496/TestPluginTemplate

 

내가 만든 템플릿은 Fragment, ViewModel, Layout을 생성하는 Fragment Template와 Fragment, ViewModel, Layout, Adapter, Data를 생성하는 List Fragment Template 2가지이다. 여기서는 설명을 위해서 List Fragment Template를 기반으로 설명하도록 하겠다.

 

내 프로젝트 구조이다. 내 설명에 참고가 되길 바란다.

 

1. MyProjectManagerListener.kt 수정

해당 클래스 파일에서는 프로젝트에서 해당 템플릿을 사용할 때, 특정 조건을 만족해야지만 열거나 닫게끔 할 수 있다. 예를 들어, 무조건 프로젝트명이 KwonGeneral이어야만 해당 템플릿을 사용할 수 있게 제한할 수 있다. 다만, 굳이 그럴필요가 있나 싶다. 그냥 위의 스샷처럼 적어주면 된다.

 

2. Extensions.kt 작성

공용으로 사용할 기능들을 모아놓은 부분이다. 메서드의 이름에서 알 수 있듯이, 패키지명을 가져오기 위한 기능과 파일을 저장하는 기능이다.

 

3. ListFragmentSetupRecipe.kt 작성

이미지가 작아서 안보일수도 있는데, 눌러서 크게 보던가 직접 코드로 보기를 바란다. 

addAllKotlinDependencies로 코틀린 디펜던시를 추가해준다. directorySrc, directoryRes는 이름 그대로 src와 res 디렉토리 경로이다. 클래스 파일이면 src에 저장을 해야할 것이고, 레이아웃 파일이면 res에 저장하면 된다. tempClassName은 매개변수로 받은 className 문자열을 소문자로 변환하고 fragment 부분을 공백으로 치환한 변수이다. 우리가 안드로이드에서 템플릿을 작성할 때, 클래스 이름을 입력하면 자동으로 layout 이름도 입력이 되는데, 이부분에서 사용자가 입력한 fragment는 생략될 수 있게끔 하기 위해서 작업을 했고, 그래서 위의 코드로 치환을 해준 것이다.

이상적인 템플릿 생성 명칭 규칙은 예를 들어, 클래스명에다가 HomeFragment라고 입력하면, 레이아웃명은 자동으로 fragment_home이라고 작성되는 것이 좋다.

아무튼, 다른 변수들은 보면 알겠지만, 단순히 클래스명에다가 추가로 덧붙여주거나 첫글자만 대문자로 치환하는 등등 문자열을 가공해준 변수들이다. originPackageName은 말그대로 사용자의 applicationId을 가져온다. 매개변수로 들어오는 packageName은 현재 템플릿이 생성되는 위치의 packageName이기 때문에, import하는 부분을 작성할 때, 값이 잘못들어갈 수 있다.

하단의 create가 붙은 메서드들은 말그대로 해당 파일을 생성해주는 기능이다. 이 부분은 오늘 시간이 없어서 다음에 설명하도록 하겠다.

반응형