chore(ads): Daro 초기화와 배포 설정을 반영한다
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -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/
|
||||||
|
|||||||
52
app/proguard-rules.pro
vendored
52
app/proguard-rules.pro
vendored
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
28
docs/20260420_Daro광고기본세팅.md
Normal file
28
docs/20260420_Daro광고기본세팅.md
Normal 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` 실행 불가 확인
|
||||||
Reference in New Issue
Block a user