Google Play Billing Library 구버전 경고 해결하기
이 글에서 다루는 내용
이 글에서는 Flutter 앱에서 인앱결제를 직접 구현하지 않았는데도 Play Console이 "앱에서 현재 Play 결제 라이브러리 AIDL 버전을 사용 중입니다. 6.0.1 버전 이상으로 업데이트해야 합니다"라는 경고를 띄우는 원인과, 전이 의존성으로 들어온 구버전 Billing Library를 Gradle 단계에서 덮어쓰는 방법을 다룹니다.
경고 메시지와 원인
Play Console 출시 화면에 다음 경고가 표시됐습니다.
앱에서 현재 Play 결제 라이브러리 AIDL 버전을 사용 중입니다. Google Play의 최신 수익 창출 기능을 사용하려면 6.0.1 버전 이상으로 업데이트해야 합니다.
앱 pubspec에는 in_app_purchase 같은 결제 플러그인이 없었습니다. 원인은 kakao_flutter_sdk_user 등 일부 SDK가 내부적으로 구버전 Billing Library(AIDL 방식)를 전이 의존성으로 포함하기 때문입니다. 내가 직접 호출하지 않아도 AAB에 해당 클래스가 들어가면 Play 스캐너가 감지해 경고를 냅니다.
전이 의존성 확인
어느 의존성이 구버전을 끌어왔는지 Gradle 의존성 그래프에서 검색합니다.
cd android
./gradlew :app:dependencies --configuration releaseRuntimeClasspath > /tmp/deps.txt 2>&1
grep -i billing /tmp/deps.txt
결과에 com.android.billingclient:billing:... 라인이 여러 개 나오면 SDK가 전이 의존성으로 들어온 것입니다.
임시 해결 — Gradle로 버전 강제 통일
앱에서 직접 결제 기능을 쓰지 않고 경고만 해소하고 싶다면, 최신 Billing Library를 명시적으로 추가하고 resolutionStrategy로 모든 의존성을 동일 버전으로 강제합니다.
android/app/build.gradle.kts:
dependencies {
implementation("com.google.mlkit:text-recognition-korean:16.0.1")
implementation("com.android.billingclient:billing:6.2.1")
}
configurations.all {
resolutionStrategy {
force("com.android.billingclient:billing:6.2.1")
}
}
두 블록의 역할 분담이 중요합니다.
implementation은 앱에 최신 버전을 포함시킵니다.resolutionStrategy.force는 구버전을 끌어오는 다른 의존성들도 동일 버전으로 통일해 AAB에 구·신 두 버전이 공존하는 상황을 방지합니다.
하나만 추가하면 Play 스캐너가 여전히 구버전 클래스를 감지해 경고가 남을 수 있습니다.
장기 해결 — 정식 결제 플러그인 도입
구독 기능을 실제로 붙일 예정이라면 purchases_flutter(RevenueCat) 또는 in_app_purchase를 pubspec에 추가하는 쪽이 맞습니다. 이 플러그인들은 자체적으로 최신 Billing Library를 포함하므로 위 Gradle 수동 override는 제거해도 됩니다.
dependencies:
purchases_flutter: ^8.0.0
플러그인이 최신 billing을 끌어오는 상태에서 force 블록이 낮은 버전으로 고정돼 있으면 오히려 다운그레이드가 일어날 수 있으니 플러그인 도입 시점에 삭제합니다.
적용 후 확인
새 AAB를 빌드해 업로드한 뒤 Play Console에서 경고가 사라졌는지 확인합니다. 같은 versionCode는 거부되므로 pubspec.yaml 버전을 반드시 올리고 빌드합니다.
fvm flutter clean
fvm flutter pub get
fvm flutter build appbundle --release