expo config plugin android options

임기준·2025년 5월 23일
0

Expo 프로젝트에서 android/build.gradle 파일의 buildscript { ext { ... } } 블록은 Android 빌드에 필요한 전역 변수(extra properties)를 정의하는 데 사용됩니다. Expo는 기본적으로 이러한 변수들을 자동으로 관리하지만, 특정 커스텀 설정이나 외부 라이브러리(특히 Config Plugins)를 사용할 때 이 ext 블록에 추가적인 설정을 하게 됩니다.

여기서는 Expo 환경에서 build.gradle의 buildscript ext에 흔히 포함되거나, Expo Config Plugins를 통해 자동으로 추가될 수 있는 주요 설정들을 나열해 드리겠습니다.

기본적으로 Expo에서 관리하는 buildscript { ext { ... } } 항목
Expo가 생성하는 Android 프로젝트의 android/build.gradle 파일에는 일반적으로 다음과 같은 ext 변수들이 포함됩니다. 이 값들은 Expo SDK 버전 및 사용하는 라이브러리에 따라 달라질 수 있습니다.

// android/build.gradle
buildscript {
    ext {
        buildToolsVersion = findProperty('android.buildToolsVersion') ?: '35.0.0' // 또는 최신 버전
        minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '24') // 또는 프로젝트 설정에 따라
        compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '35') // 또는 최신 버전
        targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34') // 또는 최신 버전
        kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.23' // 또는 최신 Kotlin 버전
        // frescoVersion = findProperty('expo.frescoVersion') ?: '2.5.0' // Fresco를 사용하는 경우
        // ndkVersion = findProperty('android.ndkVersion') ?: '26.1.10909125' // NDK를 사용하는 경우
    }
    repositories {
        google()
        mavenCentral()
        // ... 기타 repositories (예: Huawei, Sentry 등)
    }
    dependencies {
        classpath('com.android.tools.build:gradle:8.1.0') // Android Gradle Plugin (AGP) 버전
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") // Kotlin Gradle Plugin
        // ... 기타 buildscript dependencies (예: Google Services, Firebase Crashlytics 등)
    }
}

allprojects {
    repositories {
        mavenCentral()
        google()
        // ... 기타 allprojects repositories (예: Maven Local, JitPack 등)
    }
}

설명:

  • buildToolsVersion: Android Build Tools의 버전입니다.
  • minSdkVersion: 앱이 실행될 수 있는 최소 Android API 레벨입니다.
  • compileSdkVersion: 앱을 컴파일하는 데 사용되는 Android API 레벨입니다.
  • targetSdkVersion: 앱이 대상으로 하는 Android API 레벨입니다.
  • kotlinVersion: Kotlin Gradle Plugin의 버전입니다. Expo는 Kotlin을 사용하므로 이 플러그인이 필요합니다.
  • findProperty('android.propertyName') ?: 'defaultValue' 패턴은 Gradle 프로퍼티를 가져오되, 정의되지 않은 경우 기본값을 사용하도록 합니다. Expo는 app.json 또는 app.config.js의 expo-build-properties와 같은 Config Plugin을 통해 이러한 값들을 주입합니다.

Config Plugins를 통해 추가될 수 있는 ext 항목

Expo의 강력한 기능 중 하나인 Config Plugins는 app.json 또는 app.config.js 파일을 통해 네이티브 프로젝트(Android의 build.gradle 포함)를 자동으로 수정할 수 있게 해줍니다. 특정 외부 라이브러리(예: Firebase, Sentry, Stripe 등)나 커스텀 설정을 통합할 때 Config Plugin이 buildscript ext에 필요한 변수를 추가할 수 있습니다.

몇 가지 예시:

  1. expo-build-properties: 이 플러그인은 minSdkVersion, compileSdkVersion, targetSdkVersion, buildToolsVersion, kotlinVersion 등을 app.json에서 직접 설정할 수 있도록 합니다. 이 값들이 buildscript ext에 반영됩니다.

app.json 예시:

{
  "expo": {
    "plugins": [
      [
        "expo-build-properties",
        {
          "android": {
            "compileSdkVersion": 34,
            "targetSdkVersion": 34,
            "minSdkVersion": 24,
            "kotlinVersion": "1.8.0"
          },
          "ios": {
            "deploymentTarget": "13.0"
          }
        }
      ]
    ]
  }
}

위 설정은 android/build.gradle의 ext 블록에 해당 변수들을 주입합니다.

  1. @react-native-firebase/app (Firebase Config Plugin): Firebase SDK를 사용하면 특정 Firebase 서비스에 필요한 버전 정보 등이 buildscript ext에 추가될 수 있습니다.

app.json 예시:

{
  "expo": {
    "plugins": [
      "@react-native-firebase/app",
      // ... 다른 Firebase 플러그인 (예: @react-native-firebase/analytics)
    ]
  }
}

이 플러그인들은 내부적으로 Firebase 관련 ext 변수(예: googlePlayServicesAuthVersion, firebaseBomVersion 등)를 build.gradle에 추가할 수 있습니다.

  1. @sentry/react-native (Sentry Config Plugin): Sentry와 같은 오류 모니터링 서비스는 Gradle 플러그인 설정을 위해 ext 변수를 추가할 수 있습니다.

app.json 예시:

{
  "expo": {
    "plugins": [
      [
        "@sentry/react-native",
        {
          "organization": "your-sentry-org",
          "project": "your-sentry-project",
          "authToken": "your-sentry-auth-token"
        }
      ]
    ]
  }
}

Sentry 플러그인은 buildscript ext에 Sentry 관련 설정(예: sentryCliVersion, sentryUploadProguardMapping 등)을 추가할 수 있습니다.

  1. expo-gradle-ext-vars (Custom Gradle Ext Vars Plugin): 이 플러그인은 app.json을 통해 직접 build.gradle의 ext 변수를 주입할 수 있게 해줍니다. 특정 라이브러리의 버전 충돌을 해결하거나 커스텀 Gradle 설정이 필요할 때 유용합니다.

app.json 예시:

{
  "expo": {
    "plugins": [
      [
        "expo-gradle-ext-vars",
        {
          "googlePlayServicesLocationVersion": "20.0.0",
          "appCompatVersion": "1.4.2"
        }
      ]
    ]
  }
}

결론적으로,

Expo 프로젝트에서 android/build.gradle의 buildscript ext 섹션에 어떤 항목이 들어가는지는 다음 요인에 따라 달라집니다:

  • 현재 사용 중인 Expo SDK 버전
  • 프로젝트에 설치된 Expo Config Plugins
  • app.json 또는 app.config.js의 plugins 섹션에서 Config Plugin에 전달된 옵션

npx expo prebuild 명령을 실행하면 android 및 ios 디렉토리가 생성되거나 업데이트됩니다. 이때 생성된 android/build.gradle 파일을 직접 열어보면 프로젝트의 현재 ext 변수 정의를 정확히 확인할 수 있습니다.

profile
openerzone

0개의 댓글