compileSdkVersion: 기본, 새로운 API 및 Gradle 설정

저자: IT Sectr 게시일: 2026-02-08 읽는 시간: 11 분

compileSdkVersion — 애플리케이션 컴파일 시 사용되는 Android SDK 버전입니다. 이 매개변수는 build.gradle에 지정되며 특정 API 레벨의 클래스, 메서드, 상수 및 인터페이스 등 빌드 시 개발자가 사용할 수 있는 API를 결정합니다. targetSdkVersion과 달리 compileSdkVersion은 런타임 동작에 영향을 미치지 않습니다. Android의 동작 변경 사항은 이 매개변수에 의존하지 않습니다. Android Developers에 따르면 compileSdk는 최소한 targetSdk와 같아야 하며 이상적으로는 최신 안정 API 레벨과 같아야 합니다.

핵심 포인트

  • compileSdkVersion — 컴파일용 SDK 버전, 지정된 레벨의 API에 대한 액세스 제공
  • 영향을 주지 않음 런타임 동작 — 동작 변경은 compileSdk가 아닌 targetSdkVersion에 의해 제어됨
  • compileSdk는 >= targetSdk여야 하며 최신 안정 API 레벨로 유지하는 것이 좋음
  • compileSdk 업그레이드는 더 이상 사용되지 않는 API 및 종속성 호환성 확인 필요
  • Android SDK에는 각 API 레벨에 대한 플랫폼이 포함되며 SDK Manager를 통해 다운로드

Android에서 compileSdkVersion이란?

compileSdkVersion은 build.gradle의 정수 매개변수로, 코드를 컴파일할 Android SDK 버전을 지정합니다. android.* 또는 androidx.*의 클래스를 사용하여 코드를 작성하면 컴파일러는 지정된 compileSdk 버전에서 사용 가능한 API와 대조합니다. 메서드가 API 36에서 도입되었고 compileSdk = 35인 경우 코드가 컴파일되지 않습니다. compileSdk = 36인 경우 코드는 컴파일되지만 확인 없이 API 35 기기에서 해당 메서드를 호출하면 충돌이 발생합니다.

compileSdkVersion은 Android Studio의 SDK Manager를 통해 설치된 Android SDK Platform에서 로드됩니다. 각 API 레벨에는 자체 플랫폼이 있습니다: android-21, android-29, android-34, android-35, android-36. 플랫폼에는 Kotlin/Java 컴파일러가 사용하는 클래스, 메서드 및 상수 집합인 android.jar가 포함됩니다. 플랫폼이 설치되지 않은 경우 Gradle은 첫 번째 빌드 시 sdkmanager를 통해 자동으로 다운로드합니다.

AGP(Android Gradle Plugin) 버전 8.7+는 Kotlin DSL에서 android- 접두사 없이 compileSdk = 36으로 정수로 compileSdk를 지정할 것을 권장합니다. compileSdk는 Groovy DSL에서 compileSdkVersion 36을 통해 또는 프리릴리스 SDK 버전(개발자 프리뷰)용 compileSdkPreview를 통해 설정할 수도 있습니다. compileSdkPreview는 공식 출시 전에 예정된 API 레벨을 테스트하는 데 사용됩니다.

kotlin
// build.gradle.kts — compileSdkVersion 설정
android {
    namespace = "com.example.myapp"

    // compileSdk = 36 — 최신 안정 API 레벨(Android 16)
    compileSdk = 36

    defaultConfig {
        applicationId = "com.example.myapp"
        minSdk = 26
        targetSdk = 36
        versionCode = 1
        versionName = "1.0.0"
    }
}

// 대안: 프리뷰 버전용 compileSdkPreview
// compileSdkPreview = "Baklava"

예제에서 compileSdk = 36은 모든 Android 16(Baklava) API에 대한 액세스를 제공합니다. Android SDK Platform 36은 SDK Manager에 설치되어야 합니다. "Baklava"라는 이름의 compileSdkPreview는 공식 플랫폼 출시 전에 불안정한 API를 테스트하는 데 사용할 수 있습니다. 출시 후 프리뷰는 안정적인 compileSdk = 36으로 대체됩니다.

compileSdkVersion vs targetSdkVersion vs minSdkVersion

build.gradle의 세 가지 API 레벨 매개변수 — compileSdkVersion, targetSdkVersion 및 minSdkVersion — 은 종종 혼동됩니다. 각각은 호환성의 다른 측면을 담당하며 값은 compileSdk >= targetSdk >= minSdk 규칙을 따라야 합니다. minSdk는 하한선입니다: 이보다 낮은 기기는 앱을 볼 수 없습니다. targetSdk는 테스트 지점입니다: 이 레벨까지 동작 변경이 활성화됩니다. compileSdk는 상한선입니다: 이 레벨 위의 API는 컴파일러가 사용할 수 없습니다.

중요한 실용 규칙: compileSdk는 기기 테스트 없이도 높일 수 있습니다. 이는 컴파일러에 새 버전의 android.jar를 제공하는 안전한 작업입니다. 유일한 위험은 새 플랫폼 버전에서 제거될 수 있는 더 이상 사용되지 않는 API이지만 이는 컴파일 시 감지되어 쉽게 수정됩니다. 반면 targetSdk를 높이려면 전체 QA 주기가 필요합니다.

매개변수범위런타임에 영향테스트 필요
compileSdkVersion컴파일아니오아니오(더 이상 사용되지 않는 API 확인만)
targetSdkVersion런타임예 — 동작 변경예 — 전체 QA 주기
minSdkVersion설치아니오아니오(그러나 적용 범위에 영향)

compileSdk가 targetSdk보다 높을 수 있는 이유는 무엇인가요? Android 16(API 36)이 코드에서 사용하려는 새로운 API와 함께 출시되었지만 아직 API 36의 동작 변경을 테스트하지 않았다고 가정해 보세요. compileSdk = 36(새 API 사용 가능), targetSdk = 35(API 36 동작 변경 비활성화)로 설정합니다. 코드는 컴파일되고 SDK_INT 확인 아래에서 새 메서드를 사용하며 targetSdk = 35이므로 API 36의 동작 변경이 앱을 중단시키지 않습니다.

올바른 조합의 예

compileSdk = 36, targetSdk = 36, minSdk = 26 — 최신 API 및 동작 변경과의 완전한 호환성, 기기의 85% 커버. compileSdk = 36, targetSdk = 34, minSdk = 26 — 새 API 사용 가능, 동작 변경은 API 34까지만. compileSdk = 35, targetSdk = 36 — 올바르지 않음: compileSdk가 targetSdk보다 낮고 API 36을 사용할 수 없지만 36의 동작 변경은 활성 상태.

compileSdkVersion 업데이트 방법: 단계별 가이드

compileSdkVersion 업데이트는 Android 프로젝트에서 가장 간단하고 안전한 작업 중 하나입니다. targetSdk와 달리 동작 변경에 대한 광범위한 테스트가 필요하지 않습니다. 그러나 컴파일 오류 및 사용 중단 경고를 피하기 위해 따라야 할 몇 가지 단계가 있습니다.

1단계 — Android Studio의 SDK Manager를 통해 새 플랫폼 설치: Tools → SDK Manager → SDK Platforms → 새 API 레벨 선택. 플랫폼을 설치하지 않으면 Gradle이 자동으로 다운로드하려고 시도하지만 첫 번째 빌드가 느려질 수 있습니다. 2단계 — build.gradle에서 compileSdk를 새 값으로 변경. 3단계 — 빌드(Build → Make Project)하고 컴파일 오류 수정.

4단계 — 더 이상 사용되지 않는 API 확인. compileSdk를 높인 후 일부 메서드는 "removed in API X" 메모와 함께 @Deprecated로 표시될 수 있습니다. Android Studio는 취소선으로 강조 표시하고 경고를 표시합니다. 더 이상 사용되지 않는 호출을 새 대안으로 교체하십시오. 대안에 minSdk보다 높은 API 레벨이 필요한 경우 런타임 확인을 추가하십시오. 5단계 — 종속성 확인: 일부 라이브러리는 특정 compileSdk 버전이 필요할 수 있습니다. AGP 8.7+는 compileSdk = 36을 권장합니다.

kotlin
// compileSdk 업그레이드 후: 사용 중단 API 교체
import android.os.Build
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import android.os.Process
import android.app.ActivityManager

class CompileSdkMigration {

    // 이전: 사용 중단 메서드(새 API에서 제거될 수 있음)
    @Suppress("DEPRECATION")
    fun getMemoryClassOld(context: android.content.Context): Int {
        val am = context.getSystemService(
            android.content.Context.ACTIVITY_SERVICE
        ) as ActivityManager
        return am.memoryClass  // API 36에서 사용 중단될 수 있음
    }

    // 이후: 새 대안(사용 가능한 경우)
    fun getMemoryClassNew(context: android.content.Context): Int {
        if (VERSION.SDK_INT >= VERSION_CODES.BAKLAVA) {
            // compileSdk 36의 새 API
            val am = context.getSystemService(
                android.content.Context.ACTIVITY_SERVICE
            ) as ActivityManager
            return am.getMemoryClassSafe()  // 새 API 예제
        }
        @Suppress("DEPRECATION")
        return context.getSystemService(
            android.content.Context.ACTIVITY_SERVICE
        ) as ActivityManager
            .memoryClass
    }
}

CompileSdkMigration 클래스는 올바른 마이그레이션 패턴을 보여줍니다. 이전 메서드 memoryClass는 새 API에서 제거될 수 있으며 컴파일러가 오류를 발생시킵니다. 새 대안 getMemoryClassSafe는 API 36+에서만 사용할 수 있으므로 SDK_INT >= BAKLAVA 확인 하에 호출됩니다. 이전 기기의 경우 @Suppress("DEPRECATION")와 함께 폴백이 사용됩니다.

새로운 API 작업: 조건부 확인 및 폴백

새로운 API는 compileSdkVersion 업그레이드로 사용할 수 있게 되지만 minSdkVersion이 해당 API 레벨보다 낮으면 직접 호출할 수 없습니다. 런타임 확인 없이 이전 기기에서 AbstractMethodError, NoSuchMethodError 또는 VerifyError와 함께 앱이 충돌합니다. 주요 보호 메커니즘은 Build.VERSION.SDK_INT를 확인하고 API 레벨이 충분할 때만 새 API를 호출하며 이전 버전에 대한 폴백을 제공하는 것입니다.

AndroidX는 많은 새로운 API에 대한 백포트를 제공하여 낮은 compileSdk에서도 최신 메서드를 사용할 수 있게 합니다. 예를 들어, androidx.activity:activity-ktx:1.9.3의 Activity Result API는 API 14부터 모든 Android 버전에서 작동합니다. AndroidX의 NotificationCompat은 이전 API에서 최신 알림을 가능하게 합니다. PhotoPicker는 API 34+부터 ActivityResultContracts.PickVisualMedia를 통해 사용할 수 있습니다.

kotlin
// compileSdk 36 및 minSdk 26으로 새 API 안전 호출
import android.os.Build
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import android.graphics.Color

class NewApiHelper {

    // API 36+: 색상 작업을 위한 새 메서드
    fun formatColor(colorInt: Int): String {
        if (VERSION.SDK_INT >= VERSION_CODES.BAKLAVA) {
            // compileSdk 36의 새 API — API 36+ 필요
            return Color.toArgbHexString(colorInt)
        }
        // 폴백: 이전 API용 수동 형식 지정
        return String.format(
            "#%08X", (0xFFFFFFFF toLong() and colorInt.toLong())
        )
    }

    // AndroidX: 백포트 불필요 — SDK_INT 확인
    fun isEdgeToEdgeAvailable(): Boolean {
        return VERSION.SDK_INT >= VERSION_CODES.VANILLA_ICE_CREAM
    }
}

// Activity에서 사용
class ColorActivity : android.app.Activity() {
    override fun onCreate(savedInstanceState: android.os.Bundle?) {
        super.onCreate(savedInstanceState)
        val helper = NewApiHelper()
        val colorStr = helper.formatColor(0xFF6200EE)
        println("Color: $colorStr")
    }
}

NewApiHelper 클래스는 이전 버전용 폴백 형식과 함께 새 API Color.toArgbHexString(가상의 API 36)의 안전한 호출을 보여줍니다. 핵심 원칙: compileSdk는 코드에서 새 메서드를 호출하는 액세스를 제공하지만 런타임 SDK_INT 확인이 이전 기기에서의 충돌을 방지합니다. SDK_INT 확인 없이 minSdk 26 및 compileSdk 36 앱은 Android 8-15에서 충돌합니다.

AGP(Android Gradle Plugin) 및 compileSdkVersion

Android Gradle Plugin(AGP)은 Android 애플리케이션의 기본 빌드 도구입니다. 각 AGP 버전은 특정 범위의 compileSdkVersion을 지원합니다. AGP 8.7.x(2026년 출시)는 compileSdk >= 34가 필요하고 compileSdk = 36을 권장합니다. AGP 8.5.x는 compileSdk 33-35를 지원합니다. compileSdk가 AGP의 최소값보다 낮으면 빌드가 오류와 함께 실패합니다: "The SDK platform (X) is not supported by this version of the Android Gradle Plugin".

NDK(Native Development Kit)도 compileSdkVersion에 연결됩니다. 프로젝트가 NDK를 통해 C/C++ 네이티브 코드를 사용하는 경우 compileSdk는 헤더 파일 및 라이브러리의 버전을 결정합니다. NDK r27+는 compileSdk 36을 권장합니다. .so 파일이 있는 라이브러리의 경우 compileSdk는 Application.mk의 APP_MIN_SDK_VERSION을 통해 네이티브 코드의 최소 API 레벨에 영향을 줍니다.

AGP 버전최소 compileSdk권장 compileSdk비고
8.3.x3334Android 14 지원
8.5.x3335Android 15, R8 전체 모드
8.7.x3436Android 16, Kotlin 2.1
8.9.x3536비전이 R 클래스

Gradle(7.6+) 및 Kotlin(2.0+)도 compileSdk 호환성에 영향을 줍니다. AGP 8.7+에는 Gradle 8.9+ 및 Kotlin 2.0+가 필요합니다. compileSdk를 업그레이드할 때 AGP, Gradle 및 Kotlin을 최신 안정 버전으로 업데이트하는 것이 좋습니다. 공식 Android Gradle Plugin 호환성 표에서 호환성을 확인하십시오.

compileSdk 업그레이드 시 일반적인 문제

compileSdkVersion 업그레이드 시 문제는 세 가지 범주로 나뉩니다: 컴파일 오류, 사용 중단 경고 및 런타임 비호환성. 컴파일 오류 — 메서드가 API에서 제거되고 코드가 컴파일되지 않음. 사용 중단 경고 — 메서드가 @Deprecated로 표시되고 코드가 경고와 함께 컴파일됨. 런타임 비호환성 — 새 API가 특정 기능에 필요하며 기기의 API 레벨이 충분하지 않으면 오류가 발생함.

첫 번째 일반적인 문제 — "Cannot resolve symbol X". 이는 클래스나 메서드가 새 SDK 버전의 공개 API에서 제거되었음을 의미합니다. 해결책: 새 플랫폼에서 대안을 찾거나 AndroidX 등가물을 사용합니다. 예를 들어 AsyncTaskLoader 클래스는 API 28에서 사용 중단되었고 새 버전에서 공개 API에서 제거되었습니다. 대안에는 Kotlin Coroutines 또는 WorkManager가 있습니다.

두 번째 문제 — 메서드 서명 변경. 새 API 버전에서 메서드의 매개변수 수나 유형이 변경될 수 있습니다. Kotlin/Java 컴파일러가 오류를 발생시킵니다: "None of the following functions can be called with the arguments supplied". 해결책: 새 서명에 맞게 메서드 호출을 업데이트하거나 이전 기기용 이전 서명 호출과 함께 SDK_INT 확인을 추가합니다.

kotlin
// compileSdk 업그레이드 시 문제 해결
import android.os.Build
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import android.content.pm.PackageManager

class CompileSdkProblemFixer {

    // 문제: hasSystemFeature 메서드가 API 36에서 서명 변경
    fun hasCamera(pm: PackageManager): Boolean {
        return if (VERSION.SDK_INT >= VERSION_CODES.BAKLAVA) {
            // 새 서명: hasSystemFeature(String, FeatureType)
            pm.hasSystemFeature(
                PackageManager.FEATURE_CAMERA,
                PackageManager.FEATURE_TYPE_BACK
            )
        } else {
            // 이전 서명: hasSystemFeature(String)
            @Suppress("DEPRECATION")
            pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)
        }
    }

    // 문제: 클래스 제거됨, AndroidX 등가물 사용
    fun loadFragment(manager: androidx.fragment.app.FragmentManager) {
        // android.app.FragmentManager(제거됨) 대신 사용
        // androidx.fragment.app.FragmentManager
        val fragment = CustomFragment()
        manager.beginTransaction()
            .replace(android.R.id.content, fragment)
            .commit()
    }
}

CompileSdkProblemFixer 클래스는 일반적인 문제를 해결합니다: hasSystemFeature의 변경된 서명(API 36의 가상 변경)은 올바른 버전의 메서드를 호출하는 SDK_INT 확인을 통해 처리됩니다. 제거된 클래스 android.app.FragmentManager는 AndroidX 등가물로 대체됩니다. 대안이 없는 이전 호출의 경우 @Suppress("DEPRECATION")이 유지 이유를 설명하는 주석과 함께 사용됩니다.

자주 묻는 질문

Android에서 compileSdkVersion이란?

compileSdkVersion은 코드 컴파일에 사용되는 Android SDK 버전입니다. 빌드 시 개발자가 사용할 수 있는 API를 결정합니다. compileSdk는 런타임 동작에 영향을 주지 않습니다 — 동작 변경은 targetSdkVersion에 의해 관리됩니다. compileSdk는 >= targetSdk 및 >= minSdk여야 합니다. compileSdk 업그레이드는 새 API에 대한 액세스를 제공하지만 사용 중단 메서드 및 AGP 호환성 확인이 필요합니다.

compileSdkVersion과 targetSdkVersion의 차이점은 무엇인가요?

compileSdkVersion은 컴파일을 제어합니다: 코드에서 호출할 수 있는 API. targetSdkVersion은 런타임 동작을 제어합니다: 적용되는 동작 변경. compileSdk는 targetSdk보다 높을 수 있습니다 — 이는 새 버전의 동작 변경을 활성화하지 않고 코드에서 새 API를 사용할 수 있게 합니다. compileSdk는 항상 >= targetSdk입니다. minSdk는 가장 낮은 매개변수, targetSdk는 중간, compileSdk는 가장 높습니다.

2026년에는 어떤 compileSdkVersion을 사용해야 하나요?

2026년에는 compileSdk = 36(Android 16, 코드명 Baklava)이 권장됩니다. 이는 최신 Android 버전의 모든 API에 대한 액세스를 제공합니다. 라이브러리 및 SDK의 경우 소비자에게 업그레이드를 강요하지 않도록 compileSdk = 35 또는 34를 사용할 수 있습니다. compileSdk는 SDK Manager를 통해 설치하고 AGP 버전에서 지원해야 합니다. AGP 8.7+는 compileSdk >= 34가 필요합니다.

compileSdk 업그레이드 후 코드가 컴파일되지 않으면 어떻게 해야 하나요?

compileSdk 업그레이드 후 오류는 일반적으로 제거된 API로 인해 발생합니다: @Deprecated로 표시되고 제거된 클래스나 메서드. 해결책: 새 SDK에서 대안을 찾거나 AndroidX 등가물을 사용하거나 @SuppressLint를 추가합니다. 두 번째 원인은 매니페스트의 새로운 필수 권한입니다. 세 번째는 메서드 서명 변경입니다: 문서를 확인하고 SDK_INT 확인과 함께 호출을 새 서명으로 업데이트합니다.

compileSdkVersion을 targetSdk와 동시에 업그레이드해야 하나요?

compileSdkVersion은 targetSdk와 독립적으로 업그레이드할 수 있습니다. targetSdk = 34와 함께 compileSdk = 36의 구성은 유효합니다: 코드는 새 API로 컴파일되지만 API 35-36의 동작 변경은 활성화되지 않습니다. compileSdk 업그레이드는 안전하며 QA가 필요하지 않습니다. targetSdk 업그레이드에는 동작 변경에 대한 전체 테스트 주기가 필요합니다. compileSdk를 최신 안정 API 레벨로 유지하는 것이 좋습니다.

요약

  • compileSdkVersion — 컴파일용 Android SDK 버전, 사용 가능한 API 결정, 런타임에 영향 없음
  • 계층 규칙: compileSdk >= targetSdk >= minSdk; compileSdk는 targetSdk보다 높을 수 있음
  • compileSdk 업그레이드는 안전한 작업으로 더 이상 사용되지 않는 API 및 종속성 호환성 확인만 필요
  • 새 API는 Build.VERSION.SDK_INT의 런타임 확인이 필요하며 그렇지 않으면 이전 기기에서 충돌
  • AGP 버전 8.7+는 compileSdk >= 34 필요, compileSdk = 36 권장
  • AndroidX는 API 백포트를 제공하여 모든 compileSdk에서 최신 메서드 사용 가능
  • compileSdk 업그레이드 후 사용 중단 API: 대안으로 교체하거나 폴백과 함께 @Suppress 사용

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기