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 등)
}
}
Expo의 강력한 기능 중 하나인 Config Plugins는 app.json 또는 app.config.js 파일을 통해 네이티브 프로젝트(Android의 build.gradle 포함)를 자동으로 수정할 수 있게 해줍니다. 특정 외부 라이브러리(예: Firebase, Sentry, Stripe 등)나 커스텀 설정을 통합할 때 Config Plugin이 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 블록에 해당 변수들을 주입합니다.
app.json 예시:
{
"expo": {
"plugins": [
"@react-native-firebase/app",
// ... 다른 Firebase 플러그인 (예: @react-native-firebase/analytics)
]
}
}
이 플러그인들은 내부적으로 Firebase 관련 ext 변수(예: googlePlayServicesAuthVersion, firebaseBomVersion 등)를 build.gradle에 추가할 수 있습니다.
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 등)을 추가할 수 있습니다.
app.json 예시:
{
"expo": {
"plugins": [
[
"expo-gradle-ext-vars",
{
"googlePlayServicesLocationVersion": "20.0.0",
"appCompatVersion": "1.4.2"
}
]
]
}
}
결론적으로,
Expo 프로젝트에서 android/build.gradle의 buildscript ext 섹션에 어떤 항목이 들어가는지는 다음 요인에 따라 달라집니다:
npx expo prebuild 명령을 실행하면 android 및 ios 디렉토리가 생성되거나 업데이트됩니다. 이때 생성된 android/build.gradle 파일을 직접 열어보면 프로젝트의 현재 ext 변수 정의를 정확히 확인할 수 있습니다.