Unity 2019.2 から Unity 2019.4 にアップグレードした後の Android プロジェクトのエクスポートに関する記録

リリース要件により、元の Unity 2019.2 バージョンは Unity 2019.4 バージョンにアップグレードされます (Android 12 に適応するため)。

その理由は、Unity 2019.2 でパッケージ化されたプロジェクトは、Android 12 デバイスを開いた後、白い画面で実行できないためです。そのため、空のプロジェクトでテストしたところ、Unity 2019.4 以降のすべてのバージョンが正常に実行できることがわかりました (Unity はテストしていません)。 2019.3 ですが、動作すると思います)。

比較した結果、2019.4 バージョンを使用することにしました。

配布側のSDKはAndroidネイティブ版しかないため、他のSDKとの統合を容易にするため、Android Studioを通じて必要なSDKを全てAARパッケージに統合し、そのAARパッケージをUnityプロジェクト。また、プロジェクト自体に Firebase を追加する必要があるため、Unity プロジェクトを Android プロジェクトにエクスポートし、google-service.json ファイルを Android プロジェクト ディレクトリに配置する必要もあります。(Unity 用の Firebase プラグインを使用せずに、この json ファイルを Unity に直接統合する方法がわからないため...)

ここで問題が発生します。Unity 2019.3 以降のバージョンでは、Android プロジェクトをエクスポートする際のディレクトリ構造が変更されました。
ここに画像の説明を挿入
図に示すように、左側は Unity 2019.2 より前のバージョンでエクスポートされた Android プロジェクトです。右側はUnity 2019.3以降でエクスポートされたAndroidプロジェクトですが、公式によるとAndroid側での呼び出しの便宜のためとのことで、Unity関連の内容を別途モジュール化、つまりunityLibrary. 特定の関連コンテンツについては、公式リンク、またはこの記事を参照してください。

以下では主に、Unity 2019.2 から Unity 2019.4 にアップグレードした後、Android プロジェクトをエクスポートする際に注意する必要があるいくつかの操作を記録します。Unity と Android のドッキングの具体的な内容については、引き続き次の記事を参照してください:
Unity プロジェクトのドッキング Android SDK 集約広告


1. Android が AAR パッケージをエクスポートする際の問題

Android 側では、AAR パッケージを作成するときに Unity 側で提供される class.jar ファイルが必要です。Unity のバージョンごとに異なる jar ファイルを指定する必要があります。Unity 2019.4 でのこのファイルのディレクトリは次のとおりです。
F:\Program Files\Unity 2019.4.38f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Classes

このパスの前にあるのは、 F:\Program Files\Unity がインストールされているディレクトリです。Unity 2019.3 以降、この class.jar ファイルに変更が加えられ、UnityPlayerActivity.javaこのファイルは含まれなくなりました。このファイルは手動で Android プロジェクトにコピーする必要があり、その場所は次のとおりです。
F:\Program Files\Unity 2019.4.38f1\Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player

このフォルダーにはそのようなファイルしか
F:\Program Files\Unity 2019.4.38f1\Editor\Data\PlaybackEngines\AndroidPlayer\Source\com
存在しないため、区別しやすく見た目を整えるために、このフォルダーを直接コピーすることを選択できます。UnityPlayerActivity.java

また、以前はプログラムのアイコンをAARパッケージに直接入れていましたが、新バージョンの変更により、Androidプロジェクト内にアイコンを入れられるようになったため、AARパッケージにアイコンを入れる必要がなくなりました。launcher Unity Insideによってエクスポートされました。

AAR パッケージにした後、class.jarその内部を圧縮ファイルとして開き、UnityPlayerActivity.java後で Unity が Android プロジェクトをエクスポートするときにファイルの重複を防ぐために、その中の を削除する必要があります。

この時点で、AAR パッケージの準備は完了です。


2. Unity プロジェクトのいくつかの設定

以前のバージョンでは、 Unity プロジェクトのPlugins\Android\ディレクトリで呼び出されるファイルを構成することでmainTemplate.gradle、一部のパッケージ化された依存関係をエクスポートされた Android プロジェクトに同期できました。新しいバージョンでは、この Gradle は1、2、3、3
つの部分に分割されていますlauncherTemplate.gradle
baseProjectTemplate.gradle
mainTemplate.gradle

これらのファイルの場所は次の場所にあり
F:\Program Files\Unity 2019.4.38f1\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\GradleTemplates、直接コピーして書き換えることができます。

は、baseProjectTemplate.gradleプロジェクトの最も外側の Gradle ファイルで、リモート依存関係のウェアハウス アドレスを構成します。

// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN

allprojects {
    
    
    buildscript {
    
    
        repositories {
    
    **ARTIFACTORYREPOSITORY**
            google()
            jcenter()
            mavenCentral()
	
			// 添加项目需要依赖的远程库文件的地址,根据自身需求修改和添加
            maven {
    
     url 'xxx' }
          
        }

        dependencies {
    
    
            // If you are changing the Android Gradle Plugin version, make sure it is compatible with the Gradle version preinstalled with Unity
            // See which Gradle version is preinstalled with Unity here https://docs.unity3d.com/Manual/android-gradle-overview.html
            // See official Gradle and Android Gradle Plugin compatibility table here https://developer.android.com/studio/releases/gradle-plugin#updating-gradle
            // To specify a custom Gradle version in Unity, go do "Preferences > External Tools", uncheck "Gradle Installed with Unity (recommended)" and specify a path to a custom Gradle version
            
            classpath 'com.android.tools.build:gradle:4.0.1'
            // 对接 google 相关 sdk 需要的配置
            classpath 'com.google.gms:google-services:4.3.5'
            **BUILD_SCRIPT_DEPS**
        }
    }

    repositories {
    
    **ARTIFACTORYREPOSITORY**
        google()
        jcenter()
        flatDir {
    
    
            dirs "${project(':unityLibrary').projectDir}/libs"
        }
        mavenCentral()
        
       // 添加项目需要依赖的远程库文件的地址,根据自身需求修改和添加
       maven {
    
     url 'xxx' }
    }
}

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

mainTemplate.gradle unityLibraryプロジェクトの依存関係を構成するモジュール内の gradle ファイルです

// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN

apply plugin: 'com.android.library'
**APPLY_PLUGINS**

dependencies {
    
    
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    // 添加各种依赖项,根据需求修改和添加
    implementation 'xxx'

    // 为了防止出现 Error: Cannot fit requested classes in a single dex file
    implementation 'com.android.support:multidex:1.0.3'

    implementation 'android.arch.work:work-runtime:1.0.1'

    // 为了解决一个和 guava 有关的重复引用 bug 而添加此依赖
    implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'

**DEPS**}

android {
    
    
    compileSdkVersion **APIVERSION**
    buildToolsVersion '**BUILDTOOLS**'

    compileOptions {
    
    
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    defaultConfig {
    
    
        minSdkVersion **MINSDKVERSION**
        targetSdkVersion **TARGETSDKVERSION**
        ndk {
    
    
            abiFilters **ABIFILTERS**
        }
        versionCode **VERSIONCODE**
        versionName '**VERSIONNAME**'
        consumerProguardFiles 'proguard-unity.txt'**USER_PROGUARD**

        // 为了防止出现 Error: Cannot fit requested classes in a single dex file
        multiDexEnabled true
    }

    lintOptions {
    
    
        abortOnError false
    }

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

残り launcherTemplate.gradleはで構成されます

// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN

apply plugin: 'com.android.application'

dependencies {
    
    
    implementation project(':unityLibrary')

    // 为了防止出现 Error: Cannot fit requested classes in a single dex file
    implementation 'com.android.support:multidex:1.0.3'

    implementation 'android.arch.work:work-runtime:1.0.1'

    // 为了解决一个和 guava 有关的重复引用 bug 而添加此依赖
    implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'

}

android {
    
    
    compileSdkVersion **APIVERSION**
    buildToolsVersion '**BUILDTOOLS**'

    compileOptions {
    
    
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    defaultConfig {
    
    
        minSdkVersion **MINSDKVERSION**
        targetSdkVersion **TARGETSDKVERSION**
        applicationId '**APPLICATIONID**'
        ndk {
    
    
            abiFilters **ABIFILTERS**
        }
        versionCode **VERSIONCODE**
        versionName '**VERSIONNAME**'

        // 为了防止出现 Error: Cannot fit requested classes in a single dex file
        multiDexEnabled true
    }

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

    lintOptions {
    
    
        abortOnError false
    }

    buildTypes {
    
    
        debug {
    
    
            minifyEnabled **MINIFY_DEBUG**
            useProguard **PROGUARD_DEBUG**
            proguardFiles getDefaultProguardFile('proguard-android.txt')**SIGNCONFIG**
            jniDebuggable true
        }
        release {
    
    
            minifyEnabled **MINIFY_RELEASE**
            useProguard **PROGUARD_RELEASE**
            proguardFiles getDefaultProguardFile('proguard-android.txt')**SIGNCONFIG**
        }
    }**PACKAGING_OPTIONS****PLAY_ASSET_PACKS****SPLITS**
**BUILT_APK_LOCATION**
    bundle {
    
    
        language {
    
    
            enableSplit = false
        }
        density {
    
    
            enableSplit = false
        }
        abi {
    
    
            enableSplit = true
        }
    }
}**SPLITS_VERSION_CODE****LAUNCHER_SOURCE_BUILD_SETUP**

// Add the following line to the bottom of the file:
apply plugin: 'com.google.gms.google-services'  // Google Play services Gradle plugin

3. Androidプロジェクトエクスポート後の操作

google-service.jsonファイルをlauncherディレクトリに配置し、アイコンを設定した後、通常どおりパッケージ化できます。

おすすめ

転載: blog.csdn.net/EverNess010/article/details/124813909