API 레벨 호환성 고려하기

Hyeon·2023년 4월 19일
0

Android

목록 보기
10/15

API 레벨 설정

build.gradle 에서 아래와 같이 설정했을 경우 targetSDK를 31로 설정했으므로 31 버전의 API로 앱을 개발한다는 의미이다. minSDK는 21이므로 21버전 이상의 기기에서만 이 앱을 설치할 수 있다.

minSDK 21
targetSDK 31

따라서 이 앱에서 minSDK 보다 상위버전에서 제공하는 API를 사용할 경우 호환성을 고려해야 한다.

API 레벨 호환성 문제

Notification 클래스를 확인해보면 오른쪽에 API 버전 1에서 추가되었다는 것을 알 수 있다. 따라서 호환성 문제가 발생하지 않는다.

하지만 Notification.CallStyle 클래스는 API 버전 31에서 추가되었기 때문에 minSDK 가 21일 경우, 호환성 문제가 발생하게 된다.

추가된 API 버전에 상위 버전에서는 호환성 문제가 발생하지 않고, 하위 버전에서만 문제가 발생한다.

해결방법

  1. API 호환성 어노테이션
    문제가 발생하는 부분의 함수나 클래스에 @RequiresApi 또는 @TargetApi 어노테이션을 사용하면 안드로이드 스튜디오에서 오류가 발생하지 않는다. 오류를 무시하는 설정일 뿐 호환성 문제를 막으려면 직접 코드로 처리해줘야 한다.
@RequiresApi(Build.VERSION_CODES.S)
fun noti(){
    // 생략...
    val builder: Notification.Builder = Notification.Builder(this, "1")
        .setStyle(
            Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent)
        )
    // 생략...
}
@TargetApi(Build.VERSION_CODES.S)
fun noti(){
    // 생략...
    val builder: Notification.Builder = Notification.Builder(this, "1")
        .setStyle(
            Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent)
        )
    // 생략...
}
  1. 코드로 직접 처리하기
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 레벨이다.

참고 자료

  • Do it 안드로이드 도서
profile
컴공학부생입니다.

0개의 댓글