2021년 7월 현재, minSdkVersion 몇으로 해야 할까?

minSdkVersion 과연 몇으로 해야할지 정해드립니다.

다음 코드는 build.gradle의 코드 일부입니다. build.gradleminsdkversion은 내 앱을 설치할 수 있는 기기버전을 정하는 인자인데요, 낮으면 낮을수록 더 많은 기기에 앱을 설치할 수 있지만 그만큼 앱을 설계할 때 구형 API까지 고려해야 한다는 문제가 있습니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "com.example.myapplication"
        minSdkVersion 16
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

그렇다면 2021년 7월 현재, 앱의 minSdkVersion은 몇으로 하는게 적당할까요?

API 버전별 특징

그걸 판단하기 위해서 API별로 어떤 기능이 추가되었는지를 확인하는게 좋을 것 같습니다. 제가 생각하기에 API별로 채용된 특징 중 성능이나 개발과정에 큰 변화를 가져오는 내용은 다음과 같습니다.

21 Lollipop

23 Marshmallow

  • 런타임 퍼미션 채용 : GPS나 파일쓰기 같은 위험한 권한이 필요할 때 앱 실행중에 권한을 추가적으로 요청함으로써 사용자의 주의를 환기시키는 것이 가능해졌습니다.

24 Nougat

26 Oreo

  • 백그라운드 실행제한 : 백그라운드에서 앱이 계속 살아있지 못하도록 제한하므로 API 26부터는 백그라운드를 사용하는 앱의 구조를 근본적으로 다시 설계해야 합니다.

사용자 비율

statcounterAppBrain이 제공하는 2021년 7월 현재 전세계 안드로이드 API 점유율은 다음 표와 같습니다. 킷캣은 1%대 점유율을 가지고 있네요. 일본내 점유율만을 보여주는 smatabinfo에 따르면 이젠 롤리팝조차 1% 점유율이 안된다고 하네요.

OS Version API level statcounter AppBrain smatabinfo
11 (Android 11) 30 17.50% 17.20% 16.186%
10 (Android 10) 29 35.91% 33.00% 40.773%
9.0 (Pie) 28 17.03% 17.60% 18.903%
8.0-8.1 (Oreo) 26 13.04% 13.70% 13.118%
7.0-7.1 (Nougat) 24 6.89% 7.30% 7.594%
6.0 (Marshmallow) 23 4.63% 5.00% 2.175%
5.0-5.1 (Lollipop) 21 3.47% 4.00% 0.818%
4.4 (KitKat) 19 1.11% 1.40% 0.317%

결론

롤리팝(21)에서는 성능이 향상될 수 있는 여러가지 획기적인 기술도입이 있었으므로 킷캣(19)은 이제는 버리는게 맞아 보입니다. 다만 롤리팝은 설치시 퍼미션을 다 줘버리는 한계가 있으므로, 런타임 퍼미션을 사용할 수 있는 마시멜로(23)를 minsdkversion으로 설정하는 것을 추천합니다. 여기까지만 해도 95%의 기기를 커버할 수 있습니다.

더 강력한 이유로는 https://twitter.com/minsdkversion 이 23을 트윗했기 때문입니다…?

그리고 개인적으로 개발하는 어플이라면 오레오(26)을 minSdkVersion으로 추천합니다. 누가(24)는 2019년 10월자로 보안 업데이트가 중단되어 해킹의 위험이 있는데다, API 26까지의 전세계 점유율은 이미 80%를 넘어섰고 앞으로도 계속 늘어날 것이기 때문입니다. 또한 개발자로서는 API 26 이전의 백그라운드 실행방식을 고려하지 않아도 되는 커다란 이점도 있습니다. 개발자의 편의를 위해 이젠 누가 이하를 사용하는 기기는 과감하게 지원을 포기하는것도 나쁘지 않다고 생각합니다.

다시 말씀드리지만 상용앱이 아니라 개인적으로 개발하는 어플에 적용하는게 좋겠죠. 어디까지나 제 개인의 의견일 뿐이고 참고 정도로 생각해주시면 감사하겠습니다.

Built with Hugo
Theme Stack designed by Jimmy