# Android

## サポート環境

* Android minSdk 26 以上
* Android Gradle Plugin 8.0 以上

***

## Step 1. パッケージをインストールする

Nubrick SDK は Maven Central から追加できます。

* [Maven Central](https://central.sonatype.com/artifact/io.nubrick/nubrick)

{% tabs %}
{% tab title="Gradle (Groovy)" %}
`build.gradle` に以下を追加します。

```gradle
dependencies {
  implementation 'io.nubrick:nubrick:<LATEST_VERSION>'
}
```

{% endtab %}

{% tab title="Gradle (Kotlin DSL)" %}
`build.gradle.kts` に以下を追加します。

```kotlin
dependencies {
  implementation("io.nubrick:nubrick:<LATEST_VERSION>")
}
```

{% endtab %}

{% tab title="Apache Maven" %}
`pom.xml` に以下を追加します。

```xml
<dependency>
  <groupId>io.nubrick</groupId>
  <artifactId>nubrick</artifactId>
  <version>${LATEST_VERSION}</version>
</dependency>
```

{% endtab %}
{% endtabs %}

## Step 2. Nubrick SDK を初期化する

{% hint style="warning" %}
`NubrickSDK.initialize(...)` は、`Embedding` / `RemoteConfig` / `dispatch` など他の API を使う前に、必ず 1 回だけ実行してください。
{% endhint %}

### Jetpack Compose

アプリ全体で 1 回だけ初期化するため、`Application` の `onCreate` で SDK を初期化し、`Activity` 側ではルート Composable を `NubrickProvider { ... }` で包みます。

```kotlin
import android.app.Application
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import io.nubrick.nubrick.Config
import io.nubrick.nubrick.NubrickProvider
import io.nubrick.nubrick.NubrickSDK

class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        NubrickSDK.initialize(
            context = this,
            config = Config(projectId = "<YOUR_NUBRICK_PROJECT_ID>")
        )
    }
}

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContent {
            NubrickProvider {
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    NubrickSDK.Embedding(
                        id = "ID_OF_YOUR_EMBEDDING",
                        modifier = Modifier.height(240.dp)
                    )
                }
            }
        }
    }
}
```

既存の `Application` クラスがある場合は、その `onCreate` で `NubrickSDK.initialize(...)` を実行してください。\
`Application` クラスがない場合、新規作成して `AndroidManifest.xml` の `android:name` に指定してください。

必要に応じて、初期化時にキャッシュを指定できます。

```kotlin
import android.app.Application
import io.nubrick.nubrick.CachePolicy
import io.nubrick.nubrick.Config
import io.nubrick.nubrick.NubrickSDK
import kotlin.time.Duration.Companion.minutes

class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        NubrickSDK.initialize(
            context = this,
            config = Config(
                projectId = "<YOUR_NUBRICK_PROJECT_ID>",
                cachePolicy = CachePolicy(cacheTime = 10.minutes)
            )
        )
    }
}
```
