Android 광고 단위 ID를 Debug/Release 빌드에서 자동으로 분리하는 방법
AdMob 광고를 넣은 앱을 개발할 때 테스트 광고 ID와 실제 광고 ID를 수동으로 바꿔가며 빌드하고 있다면, 빌드 변형(Build Variant)별 리소스 분리를 사용해서 이 과정을 자동화할 수 있습니다.
수동 교체의 문제점
코드에 광고 ID를 직접 하드코딩하면 이런 실수가 생기기 쉽습니다:
- 테스트 ID를 그대로 둔 채 릴리스 빌드를 올림 -> 수익 발생 안 함
- 실제 ID를 넣고 디버그 빌드를 돌림 -> AdMob 정책 위반 가능성
해결 방법: Build Variant별 리소스 파일 분리
Android 빌드 시스템은 debug, release 등 빌드 타입별로 별도의 소스셋(source set)을 지원합니다.
같은 리소스 이름을 각 소스셋에 다른 값으로 정의하면,
빌드 타입에 따라 자동으로 올바른 값이 선택됩니다.
디렉토리 구조
app/src/
├── debug/
│ └── res/
│ └── values/
│ └── ads.xml ← 테스트 광고 ID
├── release/
│ └── res/
│ └── values/
│ └── ads.xml ← 실제 광고 ID
└── main/
└── ... ← 공통 코드 및 리소스
debug/와 release/ 디렉토리가 없으면 직접 생성하면 됩니다.
debug용 리소스 (테스트 광고 ID)
app/src/debug/res/values/ads.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Google에서 제공하는 테스트 광고 단위 ID -->
<string name="banner_ad_unit_id">ca-app-pub-3940256099942544/6300978111</string>
<string name="interstitial_ad_unit_id">ca-app-pub-3940256099942544/1033173712</string>
</resources>
release용 리소스 (실제 광고 ID)
app/src/release/res/values/ads.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 본인의 AdMob 광고 단위 ID -->
<string name="banner_ad_unit_id">ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX</string>
<string name="interstitial_ad_unit_id">ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX</string>
</resources>
두 파일의 string name이 반드시 동일해야 합니다.
코드에서 사용
광고를 로드하는 코드에서는 빌드 타입을 신경 쓰지 않고 리소스를 참조하면 됩니다:
val adUnitId = context.getString(R.string.banner_ad_unit_id)
- Debug 빌드(Android Studio에서 Run 버튼) ->
debug/res/values/ads.xml의 테스트 ID 사용 - Release 빌드(서명된 APK/AAB 생성) ->
release/res/values/ads.xml의 실제 ID 사용
주의사항
main/res/values/에 같은 이름의 리소스가 있으면 충돌이 발생합니다. 광고 ID는main에 정의하지 말고debug와release에만 정의해야 합니다.- 새로운 광고 단위를 추가할 때는
debug와release양쪽 모두에 추가해야 합니다. 한쪽만 추가하면 다른 빌드 타입에서 컴파일 오류가 발생합니다.