chore(ads): Daro 초기화와 배포 설정을 반영한다

This commit is contained in:
2026-04-20 11:46:29 +09:00
parent 1288fc3878
commit 272cd502be
4 changed files with 98 additions and 0 deletions

4
.gitignore vendored
View File

@@ -312,6 +312,10 @@ fabric.properties
!/gradle/wrapper/gradle-wrapper.jar
app/debug/
app/release/
app/daro-key.txt
app/android-daro-key.txt
app/src/**/daro-key.txt
app/src/**/android-daro-key.txt
.junie/
.kiro/

View File

@@ -245,3 +245,55 @@
-keep interface com.yalantis.ucrop** { *; }
-dontwarn com.linecorp.linesdk.BR
# Daro Android SDK (Non-Reward)
# Pangle (ByteDance)
-keep class com.bytedance.sdk.** { *; }
# Amazon APS
-keep class com.amazon.** { *; }
-keep public class com.google.android.gms.ads.** { public *; }
-keep class com.iabtcf.** { *; }
# IronSource
-keepclassmembers class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-keep class com.ironsource.adapters.** { *; }
-dontwarn com.ironsource.**
-dontwarn com.ironsource.adapters.**
-keepclassmembers class com.ironsource.** { public *; }
-keep public class com.ironsource.**
-keep class com.ironsource.adapters.** { *; }
# IronSource - AppLovin integration
-keepclassmembers class com.applovin.sdk.AppLovinSdk { static *; }
-keep public interface com.applovin.sdk.** { *; }
-keep public interface com.applovin.adview.** { *; }
-keep public interface com.applovin.mediation.** { *; }
-keep public interface com.applovin.communicator.** { *; }
# IronSource - AndroidX
-keep class androidx.localbroadcastmanager.content.LocalBroadcastManager { *; }
-keep class androidx.recyclerview.widget.RecyclerView { *; }
-keep class androidx.recyclerview.widget.RecyclerView$OnScrollListener { *; }
# IronSource - Android
-keep class * extends android.app.Activity
# Retrofit
-keep,allowobfuscation,allowshrinking interface retrofit2.Call
-keep,allowobfuscation,allowshrinking class retrofit2.Response
# kotlinx.serialization
-dontnote kotlinx.serialization.AnnotationsKt
-keepclassmembers class kotlinx.serialization.json.** {
*** Companion;
}
-keepclasseswithmembers class kotlinx.serialization.json.** {
kotlinx.serialization.KSerializer serializer(...);
}
# Kotlin Coroutines
-keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation

View File

@@ -11,9 +11,11 @@ import androidx.lifecycle.ProcessLifecycleOwner
import com.appsflyer.AppsFlyerLib
import com.appsflyer.deeplink.DeepLinkResult
import com.facebook.FacebookSdk
import droom.daro.a.Daro
import com.kakao.sdk.common.KakaoSdk
import com.orhanobut.logger.AndroidLogAdapter
import com.orhanobut.logger.Logger
import droom.daro.SDKConfig
import kr.co.vividnext.sodalive.BuildConfig
import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.chat.talk.room.ChatRoomPreferenceManager
@@ -52,6 +54,8 @@ class SodaLiveApp : Application(), DefaultLifecycleObserver {
setupAppsFlyer()
setupNotifly()
setupDaro()
}
private fun isDebuggable(): Boolean {
@@ -137,6 +141,16 @@ class SodaLiveApp : Application(), DefaultLifecycleObserver {
)
}
private fun setupDaro() {
Daro.init(
application = this,
sdkConfig = SDKConfig.Builder()
.setDebugMode(BuildConfig.DEBUG && isDebuggable())
.setAppMuted(false)
.build()
)
}
override fun onStart(owner: LifecycleOwner) {
super.onStart(owner)
isAppInForeground = true

View File

@@ -0,0 +1,28 @@
# 20260420 Daro 광고 기본 세팅
## 작업 체크리스트
- [x] 공식 Daro Android 가이드를 기준으로 `Non-Reward` + Android View 전용 기본 세팅 범위를 확정한다.
QA: Compose 전용 의존성/예제는 제외되고, `daro-a`, plugin, key 설정, SDK 초기화, ProGuard 규칙만 반영되어야 한다.
- [x] `settings.gradle`, `build.gradle`, `app/build.gradle`에 Daro 저장소/플러그인/SDK 및 desugaring 설정을 추가한다.
QA: 공식 문서 버전(`daro-plugin:1.0.13`, `daro-a:1.5.3`)과 minSdk 23 대응 desugaring 설정이 반영되어야 한다.
- [x] `SodaLiveApp`에 Daro SDK 초기화를 추가한다.
QA: 광고 로드 이전 `Application.onCreate()`에서 `Daro.init(...)`가 호출되어야 한다.
- [x] `app/proguard-rules.pro`에 공식 Non-Reward ProGuard/R8 규칙을 반영한다.
QA: Daro 문서의 Non-Reward keep/dontwarn 규칙이 파일에 추가되어야 한다.
- [x] Daro 키 파일/앱 키의 비밀값 커밋 방지 경로를 보강한다.
QA: `app/daro-key.txt`, `app/android-daro-key.txt` 및 flavor/buildType 분기 키 파일이 git 추적 대상에서 제외되어야 한다.
- [x] 변경 사항을 빌드로 검증하고 결과를 기록한다.
QA: `:app:assembleDebug`, `:app:assembleRelease` 결과와 비밀값 의존 여부를 문서 하단 검증 기록에 남겨야 한다.
## 검증 기록
- 2026-04-20
- 무엇: Daro Android 기본 세팅(Non-Reward, Android View 전용)을 위해 저장소/플러그인/SDK/desugaring 설정, `SodaLiveApp` 초기화, Non-Reward ProGuard 규칙, 키 파일 ignore 경로를 반영했다.
- 왜: 공식 `get-started` 가이드 기준으로 Compose 의존성을 제외한 Android View 앱용 기본 연동과 난독화 설정이 필요했다.
- 어떻게:
- 수정 파일: `settings.gradle`, `build.gradle`, `app/build.gradle`, `.gitignore`, `app/src/main/java/kr/co/vividnext/sodalive/app/SodaLiveApp.kt`, `app/proguard-rules.pro`
- 실행 명령: `./gradlew :app:assembleDebug`
- 결과: `DARO` 플러그인 적용과 의존성 해상도는 진행됐지만, 로컬 키 파일 `app/daro-key.txt`를 읽는 과정에서 `Tag mismatch!`가 발생해 `설정 파일이 유효하지 않습니다`로 실패했다.
- 실행 명령: `./gradlew :app:assembleRelease`
- 결과: release만 요청해도 플러그인 설정 단계에서 `debug` variant 키 검증이 먼저 수행됐고, 동일하게 `app/daro-key.txt``Tag mismatch!`로 실패했다. 따라서 현재 차단점은 ProGuard/R8 규칙이 아니라 로컬 Daro 키 파일/앱 키 정합성이다.
- 메모: 최신 문서는 `android-daro-key.txt`를 안내하지만, 실제 플러그인은 레거시 `app/daro-key.txt`도 읽고 있었다. 현재 로컬에 존재하는 키 파일과 `daroAppKey`가 서로 맞지 않거나 파일 자체가 유효하지 않아 빌드 검증이 차단됐다.
- 진단 도구: Kotlin(`.kt`)용 LSP 서버 미구성으로 `lsp_diagnostics` 실행 불가 확인