【Unity】エディターを2022.3.0f1に更新したらapkを出力できなくなった
Unityでエディターを2021.3.3f1から2022.3.0f1ぶ更新したらapkを出力できなくなったのをなんとかしたい!
概要
この記事では、Unityでエディターを2021.3.3f1から2022.3.0f1ぶ更新したらapkを出力できなくなったのをなんとかする手順を掲載する。
これは症状は環境によるものみたいなんですが、もし同じ症状の方がいたら試してみて下さい。
仕様書
環境
- Unity 2022.3.0f1
手順書
apkを出力に失敗する原因がいくつもあったのでそれぞれ対応手順と共に挙げる。
Probably the SDK is read-only
エディターはデフォルトだとC:\Program Files\Unity\Hub\Editor\...
にインストールされるが、このパスは読み込み限定だぞ!的な例外が発生する。
Exception while marshalling C:\Program Files\Unity\Hub\Editor\2022.3.0f1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\build-tools\32.0.0\package.xml. Probably the SDK is read-only
...
こんなん嘘でしょ。ならここにデフォルトでインストールさせない方が良いので!
気絶しそうになりながら、Editorを管理者権限が必要ない別のパスにインストールし直すことでこの例外は発生しなくなった。
シンボルが見つからない?
今度はGradleからJavaのコンパイラーが失敗してると怒られる。
> Task :unityLibrary:compileReleaseJavaWithJavac FAILED
詳細。
C:\project\Library\Bee\Android\Prj\IL2CPP\Gradle\unityLibrary\src\main\java\com\unity\androidnotifications\UnityNotificationManager.java:164: エラー: シンボルを見つけられません
...
Build.VERSION_CODES.TIRAMISU
...
PackageManager.PERMISSION_GRANTED
...
TIRAMISU
ってなんやねん!美味そうじゃん!
TIRAMISU
はAndroidのAPIのバージョンの名前?的なものでTIRAMISU
は33
を表してる。
なんだかJava、Gradleまわりが怪しい感じに。
33
のSDKが反映されてないっぽい。何故だ。
Gradleの設定ファイルを弄って、強制的に33
にする。
「Project Settings」->「Player」->「Publishing Settings」の中の「Custom Main Gradle Template」にチェックを入れる。
するとAssets/Plugins/Android/mainTemplate.gradle
が生成されるので開く。
中身はこんな感じ。
apply plugin: 'com.android.library'
**APPLY_PLUGINS**
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
**DEPS**}
android {
ndkPath "**NDKPATH**"
compileSdkVersion **APIVERSION**
buildToolsVersion '**BUILDTOOLS**'
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
defaultConfig {
minSdkVersion **MINSDKVERSION**
targetSdkVersion **TARGETSDKVERSION**
ndk {
abiFilters **ABIFILTERS**
}
versionCode **VERSIONCODE**
versionName '**VERSIONNAME**'
consumerProguardFiles 'proguard-unity.txt'**USER_PROGUARD**
}
lintOptions {
abortOnError false
}
aaptOptions {
noCompress = **BUILTIN_NOCOMPRESS** + unityStreamingAssets.tokenize(', ')
ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~"
}**PACKAGING_OPTIONS**
}
**IL_CPP_BUILD_SETUP**
**SOURCE_BUILD_SETUP**
**EXTERNAL_SOURCES**
21
行目あたりを下記のように書き換える。
apply plugin: 'com.android.library'
**APPLY_PLUGINS**
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
**DEPS**}
android {
ndkPath "**NDKPATH**"
compileSdkVersion **APIVERSION**
buildToolsVersion '**BUILDTOOLS**'
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
defaultConfig {
minSdkVersion **MINSDKVERSION**
//targetSdkVersion **TARGETSDKVERSION**
targetSdkVersion 33
compileSdkVersion 33
ndk {
abiFilters **ABIFILTERS**
}
versionCode **VERSIONCODE**
versionName '**VERSIONNAME**'
consumerProguardFiles 'proguard-unity.txt'**USER_PROGUARD**
}
lintOptions {
abortOnError false
}
aaptOptions {
noCompress = **BUILTIN_NOCOMPRESS** + unityStreamingAssets.tokenize(', ')
ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~"
}**PACKAGING_OPTIONS**
}
**IL_CPP_BUILD_SETUP**
**SOURCE_BUILD_SETUP**
**EXTERNAL_SOURCES**
書き換えた部分をピックアップするとこんな感じ。
//targetSdkVersion **TARGETSDKVERSION**
targetSdkVersion 33
compileSdkVersion 33
これで33
のSDKがビルドで使われるようになり、TIRAMISU
たちの問題は解決する。
が、まだビルドに失敗する。
ライセンスに同意する
ビルドを試すと下記のように出力される。
FAILURE: Build failed with an exception.
* What went wrong:
Could not determine the dependencies of task ':unityLibrary:compileReleaseJavaWithJavac'.
> Failed to install the following Android SDK packages as some licences have not been accepted.
platforms;android-33 Android SDK Platform 33
To build this project, accept the SDK license agreements and install the missing components using the Android Studio SDK Manager.
Alternatively, to transfer the license agreements from one workstation to another, see http://d.android.com/r/studio-ui/export-licenses.html
Using Android SDK: C:\Unity\Editor\2022.3.0f1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK
33
のSDKを使うにはライセンスに同意する必要がある的な感じ。インストールする時に言って欲しいわい!
sdkmanager.bat --licenses
をコマンドプロンプトで実行する必要がある。
batファイルはエディターをインストールしたディレクトリの中にある。私の環境だとC:\Unity\Editor\2022.3.0f1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\tools\bin
の中にあった。
sdkmanager.bat
の実行にはJava 8以前のJavaが必要なのでAndroid Studioに含まれてるJava 8をJAVA_HOME
に設定する必要がある。
Java 9以降のバージョンがJAVA_HOME
に設定されてると下記の例外が発生するので注意。
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
一連のコマンドをまとめると下記のようになる。
cd C:\Unity\Editor\2022.3.0f1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\tools\bin
SET JAVA_HOME=C:\Program Files\Android\jdk\jdk-8.0.302.8-hotspot\jdk8u302-b08
sdkmanager.bat --licenses
sdkmanager.bat --licenses
を実行するとライセンスが表示されるのでy
で同意する。(7回表示された)
ここまで全部やってやっとapkを出力できるようなった!
まとめ(感想文)
このせいで5時間残業したぞ!(うち、プログラムの更新は5分未満)
これは何かしらサポートというかアナウンスが欲しいところ。