リリース要件により、元の 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
ディレクトリに配置し、アイコンを設定した後、通常どおりパッケージ化できます。