---
title: "Android SDKのインストールと設定"
description: "サブスクリプションアプリ向けにAndroidへAdapty SDKをインストールするステップバイステップガイド。"
---

Adapty SDK には、モバイルアプリへのシームレスな統合を実現する2つの主要モジュールが含まれています。

- **Core Adapty**: Adapty をアプリで正常に動作させるために必要な基本 SDK です。
- **AdaptyUI**: [Adapty ペイウォールビルダー](adapty-paywall-builder)（クロスプラットフォーム対応のペイウォールをコードなしで簡単に作成できるツール）を使用する場合に必要なモジュールです。AdaptyUI はコアモジュールと同時に自動的に有効化されます。
:::tip
Adapty SDK がモバイルアプリにどのように統合されるか、実際の例を見たいですか？ペイウォールの表示、購入処理、その他の基本的な機能を含む完全なセットアップを示す[サンプルアプリ](https://github.com/adaptyteam/AdaptySDK-Android/tree/master/app)をご覧ください。
:::
## 要件 \{#requirements\}

最低 SDK 要件: `minSdkVersion 21`

:::info
Adapty は Google Play Billing Library 8.x まで対応しています。デフォルトでは Google Play Billing Library v7.0.0 で動作しますが、より新しいバージョンを使用したい場合は、手動で[依存関係を追加](https://developer.android.com/google/play/billing/integrate#dependency)できます。
:::

---
no_index: true
---
import Callout from '../../../components/Callout.astro';

<Callout type="info">
SDKのインストールは、Adaptyセットアップのステップ5です。アプリ内で課金が機能するようにするには、アプリをストアに接続し、Adapty ダッシュボードでプロダクト、ペイウォール、プレースメントを作成する必要があります。[クイックスタートガイド](quickstart)では、必要なすべての手順を説明しています。
</Callout>

## Adapty SDK のインストール \{#install-adapty-sdk\}

依存関係の設定方法を選択してください：
- 標準 Gradle：依存関係を**モジュールレベル**の `build.gradle` に追加する
- プロジェクトで `.gradle.kts` ファイルを使用している場合は、モジュールレベルの `build.gradle.kts` に依存関係を追加する
- バージョンカタログを使用している場合は、`libs.versions.toml` ファイルに依存関係を追加し、`build.gradle.kts` で参照する

[![Release](https://img.shields.io/github/v/release/adaptyteam/AdaptySDK-Android.svg?style=flat&logo=android)](https://github.com/adaptyteam/AdaptySDK-Android/releases)
<Tabs>
<TabItem value="module-level build.gradle" label="module-level build.gradle" default>

```groovy showLineNumbers
dependencies {
    ...
    implementation platform('io.adapty:adapty-bom:<the latest SDK version>')
    implementation 'io.adapty:android-sdk'
    
    // Only add this line if you plan to use Paywall Builder
    implementation 'io.adapty:android-ui'
}
```

</TabItem>
<TabItem value="module-level build.gradle.kts" label="module-level build.gradle.kts" default>
```kotlin showLineNumbers
dependencies {
    ...
    implementation(platform("io.adapty:adapty-bom:<the latest SDK version>"))
    implementation("io.adapty:android-sdk")
    
    // Only add this line if you plan to use Paywall Builder:
    implementation("io.adapty:android-ui")
}
```

</TabItem>
<TabItem value="version catalog" label="version catalog" default>
```toml showLineNumbers
//libs.versions.toml

[versions]
..
adaptyBom = "<the latest SDK version>"

[libraries]
..
adapty-bom = { module = "io.adapty:adapty-bom", version.ref = "adaptyBom" }
adapty = { module = "io.adapty:android-sdk" }

// Only add this line if you plan to use Paywall Builder:
adapty-ui = { module = "io.adapty:android-ui" }

//module-level build.gradle.kts

dependencies {
    ...
    implementation(platform(libs.adapty.bom))
    implementation(libs.adapty)
    
    // Only add this line if you plan to use Paywall Builder:
    implementation(libs.adapty.ui)
}
```

</TabItem>
</Tabs>

依存関係が解決されない場合は、Gradle スクリプトに `mavenCentral()` が含まれているか確認してください。

<details>
   <summary>追加方法の手順</summary>

   プロジェクトの `settings.gradle` に `dependencyResolutionManagement` がない場合は、トップレベルの `build.gradle` のリポジトリ末尾に以下を追加してください：

```groovy showLineNumbers title="top-level build.gradle"
allprojects {
    repositories {
        ...
        mavenCentral()
    }
}
```
それ以外の場合は、`settings.gradle` の `dependencyResolutionManagement` セクションの `repositories` に以下を追加してください：

```groovy showLineNumbers title="settings.gradle"
dependencyResolutionManagement {
    ...
    repositories {
        ...
        mavenCentral()
    }
}
```

</details>
:::important
Adapty Android SDK 4.0 はプレリリース版です。Gradle の動的バージョン範囲（`+` や `latest.release` など）ではプレリリース版が自動選択されないため、正確なバージョンを指定する必要があります。`adapty-bom` のバージョンをプレリリース版に設定してください（例: `io.adapty:adapty-bom:4.0.0-beta.1`、または `libs.versions.toml` に `adaptyBom = "4.0.0-beta.1"`）。BOM が対応する `android-sdk` と `android-ui` のバージョンを自動解決します。詳しくは [Adapty Android SDK v4 への移行](migration-to-android-sdk-v4) を参照してください。
:::
## Adapty SDK の Adapty モジュールを有効化する \{#activate-adapty-module-of-adapty-sdk\}

### 基本設定 \{#basic-setup\}

アプリのコードで Adapty SDK を有効化します。

:::note
Adapty SDK はアプリ内で一度だけ有効化する必要があります。
:::

**Public SDK Key** を取得するには：

1. Adapty ダッシュボードを開き、[**App settings → General**](https://app.adapty.io/settings/general) に移動します。
2. **Api keys** セクションで、**Public SDK Key**（Secret Key ではない）をコピーします。
3. コード内の `"YOUR_PUBLIC_SDK_KEY"` を置き換えます。

または、[Adapty CLI](developer-cli) を使ってプログラムから取得することもできます：

```
npm install -g adapty
adapty auth login
adapty apps list
```

あるいは、直接実行する場合：

```
npx adapty auth login
adapty apps list
```

- Adapty の初期化には必ず **Public SDK key** を使用してください。**Secret key** は[サーバーサイド API](getting-started-with-server-side-api) 専用です。
- **SDK keys** はアプリごとに固有です。複数のアプリがある場合は、正しいキーを選択してください。

<Tabs groupId="current-os" queryString>
<TabItem value="kotlin" label="Kotlin" default>
```kotlin showLineNumbers
// In your Application class

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        Adapty.activate(
            applicationContext,
            AdaptyConfig.Builder("PUBLIC_SDK_KEY")
                .build()
        )
    }
}
```

</TabItem>
<TabItem value="java" label="Java" default>
```java showLineNumbers
// In your Application class

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Adapty.activate(
            getApplicationContext(),
            new AdaptyConfig.Builder("PUBLIC_SDK_KEY")
                .build()
        );
    }
}
```

</TabItem>
</Tabs>
:::important
他のAdapty SDKメソッドを呼び出す前に、`Adapty.activate`の完了を待ってください。詳しくは[Android SDKの呼び出し順序](android-sdk-call-order)をご参照ください。
:::

次に、アプリにペイウォールを設定します：

- [Adapty ペイウォールビルダー](adapty-paywall-builder)を使用する場合は、[ペイウォールビルダークイックスタート](android-quickstart-paywalls)をご覧ください。
- 独自のペイウォールUIを構築する場合は、[カスタムペイウォールのクイックスタート](android-quickstart-manual)をご覧ください。
## Adapty SDK の AdaptyUI モジュールを有効化する \{#activate-adaptyui-module-of-adapty-sdk\}

[ペイウォールビルダー](adapty-paywall-builder)を使用する予定の場合、AdaptyUI モジュールが必要です。コアモジュールを有効化すると自動的に有効化されるため、追加の操作は不要です。

## Proguard を設定する \{#configure-proguard\}

本番環境でアプリを公開する前に、Proguard の設定に `-keep class com.adapty.** { *; }` を追加してください。

## オプションの設定 \{#optional-setup\}

### ログ \{#logging\}

#### ログシステムの設定 \{#set-up-the-logging-system\}

Adapty はエラーや重要な情報をログに記録し、何が起きているかを把握しやすくします。以下のログレベルが利用できます。
| レベル                    | 説明                                                                                                               |
| :----------------------- | :------------------------------------------------------------------------------------------------------------------------ |
| `AdaptyLogLevel.NONE`    | 何もログに記録されません。デフォルト値                                                                                     |
| `AdaptyLogLevel.ERROR`   | エラーのみログに記録されます                                                                                                |
| `AdaptyLogLevel.WARN`    | エラーと、致命的なエラーではないものの注意が必要なSDKからのメッセージがログに記録されます。     |
| `AdaptyLogLevel.INFO`    | エラー、警告、および各種情報メッセージがログに記録されます。                                                                        |
| `AdaptyLogLevel.VERBOSE` | 関数呼び出し、APIクエリなど、デバッグ時に役立つ追加情報がすべてログに記録されます。 |
Adapty を設定する前に、アプリのログレベルを設定できます。

<Tabs>
<TabItem value="kotlin" label="Kotlin" default>
```kotlin showLineNumbers

Adapty.logLevel = AdaptyLogLevel.VERBOSE 
//recommended for development and the first production release
```
</TabItem>
<TabItem value="java" label="Java" default>
```java showLineNumbers

Adapty.setLogLevel(AdaptyLogLevel.VERBOSE);
//recommended for development and the first production release
```
</TabItem>
</Tabs>
#### ログシステムのメッセージをリダイレクトする \{#redirect-the-logging-system-messages\}

何らかの理由で Adapty からのメッセージを自分のシステムに送信したりファイルに保存したりする場合は、デフォルトの動作を上書きできます。
<Tabs>
<TabItem value="kotlin" label="Kotlin" default>
```kotlin showLineNumbers

Adapty.setLogHandler { level, message ->
    //handle the log
}
```
</TabItem>
<TabItem value="java" label="Java" default>
```java showLineNumbers

Adapty.setLogHandler((level, message) -> {
    //handle the log
});
```
</TabItem>
</Tabs>
### データポリシー \{#data-policies\}

Adapty はユーザーの個人データを明示的に送信しない限り保存しませんが、ストアや国のガイドラインに準拠するために追加のデータセキュリティポリシーを実装することができます。

#### IP アドレスの収集と共有を無効にする \{#disable-ip-address-collection-and-sharing\}

Adapty モジュールを有効化する際に、`ipAddressCollectionDisabled` を `true` に設定すると、ユーザーの IP アドレスの収集と共有を無効にできます。デフォルト値は `false` です。
このパラメータは、ユーザーのプライバシー保護、地域のデータ保護規制（GDPRやCCPAなど）への準拠、またはアプリでIPベースの機能が不要な場合の不必要なデータ収集の削減に役立ちます。

<Tabs>
<TabItem value="kotlin" label="Kotlin" default>

```kotlin showLineNumbers

AdaptyConfig.Builder("PUBLIC_SDK_KEY")
    .withIpAddressCollectionDisabled(true)
    .build()
```
</TabItem>
<TabItem value="java" label="Java" default>
```java showLineNumbers

new AdaptyConfig.Builder("PUBLIC_SDK_KEY")
    .withIpAddressCollectionDisabled(true)
    .build();
```
</TabItem>
</Tabs>

#### 広告IDの収集と共有を無効にする \{#disable-advertising-id-ad-id-collection-and-sharing\}

Adapty モジュールをアクティベートする際に、`adIdCollectionDisabled` を `true` に設定すると、ユーザーの[広告ID](https://support.google.com/googleplay/android-developer/answer/6048248)の収集を無効にできます。デフォルト値は `false` です。
Play Storeのポリシーに準拠する場合、広告IDの権限プロンプトを表示させたくない場合、またはアプリが広告IDに基づく広告アトリビューションや分析を必要としない場合に、このパラメーターを使用してください。

<Tabs>
<TabItem value="kotlin" label="Kotlin" default>

```kotlin showLineNumbers

AdaptyConfig.Builder("PUBLIC_SDK_KEY")
    .withAdIdCollectionDisabled(true)
    .build()
```
</TabItem>
<TabItem value="java" label="Java" default>
```java showLineNumbers

new AdaptyConfig.Builder("PUBLIC_SDK_KEY")
    .withAdIdCollectionDisabled(true)
    .build();
```
</TabItem>
</Tabs>

#### AdaptyUI のメディアキャッシュ設定 \{#set-up-media-cache-configuration-for-adaptyui\}

デフォルトでは、AdaptyUI はパフォーマンスの向上とネットワーク使用量の削減のため、メディア（画像や動画など）をキャッシュします。カスタム設定を指定することで、キャッシュの設定をカスタマイズできます。
`AdaptyUI.configureMediaCache`を使用して、デフォルトのキャッシュサイズと有効期間を上書きできます。これはオプションです。このメソッドを呼び出さない場合、デフォルト値が使用されます（ディスクサイズ100MB、有効期間7日間）。

<Tabs>
<TabItem value="kotlin" label="Kotlin" default>
```kotlin showLineNumbers

val cacheConfig = MediaCacheConfiguration.Builder()
    .overrideDiskStorageSizeLimit(200L * 1024 * 1024) // 200 MB
    .overrideDiskCacheValidityTime(3.days)
    .build()

AdaptyUI.configureMediaCache(cacheConfig)
```
</TabItem>
<TabItem value="java" label="Java" default>
```java showLineNumbers

MediaCacheConfiguration cacheConfig = new MediaCacheConfiguration.Builder()
    .overrideDiskStorageSizeLimit(200L * 1024 * 1024) // 200 MB
    .overrideDiskCacheValidityTime(TimeInterval.days(3))
    .build();

AdaptyUI.configureMediaCache(cacheConfig);
```
</TabItem>
</Tabs>

**パラメーター:**
| パラメーター | 必須/任意 | 説明 |
|-------------------------|----------|-----------------------------------------------------------------------------|
| diskStorageSizeLimit    | 任意 | ディスク上のキャッシュの合計サイズ（バイト単位）。デフォルトは 100 MB。 |
| diskCacheValidityTime   | 任意 | キャッシュファイルが有効とみなされる期間。デフォルトは 7 日間。 |
:::tip
`AdaptyUI.clearMediaCache(strategy)` を使ってランタイム時にメディアキャッシュをクリアできます。`strategy` には `CLEAR_ALL` または `CLEAR_EXPIRED_ONLY` を指定します。
:::
### 難読化されたアカウントIDの設定 \{#set-obfuscated-account-ids\}

Google Playでは、ユーザーのプライバシーとセキュリティを強化するために、特定のユースケースで難読化されたアカウントIDが必要です。これらのIDにより、Google Playはユーザー情報を匿名に保ちながら購入を識別できます。これは特に不正防止や分析において重要です。

アプリが機密性の高いユーザーデータを扱う場合や、特定のプライバシー規制への準拠が求められる場合は、これらのIDを設定する必要があります。難読化されたIDにより、Google Playは実際のユーザー識別子を公開することなく購入を追跡できます。
<Tabs groupId="current-os" queryString>
<TabItem value="kotlin" label="Kotlin" default>

```kotlin showLineNumbers

AdaptyConfig.Builder("PUBLIC_SDK_KEY")
    .withObfuscatedAccountId("YOUR_OBFUSCATED_ACCOUNT_ID")
    .build()
```

</TabItem>
<TabItem value="java" label="Java" default>

```java showLineNumbers

new AdaptyConfig.Builder("PUBLIC_SDK_KEY")
    .withObfuscatedAccountId("YOUR_OBFUSCATED_ACCOUNT_ID")
    .build();
```

</TabItem>
</Tabs>
### カスタムプロセスでAdaptyを実行する \{#run-adapty-in-a-custom-process\}

デフォルトでは、Adaptyはアプリのメインプロセスでのみ実行できます。
アプリが複数のプロセスを使用している場合、Adaptyの初期化は一度だけ行ってください。複数回初期化すると、予期しない動作が発生する可能性があります。

別のプロセスでAdaptyを実行する必要がある場合は、設定で指定してください：

<Tabs>
<TabItem value="kotlin" label="Kotlin" default>

```kotlin showLineNumbers

AdaptyConfig.Builder("PUBLIC_SDK_KEY")
    .withProcessName(":custom")
    .build()
```
</TabItem>
<TabItem value="java" label="Java" default>
```java showLineNumbers

new AdaptyConfig.Builder("PUBLIC_SDK_KEY")
    .withProcessName(":custom")
    .build();
```
</TabItem>
</Tabs>

この値を設定せずに別のプロセスで Adapty をアクティブ化しようとすると、SDK は警告をログに記録してアクティブ化をスキップします。
### ローカルアクセスレベルを有効にする \{#enable-local-access-levels\}

デフォルトでは、[ローカルアクセスレベル](local-access-levels)は Android で無効になっています。有効にするには、`withLocalAccessLevelAllowed` を `true` に設定してください：

<Tabs>
<TabItem value="kotlin" label="Kotlin" default>

```kotlin showLineNumbers

AdaptyConfig.Builder("PUBLIC_SDK_KEY")
    .withLocalAccessLevelAllowed(true)
    .build()
```
</TabItem>
<TabItem value="java" label="Java" default>
```java showLineNumbers

new AdaptyConfig.Builder("PUBLIC_SDK_KEY")
    .withLocalAccessLevelAllowed(true)
    .build();
```
</TabItem>
</Tabs>
## トラブルシューティング \{#troubleshooting\}

#### Android バックアップルール（Auto Backup の設定）\{#android-backup-rules-auto-backup-configuration\}

一部の SDK（Adapty を含む）は、独自の Android Auto Backup 設定を同梱しています。バックアップルールを定義する複数の SDK を使用している場合、Android マニフェストのマージ処理が `android:fullBackupContent`、`android:dataExtractionRules`、または `android:allowBackup` に関するエラーで失敗することがあります。

典型的なエラーの症状: `Manifest merger failed: Attribute application@dataExtractionRules value=(@xml/sample_data_extraction_rules)
is also present at [com.other.sdk:library:1.0.0] value=(@xml/other_sdk_data_extraction_rules)`
これを解決するには、以下の手順が必要です：

- マニフェストマージャーに、バックアップ関連の属性としてアプリの値を使用するよう指示する。

- Adapty および他の SDK のバックアップルールを1つの XML ファイル（Android 12+ の場合はファイルのペア）にまとめる。

#### 1. マニフェストに `tools` 名前空間を追加する \{#1-add-the-tools-namespace-to-your-manifest\}

まだ追加していない場合は、ルートの `<manifest>` タグに `tools` 名前空間を追加します：

```xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.app">

    ...
</manifest>
```

#### 2. `<application>` でバックアップ属性を上書きする \{#2-override-backup-attributes-in-application\}
アプリの `AndroidManifest.xml` で、`<application>` タグを更新して、アプリが最終的な値を提供し、マニフェストマージャーがライブラリの値を置き換えるよう指定します。

```xml
<application
android:name=".App"
android:allowBackup="true"
android:fullBackupContent="@xml/sample_backup_rules"           
android:dataExtractionRules="@xml/sample_data_extraction_rules"
tools:replace="android:fullBackupContent,android:dataExtractionRules">

    ...
</application>
```

他の SDK も `android:allowBackup` を設定している場合は、それも `tools:replace` に追加してください。
```xml
tools:replace="android:allowBackup,android:fullBackupContent,android:dataExtractionRules"
```

#### 3. マージされたバックアップルールファイルを作成する \{#3-create-merged-backup-rules-files\}

`app/src/main/res/xml/` 配下に、AdaptyのルールとほかのSDKのルールを組み合わせたXMLファイルを作成します。AndroidはOSバージョンによって異なるバックアップルール形式を使用するため、両方のファイルを作成することで、アプリがサポートするすべてのAndroidバージョンとの互換性を確保できます。

:::note
以下の例では、サードパーティSDKのサンプルとしてAppsFlyerを使用しています。実際にアプリで使用しているほかのSDKに合わせてルールを追加・変更してください。
:::
**Android 12以降の場合**（新しいデータ抽出ルール形式を使用）：
```xml title="sample_data_extraction_rules.xml"
<?xml version="1.0" encoding="utf-8"?>
<data-extraction-rules>
    <cloud-backup>
        
        <exclude domain="sharedpref" path="appsflyer-data"/>
        <exclude domain="sharedpref" path="appsflyer-purchase-data"/>
        <exclude domain="database" path="afpurchases.db"/>
        
        <exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>
    </cloud-backup>

    <device-transfer>
        
        <exclude domain="sharedpref" path="appsflyer-data"/>
        <exclude domain="sharedpref" path="appsflyer-purchase-data"/>
        <exclude domain="database" path="afpurchases.db"/>
        <exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>
    </device-transfer>
</data-extraction-rules>
```

**Android 11 以下の場合**（レガシーのフルバックアップコンテンツ形式を使用）：

```xml title="sample_backup_rules.xml"
<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
    
    <exclude domain="sharedpref" path="appsflyer-data"/>

    
    <exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>

    
    
</full-backup-content>
```

この設定では：

- Adapty のバックアップ除外設定（`AdaptySDKPrefs.xml`）が維持されます。

- 他の SDK の除外設定（例：`appsflyer-data`）も適用されます。
- マニフェストマージャーはアプリの設定を使用するようになり、バックアップ属性の競合によるビルド失敗が解消されました。

#### 別のアプリから戻った後に購入が失敗する \{#purchases-fail-after-returning-from-another-app\}

購入フローを開始する Activity が非デフォルトの `launchMode` を使用している場合、ユーザーが Google Play、銀行アプリ、またはブラウザから戻ってきたときに、Android がその Activity を誤って再作成または再利用することがあります。これにより、購入結果が失われたり、キャンセルとして処理されたりする場合があります。

購入が正常に動作するよう、購入フローを開始する Activity のランチモードには `standard` または `singleTop` のみを使用し、それ以外のモードは避けてください。
`AndroidManifest.xml` で、購入フローを開始する Activity の `launchMode` が `standard` または `singleTop` に設定されていることを確認してください：

```xml
<activity
    android:name=".MainActivity"
    android:launchMode="standard" />
```