Skip to content

Android Code Convention

hyunji edited this page Aug 17, 2023 · 10 revisions

📱 기술 스택

외부 라이브러리 및 api

한국에서 지도 api를 사용할 때 네이버 지도와 카카오 맵 api를 주로 사용합니다.
저희 나아가는 그 중 커스텀 마커, 원, 폴리라인 등에서 카카오보다 네이버의 UI가 더 예쁘다고 생각되어 네이버를 사용합니다.
implementation("com.naver.maps:map-sdk:3.12.0")
api 'com.google.android.gms:play-services-location:19.0.1'

안드로이드에서는 카카오, 네이버, 구글 로그인을 많이 사용합니다.
저희 서비스의 타겟을 우선 대한민국으로 한정했기 때문에 셋 중 한국인에게 가장 친숙하고 많이 쓰이는 서비스인 카카오를 사용합니다. implementation "com.kakao.sdk:v2-user:2.15.0"

로딩 중인 화면에서 사용자에게 친숙하고 재미를 줄 수 있는 UI를 주기 위해 사용합니다.
implementation "com.airbnb.android:lottie:6.1.0"

서버에서 받은 목적지의 사진을 띄우기 위해 사용합니다.
implementation 'com.github.bumptech.glide:glide:4.15.1'

서버와의 손쉬운 통신을 위해 Retrofit을 사용합니다.
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

Json-converter로 kotlinx-serialization 사용합니다.
잘못 작성된 코드를 컴파일 에러로 잡아주고, 내부 동작에서 reflection을 사용하지 않는다는 장점이 있습니다.
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1'

retrofit 통신 시 intercept를 위해 사용합니다.
API 통신 모니터링, 공통 파라미터 또는 헤더 추가라는 장점이 있습니다.
implementation("com.squareup.okhttp3:logging-interceptor:4.11.0")

컨텍스트 스위칭 비용이 발생하지 않아 가볍게 동작하고 특정 스레드상에서 동작 하게 지정 할 수 있습니다.
그리고 개발자가 각 루틴을 언제 실행 할지, 언제 종료하는지 직접 지정이 가능하다는 장점이 있어 사용합니다.
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.4.2")

효율적인 단위 테스트를 위해 사용합니다.
testImplementation 'io.mockk:mockk-android:1.13.5'
testImplementation 'io.mockk:mockk-agent:1.13.5'

서버 통신 테스트를 위한 목서버 제작을 위해 mockwebserver를 사용합니다.
implementation 'com.squareup.okhttp3:mockwebserver:4.11.0'

MVVM 아키텍쳐 구현 시 viewmodel를 위해 사용합니다.
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1"

앱 시작 시 스플래시 화면을 띄우기 위해 사용합니다.
implementation "androidx.core:core-splashscreen:1.0.0"

Naaga 프로젝트와 Firebase와의 연동을 위해 사용합니다.
https://firebase.google.com/docs/android/setup?hl=ko

Firebase analytics에서 제공해주는 사용자 모니터링을 통해 사용자의 앱 사용 추세에 대해 알아보고자 사용합니다.
implementation "com.google.firebase:firebase-analytics-ktx"

실시간 비정상 종료를 기록해 앱의 안정성 문제를 추적하고 해당 문제를 해결하는 데 도움을 받기 위해 사용합니다.
implementation("com.google.firebase:firebase-crashlytics-ktx")

사용자의 토큰 정보를 암호화된 SharedPreference에 저장해 안전하게 보관하기 위해 사용합니다.
implementation "androidx.security:security-crypto-ktx:1.1.0-alpha03"


🎯 sdk 버전

  • targetSdk: Android 13 (API 수준 33)
  • minSdk: Android 9(API 수준 28)
  • 이유
    <2022~2023 한국 안드로이드 버전 점유율>
    Untitled
  1. Android 9 이후 한국 안드로이드 시장 점유율이 95%가 넘는 기점
  2. 우리의 주 타겟층인 대한민국 사람이라면 Android 28 이하를 사용하는 사람은 드물 것이라는 추측
  3. 왠만한 대한민국 사람들은 다 수용할 수 있다는 생각에 해당 minSdk 선정

✅ 코드 컨벤션

Resource Naming Convention

ID

prefix_where_description

ex)
tv_home_title
et_myPage_nickName
View Prefix
TextView tv
ImageView iv
EditText et
ContraintLayout cl
RecyclerView rv
ScrollView sv
NestedScrollView nsv
CheckBox cb
Switch switch
Progressbar pb
... ...

Drawable

ex)
ic_home
img_profile
rect_purple_main_radius_small_stroke3
oval_black000000
Drawable  Naming
Icon ic_description
Image img_description
Shape shape_color_radius_stroke

colors

description_color

<color name="main_purple">#FFD4A5E4</color>

Dimension

where_description_what

// 공통된 margin/padding은 where를 space로 사용
<dimen name="space_default_medium">12dp</dimen>

// 특정 뷰에만 사용되는 경우
<dimen name="mypage_start_margin">30dp</dimen>

// radius는 세가지
<dimen name="radius_small">12</dimen>
<dimen name="radius_medium">24</dimen>
<dimen name="radius_large">36</dimen>

Strings

where_description

// 공통
<string name="all_begin_adventure">모험 시작</string>

// 특정 뷰
<string name="myPage_setting">내 설정</string>