Android용 Unity 빌드

Unity Editor는 특정 버전의 Gradle로 버전이 잠겨 있습니다. 이전 버전의 Unity Editor는 최신 버전의 Google 모바일 광고와 호환되지 않는 이전 버전의 Gradle을 사용합니다.

다음 표에는 Unity Editor에 따라 사용할 수 있는 Google 모바일 광고 플러그인의 가장 높은 호환 버전이 나와 있습니다.

Unity Editor Google 모바일 광고 Unity 플러그인 버전
2023.1 이상 최신
2021.3.41f1~2022.3 9.1.0
2021.3.37f1 이하 8.5.3

이전 버전의 Unity Editor 등 최신 버전의 Google 모바일 광고 Unity 플러그인을 사용하도록 Gradle을 수동으로 업데이트할 수 있습니다. 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 Level 34(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 Level 34(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

기본 요건

계속하기 전에 다음 사항을 확인하세요.

맞춤 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 Level 34(API 수준 34) 이상으로 설정합니다.

대상 API 수준 설정

Android 스튜디오로 내보내기

File(파일)(또는 MacOS의 경우 Unity Editor) > Build Settings(빌드 설정)를 선택하고 Export Project(프로젝트 내보내기)를 선택하여 Android 빌드 설정을 수정합니다.

프로젝트 내보내기

Android SDK 플랫폼 API 수준 34가 없다는 경고가 표시되면 'Android SDK 업데이트' 옵션을 선택합니다.

Android 스튜디오 열기

이 섹션에는 Android 스튜디오 내에서 수행되는 단계가 포함되어 있습니다.

Gradle JDK 구성 업데이트

파일(또는 MacOS의 경우 Android 스튜디오) > 설정 > 빌드 > 실행 > 배포 > 빌드 도구 > Gradle에서 Gradle 설정을 엽니다. Gradle JDK 드롭다운을 찾아 Gradle JDK에서 JDK 17 이상을 사용하도록 설정합니다.

Gradle JDK 구성 업데이트

JDK 17이 설치되어 있지 않으면 Gradle JDK 메뉴 바에서 JDK 다운로드 옵션을 선택하고 호환되는 버전을 다운로드합니다. Android 스튜디오의 배포와 일치하도록 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 업데이트

pluginManagementdependencyResolutionManagement 섹션을 설정합니다.

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 업데이트

  • "com.unity3d.player" 값으로 namespace를 설정합니다.
  • 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 업데이트

"com.google.unity.ads" 값으로 namespace 속성을 설정합니다.

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 스튜디오에서 gradle 동기화를 실행하고 프로젝트를 실행합니다.