Android 用の Unity をビルドする

Unity Editor は、特定のバージョンの Gradle にバージョン ロックされています。旧バージョンの Unity Editor では、最新バージョンの Google Mobile Ads との互換性がない旧バージョンの Gradle が使用されています。

次の表は、Unity Editor のバージョンに応じて使用できる Google Mobile Ads プラグインの最大互換バージョンを示しています。

Unity Editor Google Mobile Ads Unity プラグインのバージョン
2023.1 以上 最新
2021.3.41f1~2022.3 9.1.0
2021.3.37f1 以前 8.5.3

Gradle を手動で更新すると、古い Unity Editor でも最新の Google Mobile Ads Unity プラグインを使用できます。Android をビルドするには、使用する Unity Editor のバージョンを選択します。

2023.1 以上

カスタム Gradle テンプレートを有効化する

[Project Settings](プロジェクト設定)> [Player](プレーヤー)> [Android] > [Publishing Settings](公開設定)> [Build](ビルド)に移動し、Custom Main Gradle TemplateCustom Gradle Properties Template を有効にします。

カスタム Gradle テンプレートを有効化する

対象 API レベル 34 を設定する

メインメニューから [Edit](編集)> [Project Settings](プロジェクト設定)> [Player](プレーヤー)> [Android] > [Other Settings](その他の設定)を開き、[Target API Level](対象 API レベル)を API レベル 34 以上に設定します。

対象 API レベルを設定する

2021.3.41f1~2022.3

カスタム Gradle テンプレートを有効化する

[Project Settings](プロジェクト設定)> [Player](プレーヤー)> [Android] > [Publishing Settings](公開設定)> [Build](ビルド)に移動し、Custom Main Gradle TemplateCustom Gradle Properties Template を有効にします。

カスタム Gradle テンプレートを有効化する

対象 API レベル 34 を設定する

メインメニューから [Edit](編集)> [Project Settings](プロジェクト設定)> [Player](プレーヤー)> [Android] > [Other Settings](その他の設定)を開き、[Target API Level](対象 API レベル)を API レベル 34 以上に設定します。

対象 API レベルを設定する

`gradleTemplate.properties` に jetifier 拒否リストを追加する

Assets/Plugins/Android/gradleTemplate.properties を編集して、次の行を追加します。

  android.jetifier.blacklist=annotation-experimental-1.4.0.aar

`AndroidManifest.xml` から `minSDKVersion` を削除する

Assets/Plugins/Android/GoogleMobileAdsPlugin.androidlib/AndroidManifest.xml を編集し、 uses-sdk ノードから android:minSdkVersion="21" を削除します。AndroidManifest.xml は次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.google.unity.ads"
    android:versionName="1.0"
    android:versionCode="1">
  <uses-sdk />
  <application>
    <uses-library android:required="false" android:name="org.apache.http.legacy"/>
  </application>
</manifest>

2021.3.37f1~2019.4

前提条件

先に進む前に、次のことを確認してください。

  • Android Studio の最新の安定版をダウンロードしてインストールしていること。

カスタム Gradle テンプレートを有効化する

[Project Settings](プロジェクト設定)> [Player](プレーヤー)> [Android] > [Publishing Settings](公開設定)> [Build](ビルド)に移動し、Custom Main Gradle TemplateCustom Gradle Properties Template を有効にします。

カスタム Gradle テンプレートを有効化する

対象 API レベル 34 を設定する

メインメニューから [Edit](編集)> [Project Settings](プロジェクト設定)> [Player](プレーヤー)> [Android] > [Other Settings](その他の設定)を開き、[Target API Level](対象 API レベル)を API レベル 34 以上に設定します。

対象 API レベルを設定する

Android Studio にエクスポートする

[File](ファイル)(MacOS の場合は [Unity Editor])> [Build Settings](ビルド設定)を選択して Android ビルド設定を変更し、[Export Project](プロジェクトをエクスポート)をオンにします。

プロジェクトをエクスポート

Android SDK プラットフォーム API レベル 34 が見つからないという警告が表示された場合は、[Update Android SDK](Android SDK を更新)オプションを選択します。

Android Studio を開く

このセクションでは、Android Studio 内で行う手順について説明します。

Gradle JDK 設定を更新する

[File](ファイル)(MacOS の場合は [Android Studio])> [Settings](設定)> [Build](ビルド)> [Execution](実行)> [Deployment](デプロイ)> [Build Tools](ビルドツール)> [Gradle] から Gradle 設定を開きます。[Gradle JDK] プルダウンを見つけて、Gradle JDK が JDK 17 以降を使用するように設定します。

Gradle JDK 設定を更新する

JDK 17 がインストールされていない場合は、Gradle JDK のメニューバーから [Download JDK](JDK をダウンロード)オプションを選択し、互換性のあるバージョンをダウンロードします。Android Studio が配布するものに合わせるため、aarch64 をサポートする JetBrains ランタイム ベンダーをおすすめします。

プロジェクト レベルの build.gradle を更新する

Gradle ツールのバージョンを 8.1.1 以降に設定します。

plugins {
    id 'com.android.application' version '8.1.1' apply false
    id 'com.android.library' version '8.1.1' apply false
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

/gradle/gradle-wrapper.properties を更新する

Gradle 8.1.1 以降を使用するように distributionUrl を設定します。

distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip

launcher/build.gradle を更新する

  • launcher/AndroidManifest.xmlpackage 属性の値を使用して namespace 属性を設定します。
  • sourceCompatibilitytargetCompatibility を Java 17 に設定します。
apply plugin: 'com.android.application'

dependencies {
    implementation project(':unityLibrary')
}

android {
    namespace "com.google.android.gms.example"
    compileSdkVersion 35
    buildToolsVersion '35.0.0'

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }

    defaultConfig {
        minSdkVersion 28
        targetSdkVersion 35
        applicationId 'com.google.android.gms.example'
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
        }
        versionCode 1
        versionName '1.0'
    }

    aaptOptions {
        noCompress = ['.unity3d', '.ress', '.resource', '.obb', '.bundle', '.unityexp']
        ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~"
    }

    lintOptions {
        abortOnError false
    }

    buildTypes {
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt')
            signingConfig signingConfigs.debug
            jniDebuggable true
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt')
            signingConfig signingConfigs.debug
        }
    }

    packagingOptions {
        doNotStrip '*/armeabi-v7a/*.so'
        doNotStrip '*/arm64-v8a/*.so'
        doNotStrip '*/x86/*.so'
        doNotStrip '*/x86_64/*.so'
        jniLibs {
            useLegacyPackaging true
        }
    }

    bundle {
        language {
            enableSplit = false
        }
        density {
            enableSplit = false
        }
        abi {
            enableSplit = true
        }
    }
}

apply from: '../unityLibrary/GoogleMobileAdsPlugin.androidlib/packaging_options.gradle'

プロジェクト レベルの settings.gradle を更新する

pluginManagement セクションと dependencyResolutionManagement セクションを設定します。

pluginManagement {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}

include ':launcher', ':unityLibrary'
include 'unityLibrary:GoogleMobileAdsPlugin.androidlib'

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
    repositories {

        google()
        mavenCentral()
        flatDir {
            dirs "${project(':unityLibrary').projectDir}/libs"
        }
    }
}

unityLibrary/build.gradle を更新する

  • namespace に値 "com.unity3d.player" を設定します。
  • sourceCompatibilitytargetCompatibilityJavaVersion.VERSION_17 に設定します。
    apply plugin: 'com.android.library'

    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        // Android Resolver Dependencies Start
        implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
        implementation 'com.google.android.gms:play-services-ads:23.6.0'
        implementation 'com.google.android.ump:user-messaging-platform:3.1.0'
        // Android Resolver Dependencies End
        implementation(name: 'googlemobileads-unity', ext:'aar')
        implementation project('GoogleMobileAdsPlugin.androidlib')
    }

    // Android Resolver Exclusions Start
    android {
      packagingOptions {
          exclude ('/lib/armeabi/*' + '*')
          exclude ('/lib/mips/*' + '*')
          exclude ('/lib/mips64/*' + '*')
          exclude ('/lib/x86/*' + '*')
      }
    }
    // Android Resolver Exclusions End

    android {
        namespace "com.unity3d.player"
        compileSdkVersion 34
        buildToolsVersion '30.0.2'

        compileOptions {
            sourceCompatibility JavaVersion.VERSION_17
            targetCompatibility JavaVersion.VERSION_17
        }

        defaultConfig {
            minSdkVersion 28
            targetSdkVersion 34
            ndk {
                abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86_64'
            }
            versionCode 1
            versionName '1.0'
            consumerProguardFiles 'proguard-unity.txt'
        }

        lintOptions {
            abortOnError false
        }

        aaptOptions {
            ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~"
        }

        packagingOptions {
            doNotStrip '*/armeabi-v7a/*.so'
            doNotStrip '*/arm64-v8a/*.so'
            doNotStrip '*/x86_64/*.so'
        }
    }


    apply from: 'GoogleMobileAdsPlugin.androidlib/packaging_options.gradle'
    gradle.projectsEvaluated { apply from: 'GoogleMobileAdsPlugin.androidlib/validate_dependencies.gradle' }

unity/Library/GoogleMobileAdsPlugin.androidlib/build.gradle を更新する

namespace 属性を値 "com.google.unity.ads" に設定します。

apply plugin: 'android-library'

dependencies {
    implementation fileTree(dir: 'bin', include: ['<em>.jar'])
    implementation fileTree(dir: 'libs', include: ['</em>.jar'])
}

android {
    namespace "com.google.unity.ads"
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            //java.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
            jniLibs.srcDirs = ['libs']
        }
    }

    compileSdkVersion 34
    buildToolsVersion '30.0.2'
    defaultConfig {
        targetSdkVersion 31
    }

    lintOptions {
        abortOnError false
    }
}

Android プロジェクトを実行する

Android Studio から、Gradle の同期を実行し、プロジェクトを実行します。