이 글은 templete-android에 대한 설명입니다.
어떤 프로젝트든 기본적으로 필요한 기능들이 존재한다. 그런 기능들을 구현하기 위해 매번 이전 프로젝트의 코드를 찾아 복붙하는 시간 낭비를 없애기 위해, 직접 안드로이드 프로젝트 템플릿을 만들게 되었다.
기본 설정
최소 SDK 버전 : 28 (Android 9.0 Pie)
타겟 SDK 버전 : 30 (Android Q)
뷰 바인딩 사용
디렉토리
base
각 컴포넌트, 요소 등의 기반이 되는 클래스를 넣는 패키지.
예를 들어 BaseActivity와 같이 액티비티의 기반이 되는 클래스를 만들어, 다른 모든 액티비티가 BaseActivity를 상속받게 한다. 모든 액티비티가 BaseActivity를 상속받기 때문에 액티비티에서 공통으로 필요한 메소드나 변수를 BaseActivity에 선언하면 된다.
BaseActivity
모든 액티비티가 상속받을 액티비티
- showToast() : 토스트 띄우기
- showDialog() : 기본 다이얼로그 띄우기
- showProgressDialog() : 원형 로딩 다이얼로그 띄우기
- hideProgressDialog() : 로딩 다이얼로그 숨기기
- transActivity() : 액티비티간 이동 시 전환 애니메이션 지정
- setToolbar() : 기본 툴바 커스텀
- hideToolbar() : 툴바 숨기기
- getEditorActionListener() : 키보드에서 완료버튼 클릭 시 특정 뷰 클릭 처리하는 리스너 리턴
network
네트워크 작업 관련 파일 넣는 패키지
ApiInterface
레트로핏 통신 인터페이스
(GET, POST, PUT, PATCH, DELETE에 대한 예시 코드 있음)
XAccessTokenInterceptor
레트로핏 객체를 빌드할 때 클라이언트로 설정해주는 OkHttpClient 헤더에, shared preferences에 저장된 jwt를 넣어주는 클래스
shared preferences에 X-ACCESS-TOKEN이란 키 값으로 jwt를 저장해두면 http 통신할 때 자동으로 헤더에 X-ACCESS-TOKEN 키의 값으로 jwt가 추가된다.
receiver
브로드캐스트 리시버 클래스를 넣는 패키지
DownloadReceiver
다운로드 완료 시 실행되는 리시버. 다운로드 성공, 중단, 실패 여부를 토스트로 띄워준다.
manifest에 추가하지 않았기 때문에, 원하는 컴포넌트에서 registerReceiver(), unregitsterReceiver() 메소드로 리시버를 등록, 해제해주면 된다.
val downloadReceiver = DownloadReceiver().getInstance(this)
// 등록
registerReceiver(downloadReceiver, IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE))
// 해제
unregisterReceiver(downloadReceiver)
RebootReceiver
디바이스 재부팅 시 실행되는 리시버
util
여러 군데에서 쓰는 기능이나 유용한 기능을 넣는 패키지
Enums
enum 클래스 집합
enum 클래스를 추가할 때 따로 파일을 생성하지 않고 이 파일(클래스)에 작성하면 된다.
ImageTask
이미지 관련 메소드가 있는 클래스
- createImageFile() : 생성일시를 이름으로 한 파일을 리턴
- getFullPathFromUri() : 파일 상대경로를 절대경로로 리턴
- downloadImage() : 이미지의 주소값(url)으로 이미지를 다운로드
NotificationTask
알림 관련 메소드 있는 클래스
- showNotification() : 알림 생성 및 띄우기
Permission
권한 관련 메소드 있는 클래스
- checkCameraPermission() : 카메라 권한 확인
- checkReadPermission() : 외부저장소 읽기 권한 확인
- checkWritePermission() : 외부저장소 쓰기 권한 확인
- checkCameraAndReadPermission() : 카메라 및 외부저장소 읽기 권한 확인
- checkReadAndWritePermission() : 외부저장소 읽기/쓰기 권한 확인
- requestCameraPermission() : 카메라 권한 요청
- requestReadPermission() : 외부저장소 읽기권한 요청
- requestCameraAndReadPermission() : 카메라 및 외부저장소 읽기 권한 요청
- requestReadAndWritePermission() : 외부저장소 읽기/쓰기 권한 요청
ProgressDialog
로딩 다이얼로그 클래스
ValueCheck
정규식으로 값을 체크하는 메소드 있는 클래스
- isEmail() : 이메일 형식인지 확인 후 참/거짓 리턴
- getUrl() : url 형식인지 확인 후 맞다면 인자로 전달받은 문자열을, 아니라면 문자열에 http://를 붙여 리턴
ValueConvert
값 변환하는 메소드 있는 클래스
- dpToPx() : dp 단위의 값를 px 단위로 변환하여 리턴
- pxToDp() : px 단위의 값을 dp 단위로 변환하여 리턴
App
어플리케이션 클래스
앱이 실행되는 순간 제일 처음 실행되는 클래스이기 때문에 모든 컴포넌트, 클래스 등에서 사용할 변수, 메소드를 정의해 사용하면 된다.
- getRetrofit() : 레트로핏 객체 리턴
- finishActivites() : activities 변수에 담긴 모든 액티비티 종료하기
MainActivity
뷰 바인딩을 사용한 메인 액티비티
추가하면 좋을 패키지(폴더)
- adapter : 어댑터 클래스 넣는 패키지 (리사이클러뷰 어댑터, 프래그먼트 어댑터 등)
- data : 데이터 클래스 넣는 패키지 (retrofit response, body 클래스, 유저 클래스 등)
- service : 서비스 클래스 넣는 패키지
- view : activity, fragment 등 뷰 관련 클래스 넣는 패키지 (view 패키지 안에 activity, fragment 패키지 추가 추천)
테마
res>values>theme.xml에 정의한 테마
- Theme.AndroidTemplate.NoActionBar : 앱바(툴바)를 없앤 테마
- Theme.AndroidTemplate.FullScreen : 앱바(툴바)와 상태표시줄을 없앤 테마. 스플래시 액티비티 등에 사용할 수 있다.
의존성
앱 수준 gradle의 dependencies에 추가한 것
- swipe refresh layout : 당겨서 새로고침 레이아웃
- Glide : 이미지 로딩 라이브러리
- Retrofit2 : http 통신 라이브러리
- Gson : json 변환 라이브러리
- fragment : 프래그먼트
'Android' 카테고리의 다른 글
[Android] HTTP 통신 시 Retrofit2로 헤더에 자동으로 토큰 전송하기 (0) | 2021.11.24 |
---|---|
[Android] 레트로핏(Retrofit2) 사용법 (0) | 2021.11.21 |
[Android] 권한 확인 및 요청 (0) | 2021.11.15 |
[Android] 액티비티 화면전환 애니메이션 (0) | 2021.11.12 |
[Android] 툴바(앱바) 사용하기 (0) | 2021.11.09 |