From 272cd502becbfe2449a3c72728ca77ff535023a8 Mon Sep 17 00:00:00 2001 From: klaus Date: Mon, 20 Apr 2026 11:46:29 +0900 Subject: [PATCH] =?UTF-8?q?chore(ads):=20Daro=20=EC=B4=88=EA=B8=B0?= =?UTF-8?q?=ED=99=94=EC=99=80=20=EB=B0=B0=ED=8F=AC=20=EC=84=A4=EC=A0=95?= =?UTF-8?q?=EC=9D=84=20=EB=B0=98=EC=98=81=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 ++ app/proguard-rules.pro | 52 +++++++++++++++++++ .../co/vividnext/sodalive/app/SodaLiveApp.kt | 14 +++++ docs/20260420_Daro광고기본세팅.md | 28 ++++++++++ 4 files changed, 98 insertions(+) create mode 100644 docs/20260420_Daro광고기본세팅.md diff --git a/.gitignore b/.gitignore index 8533db5b..38331aba 100644 --- a/.gitignore +++ b/.gitignore @@ -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/ diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index e519e7e1..0cefb1e6 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -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 diff --git a/app/src/main/java/kr/co/vividnext/sodalive/app/SodaLiveApp.kt b/app/src/main/java/kr/co/vividnext/sodalive/app/SodaLiveApp.kt index e03f5d15..4c4816f5 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/app/SodaLiveApp.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/app/SodaLiveApp.kt @@ -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 diff --git a/docs/20260420_Daro광고기본세팅.md b/docs/20260420_Daro광고기본세팅.md new file mode 100644 index 00000000..143bc610 --- /dev/null +++ b/docs/20260420_Daro광고기본세팅.md @@ -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` 실행 불가 확인