본문 바로가기
Kotlin

[Kotlin / Android] 10. 다이얼로그와 알림 이용하기 - API 레벨 호환성 고려하기

by 쀼르쀼르 2024. 3. 18.

10-1 API 레벨 호환성 고려하기


 

 

· API 레벨 설정

minSdk 21
targetSdk 33

 

앱 개발할 때 minSdk 설정값보다 상위버전에서 제공하는 API를 사용한다면

호환성(compatibility)을 고려해야 함

 

 

위에 적힌 'Added in API level 1'이라고 표시된 정보는 이 클래스가

API 레벨 1에 추가되었다는 것을 나타냄
따라서 Notification클래스는 minSdk를 21로 설정한 앱에서

API레벨 호환성 문제가 발생하지 않음

 

 

Notification.CallStyle이라는 클래스는 API레벨이 31임

즉, 31 버전에서 추가된 클래스라는 의미임
Notification.CallStyle클래스는 31 버전 하위에서는

제공하지 않으므로 이 클래스를 사용해 앱을 개발하면
31 버전 하위 기기에서 오류가 발생함

 

API 레벨 호환성

 

즉, 사용할 API가 추가된 상위 버전에서는 문제가 없지만

하위 버전에서는 오류가 발생함

 

이처럼 API 레벨 호환성에 문제가 있는 API 사용할 때는 @기호로 시작하는

애너테이션(annotation)을 추가해 오류를 해결할 수 있음

 

· API 호환성 애너테이션 1

@RequiresApi(Build.VERSION_CODES.S)
fun noti() {
    (...생략...)
    val builder: Notification.Builder = Notification.Builder(this, "1")
        .setStyle(
            Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent) 
        )
    (...생략...)
}

 

API 레벨 호환성에 문제가 있는 API를 사용한 함수나 클래스 선언부 위에

@RequiresApi 애너테이션을 추가하면 오류 발생하지 않음

@TargetApi 애너테이션을 이용해도 됨

 

· API 호환성 애너테이션 2

@TargetApi(Build.VERSION_CODES.S)
fun noti() {
    (...생략...)
    val builder: Notification.Builder = Notification.Builder(this, "1")
        .setStyle(
            Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent) 
        )
    (...생략...)
}

 

API 호환성 애너테이션은 안드로이드 스튜디오에서 오류를 무시하는 설정일 뿐

앱이 실행될 때 API 레벨 호환성 문제 막으려면 직접 코드로 처리해 줘야 함

 

· API 레벨 30 이상에서만 addCallback() 함수 실행

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S){
    val builder: Notification.Builder = Notification.Builder(this, "1")
        .setStyle(
            Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent)
        )
}

 

Build.VERSION.SDK_INT는 앱이 실행되는 기기의 API레벨임

if문에서 이 값을 이용해 특정 버전에서만 실행하도록 작성할 수 있음