> ## Documentation Index
> Fetch the complete documentation index at: https://guide.daro.so/llms.txt
> Use this file to discover all available pages before exploring further.

# 시작하기

> Daro Android SDK를 앱에 통합하는 방법에 대해 안내합니다.

export const androidPlguinLatestVersion = '1.0.13';

export const androidComposeLatestVersion = '1.3.2';

export const androidDaroMLatestVersion = '1.3.15';

export const androidDaroLatestVersion = '1.6.0';

export const androidCoreLatestVersion = '1.3.8';

## 시작하기 전에

프로젝트에 Daro SDK를 통합하기 전에 필요한 사항들을 확인하세요.

### 요구사항

* 안드로이드 minSdkVersion : 23

<Check>
  [app-ads.txt 파일 설정(링크)](https://guide.daro.so/ko/app-ads-txt-settings)이 잘 되었는지 다시 한 번 확인해주세요.
</Check>

<Warning>
  minSdk 26 미만일 경우 Desugaring 설정을 필요로 합니다.

  <CodeGroup>
    ```kotlin kotlin {4,5,6,7,8,18} theme={null}
    android {
        ...

        compileOptions {
            isCoreLibraryDesugaringEnabled = true
            sourceCompatibility = JavaVersion.VERSION_1_8
            targetCompatibility = JavaVersion.VERSION_1_8
        }

        ...
    }

    ...

    dependencies {
        ...

        coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4")

        ...
    }
    ```

    ```groovy groovy {4,5,6,7,8,18} theme={null}
    android {
        ...

        compileOptions {
            coreLibraryDesugaringEnabled true
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }

        ...
    }

    ...

    dependencies {
        ...

        coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'

        ...
    }
    ```
  </CodeGroup>
</Warning>

***

## 앱 설정하기

<Steps>
  <Step title="프로젝트 단위 빌드 설정">
    1. `settings.gradle` 파일에 maven repository 들을 추가합니다.

    <Tabs>
      <Tab title="Non-Reward">
        <CodeGroup>
          ```kotlin kotlin theme={null}
          dependencyResolutionManagement {
              repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
              repositories {
                  ...
                  maven { url = uri("https://artifact.bytedance.com/repository/pangle") }
                  maven { url = uri("https://cboost.jfrog.io/artifactory/chartboost-ads/") }
                  maven { url = uri("https://android-sdk.is.com/") }
                  maven { url = uri("https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea") }
                  maven { url = uri("https://repo.pubmatic.com/artifactory/public-repos") }
              }
          }
          ```

          ```groovy groovy theme={null}
          allprojects {
              repositories {
                  ...
                  maven { url 'https://artifact.bytedance.com/repository/pangle' }
                  maven { url 'https://cboost.jfrog.io/artifactory/chartboost-ads/' }
                  maven { url 'https://android-sdk.is.com/' }
                  maven { url 'https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea' }
                  maven { url 'https://repo.pubmatic.com/artifactory/public-repos' }
              }
          }
          ```
        </CodeGroup>
      </Tab>

      <Tab title="Reward">
        <CodeGroup>
          ```kotlin kotlin theme={null}
          dependencyResolutionManagement {
              repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
              repositories {
                  ...
                  maven { url = uri("https://android-sdk.is.com") }
                  maven { url = uri("https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea") }
                  maven { url = uri("https://maven.ogury.co") }
                  maven { url = uri("https://artifact.bytedance.com/repository/pangle") }
                  maven { url = uri("https://s3.amazonaws.com/smaato-sdk-releases/") }
                  maven { url = uri("https://cboost.jfrog.io/artifactory/chartboost-ads/") }
                  maven { url = uri("https://artifacts.applovin.com/android") }
              }
          }
          ```

          ```groovy groovy theme={null}
          allprojects {
              repositories {
                  ...
                  maven { url 'https://android-sdk.is.com' }
                  maven { url 'https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea' }
                  maven { url 'https://maven.ogury.co' }
                  maven { url 'https://artifact.bytedance.com/repository/pangle' }
                  maven { url 'https://s3.amazonaws.com/smaato-sdk-releases/' }
                  maven { url 'https://cboost.jfrog.io/artifactory/chartboost-ads/' }
                  maven { url 'https://artifacts.applovin.com/android' }
              }
          }
          ```
        </CodeGroup>
      </Tab>
    </Tabs>
  </Step>

  <Step title="build.gradle(root)에 daro 플러그인 추가">
    2. `build.gradle(root)` 파일에 daro 관련 플러그인을 추가합니다.

    <Info>
      Latest version

      * daro-plugin : {androidPlguinLatestVersion}
    </Info>

    <Tabs>
      <Tab title="Non-Reward">
        <CodeGroup>
          ```kotlin kotlin theme={null}
          buildscript {
              repositories {
                  google()
                  mavenCentral()
              }
              dependencies {
                  classpath("so.daro:daro-plugin:1.0.13")
              }
          }
          ```

          ```groovy groovy theme={null}
          buildscript {
              repositories {
                  google()
                  mavenCentral()
              }
              dependencies {
                  classpath 'so.daro:daro-plugin:1.0.13'
              }
          }
          ```
        </CodeGroup>
      </Tab>

      <Tab title="Reward">
        <CodeGroup>
          ```kotlin kotlin theme={null}
          buildscript {
              repositories {
                  google()
                  mavenCentral()
                  maven { url = uri("https://artifacts.applovin.com/android") }
              }
              dependencies {
                  classpath("so.daro:daro-plugin:1.0.13")
                  classpath("com.applovin.quality:AppLovinQualityServiceGradlePlugin:5.5.2")
              }
          }
          ```

          ```groovy groovy theme={null}
          buildscript {
              repositories {
                  google()
                  mavenCentral()
                  maven { url 'https://artifacts.applovin.com/android' }
              }
              dependencies {
                  classpath 'so.daro:daro-plugin:1.0.13'
                  classpath 'com.applovin.quality:AppLovinQualityServiceGradlePlugin:5.5.2'
              }
          }
          ```
        </CodeGroup>
      </Tab>
    </Tabs>
  </Step>

  <Step title="Daro SDK 추가">
    3. Daro SDK를 추가합니다.

    <Tabs>
      <Tab title="Non-Reward">
        <Info>
          Latest version

          * daro-a : {androidDaroLatestVersion}
          * daro-compose-util : {androidComposeLatestVersion}
        </Info>

        <CodeGroup>
          ```kotlin kotlin theme={null}
          dependencies {
              ...
              implementation("so.daro:daro-a:1.6.0")
              implementation("so.daro:daro-compose-util:1.3.2")
              ...
          }
          ```

          ```groovy groovy theme={null}
          dependencies {
              ...
              implementation 'so.daro:daro-a:1.6.0'
              implementation 'so.daro:daro-compose-util:1.3.2'
              ...
          }
          ```
        </CodeGroup>
      </Tab>

      <Tab title="Reward">
        <Info>
          Latest version

          * daro-m : {androidDaroMLatestVersion}
          * daro-compose-util : {androidComposeLatestVersion}
        </Info>

        <CodeGroup>
          ```kotlin kotlin theme={null}
          dependencies {
              ...
              implementation("so.daro:daro-m:1.3.15")

              // Compose-Only
              implementation("so.daro:daro-compose-util:1.3.2")
              ...
          }
          ```

          ```groovy groovy theme={null}
          dependencies {
              ...
              implementation 'so.daro:daro-m:1.3.15'

              // Compose-Only
              implementation 'so.daro:daro-compose-util:1.3.2'
              ...
          }
          ```
        </CodeGroup>
      </Tab>
    </Tabs>
  </Step>

  <Step title="android-daro-key.txt 파일 추가">
    4. `android-daro-key.txt` 파일을 추가합니다.

    <Tabs>
      <Tab title="일반">
        ```
        app/
        └── android-daro-key.txt
        ```
      </Tab>

      <Tab title="flavor/buildType 별 분기가 필요한 경우">
        ```
        app/
        └── src/
            ├── EnvA/
            │   └── android-daro-key.txt
            └── EnvB/
                └── android-daro-key.txt
        ```
      </Tab>
    </Tabs>

    <Note>
      `android-daro-key.txt`는 DARO 대시보드에서 다운받을 수 있습니다.
    </Note>
  </Step>

  <Step title="daroAppKey 설정">
    5. daroAppKey 를 설정합니다.

    <Tabs>
      <Tab title="일반">
        <Expandable title="gradle.properties 에 설정하기">
          ```properties theme={null}
          android.useAndroidX=true
          android.enableJetifier=true
          daroAppKey={APP_KEY}
          ```
        </Expandable>

        <Expandable title="app 모듈 gradle에 직접 설정하기">
          app 모듈 build.gradle에 아래와 같이 설정합니다.

          <CodeGroup>
            ```kotlin kotlin theme={null}
            buildscript{
                extra["daroAppKey"] = "APP_KEY"
            }
            ```

            ```groovy groovy theme={null}
            buildscript {
                ext.daroAppKey = "APP_KEY"
            }
            ```
          </CodeGroup>
        </Expandable>
      </Tab>

      <Tab title="flavor/buildType 별 분기가 필요한 경우">
        <Expandable title="gradle.properties 에 설정하기">
          ```properties theme={null}
          android.useAndroidX=true
          android.enableJetifier=true
          daroAppKey.EnvA={APP_KEY}
          daroAppKey.EnvB={APP_KEY}
          ```
        </Expandable>

        <Expandable title="app 모듈 gradle에 직접 설정하기">
          app 모듈 build.gradle에 아래와 같이 설정합니다.

          <CodeGroup>
            ```kotlin kotlin theme={null}
            buildscript{
                extra["daroAppKey.EnvA"] = "APP_KEY"
                extra["daroAppKey.EnvB"] = "APP_KEY"
            }
            ```

            ```groovy groovy theme={null}
            buildscript {
                ext.daroAppKey.EnvA = "APP_KEY"
                ext.daroAppKey.EnvB = "APP_KEY"
            }
            ```
          </CodeGroup>
        </Expandable>

        <Warning>
          Flavor 첫 글자를 반드시 대문자로 입력해주세요
        </Warning>
      </Tab>
    </Tabs>

    <Note>
      daroAppKey는 DARO 대시보드에서 확인할 수 있습니다.

      <img src="https://mintcdn.com/delightroom-5a71a6a8/zubkjN5vMaM7lt41/sdk-integration/android/img/appkey_sample.png?fit=max&auto=format&n=zubkjN5vMaM7lt41&q=85&s=f233dd9e626ee9f7ff43100b33f83e4e" alt="daroAppKey" width="300" data-path="sdk-integration/android/img/appkey_sample.png" />
    </Note>
  </Step>

  <Step title="build.gradle(app)에 daro plugin 적용">
    6. `build.gradle(app)`에 daro plugin을 적용합니다.

    <Tabs>
      <Tab title="Non-Reward">
        <CodeGroup>
          ```kotlin kotlin theme={null}
          plugins {
              ...
              id("so.daro.a")
              ...
          }
          ```

          ```groovy groovy theme={null}
          plugins {
              ...
              id 'so.daro.a'
              ...
          }
          ```
        </CodeGroup>
      </Tab>

      <Tab title="Reward">
        <CodeGroup>
          ```kotlin kotlin theme={null}
          plugins {
              ...
              id("so.daro.m")
              ...
          }
          ```

          ```groovy groovy theme={null}
          plugins {
              ...
              id 'so.daro.m'
              ...
          }
          ```
        </CodeGroup>
      </Tab>
    </Tabs>
  </Step>

  <Step title="필요시 proguard 규칙 적용하기">
    * daro sdk에는 아래 난독화 규칙이 consumer-rules.pro에 포함되어 있으며, Gradle로 AAR을 추가하면, 앱 빌드시 자동으로 병합됩니다.
    * 만약, 난독화 규칙을 변경하고 싶다면, 아래 내용들을 참고하여 proguard-rules.pro 파일에 적용하시길 바랍니다.

    <Tabs>
      <Tab title="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

        # media3 Player
        -keep class androidx.media3.common.** { *; }
        ```
      </Tab>

      <Tab title="Reward">
        Reward App의 경우 별도로 proguard를 설정하지 않아도 됩니다.
      </Tab>
    </Tabs>
  </Step>
</Steps>

## SDK 초기화하기

<Warning>
  **중요: SDK 초기화 후 광고 로드**

  * 광고를 로드하기 전에 `Daro.init()`를 호출하여 광고 SDK를 초기화합니다.
  * 초기화 전 광고를 요청하면 광고가 정상적으로 표시되지 않을 수 있습니다.
</Warning>

```kotlin theme={null}
class AppApplication : Application() {

  override fun onCreate() {
    ...

    // Daro SDK 초기화 
    Daro.init(
      application = application,
      sdkConfig = Daro.SDKConfig.Builder()
          .setDebugMode(...) // (Daro 로그 노출 여부, default : false)
          .setAppMuted(...) // (앱 음소거 설정, default : false)
          .build()
    )
  }
}
```

### 앱 음소거 설정

앱 오프닝, 배너, 전면 광고, 보상형, 보상형 전면 광고, 네이티브 광고 형식의 경우 `setAppMuted(...)` 메서드를 사용하여 앱 볼륨이 음소거되었음을 Daro SDK에 알릴 수 있습니다.

```kotlin theme={null}
// 앱 음소거 설정
Daro.setAppMuted(true)


// 앱 음소거 해제
Daro.setAppMuted(false)
```

<Tip>
  네이티브 광고는 로드 시점의 음소거 상태를 동영상 재생에 적용하므로, 네이티브 광고를 로드하기 전에 `setAppMuted`를 호출하세요.
</Tip>

<Warning>
  **앱 음소거 사용 시 주의사항**

  앱 음소거 설정 시 음소거 상태에서 재생이 불가한 일부 동영상 광고 소재가 요청에서 제외될 수 있어, 광고 풀이 소폭 감소하고 수익에 영향을 줄 수 있습니다.
</Warning>
