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 !/gradle/wrapper/gradle-wrapper.jar
app/debug/ app/debug/
app/release/ app/release/
app/daro-key.txt
app/android-daro-key.txt
app/src/**/daro-key.txt
app/src/**/android-daro-key.txt
.junie/ .junie/
.kiro/ .kiro/

View File

@@ -245,3 +245,55 @@
-keep interface com.yalantis.ucrop** { *; } -keep interface com.yalantis.ucrop** { *; }
-dontwarn com.linecorp.linesdk.BR -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.AppsFlyerLib
import com.appsflyer.deeplink.DeepLinkResult import com.appsflyer.deeplink.DeepLinkResult
import com.facebook.FacebookSdk import com.facebook.FacebookSdk
import droom.daro.a.Daro
import com.kakao.sdk.common.KakaoSdk import com.kakao.sdk.common.KakaoSdk
import com.orhanobut.logger.AndroidLogAdapter import com.orhanobut.logger.AndroidLogAdapter
import com.orhanobut.logger.Logger import com.orhanobut.logger.Logger
import droom.daro.SDKConfig
import kr.co.vividnext.sodalive.BuildConfig import kr.co.vividnext.sodalive.BuildConfig
import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.chat.talk.room.ChatRoomPreferenceManager import kr.co.vividnext.sodalive.chat.talk.room.ChatRoomPreferenceManager
@@ -52,6 +54,8 @@ class SodaLiveApp : Application(), DefaultLifecycleObserver {
setupAppsFlyer() setupAppsFlyer()
setupNotifly() setupNotifly()
setupDaro()
} }
private fun isDebuggable(): Boolean { 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) { override fun onStart(owner: LifecycleOwner) {
super.onStart(owner) super.onStart(owner)
isAppInForeground = true 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` 실행 불가 확인