반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

멋진 개발자가 되고 싶다

[Android] compileSdkVersion과 targetSdkVersion의 이해 본문

Android/개발 관련 팁

[Android] compileSdkVersion과 targetSdkVersion의 이해

오패산개구리 2021. 7. 12. 17:21
728x90
반응형

이번 포스팅은 

 

build.gradle 파일에 있는

 

compileSdkVersion과 targetSdkVersion이 무엇인지 알아보겠습니다.

 

우리는 보통 새로운 Android SDK 버전이 출시되면 이 두 API 레벨 값을 모두 업데이트합니다.

 

하지만 우리는 왜 이렇게 설정하는 걸까요? 그리고 보통 같은 값으로 설정하는데 왜 두 개가 있는 걸까요?

compileSdkVersion과 targetSdkVersion은 모두 Android에서 이전 버전과의 호환성을 처리하는 데 매우 중요하므로,

 

새로운 Android SDK 버전이 나타날 때 수행할 작업과 연결됩니다.

 

하지만 그것들이 정확히 어떻게 작동할까요?

 

compileSdkVersion

 

Gradle에서 어떤 Android SDK 버전을 사용하여 앱을 컴파일할지를  정의합니다.

 

예를 들어,

 

Android 12에서 SDK 버전 31에서는 스플래시 화면을 쉽게 구현할 수 있는 새로운 API가 도입되었습니다.

 

이 새로운 API에서는 다음과 같은 속성을 사용하여 스플래시 화면을 사용자 지정할 수 있습니다.

 

 

앱에서 해당 API를 사용하려면 먼저 다음을 수행해야 합니다.

1. Android Studio에서 SDK 버전 31을 다운로드합니다.
2. 앱에서 SdkVersion을(를) 31로 업데이트합니다.

그래야 이러한 새 속성을 볼 수 있습니다.

그런 다음 이 새로운 스플래시 화면 API를 코드에 사용할 수 있습니다.

 

최신 기기가 아닌 경우는 어떻습니까?

 

그렇다고 해서 이 새로운 API만 사용할 수 있고

 

이 API를 사용할 수 없는 이전 버전의 Android 사용자를 잊어버려도 되는 것은 아닙니다.

앱의 minSdkVersion이 31보다 낮은 경우 이 새 API에 액세스 할 수 없는 구형 기기에 대해

 

스플래시 화면을 표시할 수 있는 다른 방법도 제공해야 합니다.

 

마찬가지로 일부 메서드 또는 속성은 이 Android SDK 버전에서 더 이상 사용되지 않을 수 있으며(deprecated) 일부는 제거될 수도 있습니다.

 

그렇기 때문에 앱에서 컴파일된 SdkVersion을 업데이트하면 컴파일 중에 해결되어야 하는 몇 가지 경고와 오류가 자주 나타납니다.

 

 

그러나 compileSdkVersion만 변경해도 실제로 생성한 앱의 동작은 변경되지 않습니다.

그렇다면 Android 시스템은 앱에서 새로운 기능을 사용할 수 있는지 없는지를 어떻게 알 수 있을까요?

 

바로 여기서 targetSdkVersion이 사용됩니다.

 

targetSdkVersion

 

targetSdkVersion은 앱이 설계되고 테스트된 안드로이드 버전을 시스템에 알려주는 속성입니다.

사용자가 앱에 정의된 targetSdkVersion보다 높은 안드로이드 버전을 사용하는 기기에서 앱을 실행하는 경우,

 

새로운 안드로이드 기능을 위해 시스템이 일부 역호환성 동작(backwards-compatibility)을 도입하여 앱이 설계한 방식으로 계속 작동하고 보이도록 할 수 있습니다.

 

예:

Android 12에서는 사용자 지정 알림의 모양이 변경되었습니다.

 

이전에는 알림 영역 전체를 사용할 수 있었지만

 

Android 12 시스템에서는 표준 템플릿을 모든 사용자 지정 알림에 적용하므로 보다 일관성이 있습니다.

 

TargetSdkVersion이 31보다 낮은 경우 시스템은 사용자가 해당 기능을 테스트하지 않은 것으로 가정하고 알림이 제대로 표시되지 않을 위험을 최소화하기 위해 이전 방식으로 알림을 표시합니다.

 

대상 SDK 버전을 31로 업데이트한 후에만 새 알림 모양이 사용됩니다.

 

 

Android SDK의 모든 변경 사항이 대상입니까?

아니요!

 

새로운 Android 버전에 도입된 모든 변경 사항이 대상으로 하는 것은 아니며 이러한 역호환성 메커니즘을 사용합니다.

 

각 Android 버전 릴리스에 대해 설명서에서 변경 내용이 두 개의 그룹으로 분할되어 있음을 확인할 수 있습니다.

1. 특정 Android 버전을 대상으로 하는 앱에 대한 동작 변경
2. 대상 SdkVersion에 관계없이 모든 애플리케이션에 대한 변경 사항이 적용됩니다.

후자의 예로는 Android 11에 1회 사용 권한이 도입될 수 있습니다.

 

기기가 Android 버전 11 이상을 사용하고 앱이 위치 허가를 요청할 때,

 

사용자는 해당 데이터에 대한 임시 액세스 권한을 부여할 수 있으며,

 

앱이 SDK 버전 30을 대상으로 하든 그렇지 않든 관계없이 해당 케이스를 적절하게 처리해야 합니다.

 

 

compile과 target SDK version 간의 관계


compileSdkVersion과 targetSdkVersion의 의미가 완전히 다르더라도 독립적이지 않습니다.

targetSdkVersion은 컴파일하는 동안 아무것도 모르는 것들을 대상으로 할 수 없기 때문에

 

compileSdkVersion보다 높을 수 없습니다.

 

이상적으로는 compileSdkVersion과 targetSdkVersion이 동일해야 하며 둘 다 최신 SDK를 가리켜야 합니다.

 

하지만 물론 해당 버전에서 도입된 모든 변경 사항이 앱에서 원활하게 동작하는지 테스트한 후에야 알 수 있습니다.

728x90
반응형