建構指定 Android 12 (SDK 級別 31) 的 Android 專案時,可能會遇到下列錯誤:
Could not determine the dependencies of task ':launcher:compileDebugJavaWithJavac'.
> Installed Build Tools revision 31.0.0 is corrupted. Remove and install again using the SDK Manager.
> Configure project :launcher
WARNING: The option 'android.enableR8' is deprecated and should not be used anymore.
It will be removed in a future version of the Android Gradle plugin, and will no longer allow you to disable R8.
Build-tool 31.0.0 is missing DX at <android-sdk-path>/sdk/build-tools/31.0.0/dx
File ~/.android/repositories.cfg could not be loaded.
Build-tool 31.0.0 is missing DX at <android-sdk-path>/sdk/build-tools/31.0.0/dx
這是因為 Android Build Tools 31.0.0 版和 Unity 建構系統不相容。自 Android Build Tools 31.0.0 版起,已移除 DX 並改用 D8,導致 Android 適用的 Unity 版本出現故障。
在下列情況中,這項錯誤可能會觸發:
- 升級至適用於 Unity AR Foundation 1.26 版的 ARCore Extensions 並
- 在所有 Unity 專案中指定 Android SDK 級別 31 (無論 ARCore 擴充功能版本為何),
- 無論 ARCore Extensions 版本為何,在安裝 Build Tools 31.0.0 的情況下,於任何 Unity 專案中指定 Android SDK 級別 30。
解決方法
我們正與 Unity 合作解決這項不相容的問題。在此期間,請按照以下操作說明建構以 Android 12 為目標的專案:
在 Project Settings > Player > Android > Publishing Settings > Build 中,同時選取以下兩個項目:
- Custom Main Gradle Template,
- Custom Launcher Gradle Template.
將下列變更套用至兩個產生的檔案:
Assets/Plugins/Android/mainTemplate.gradle
Assets/Plugins/Android/launcherTemplate.gradle
如果檔案頂端有以下註解,請移除檔案頂端的以下註解:
// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN
然後,按照下列方式修改
compileSdkVersion
和buildToolsVersion
:buildToolsVersion '30.0.3'
建構時,Unity 會下載 Build-Tools 30.0.3 版,並使用該版本建構專案,同時維持所選的 targetSdkVersion
。
建立自訂 Gradle 建構作業
在使用舊版建構的 Unity 2019.4、2020.1 和 2020.2 版本中,您必須將自訂 Gradle 版本設為 Gradle 6.1.1 以上版本。此外,您也需要 Android Gradle 外掛程式 4.0.1 以上版本。
指定 SDK 31 的應用程式必須使用 Gradle 6.1.1 以上版本。
- 前往 Preferences > External Tools > Android > Gradle,並將自訂 Gradle 版本設為 Gradle 6.1.1 以上版本。如需下載相關資訊,請參閱 Gradle 建構工具。
將下列變更套用至兩個產生的檔案:
Assets/Plugins/Android/mainTemplate.gradle
Assets/Plugins/Android/launcherTemplate.gradle
buildscript {
repositories {
google()
jcenter()
}
dependencies {
// Must be Android Gradle Plugin 4.0.1 or later. For a list of
// compatible Gradle versions refer to:
// https://developer.android.com/studio/releases/gradle-plugin
classpath 'com.android.tools.build:gradle:4.0.1'
}
}
allprojects {
repositories {
google()
jcenter()
flatDir {
dirs 'libs'
}
}
}
針對以 Android 12 為目標版本的應用程式套用變更
如果應用程式指定 Android 12 為目標,則必須明確宣告 android:exported
屬性。有關 Android 12 的所有變更,請參閱 Android 12 的行為變更。
在 Project Settings > Player > Android > Publishing Settings > Build 中選取 Custom Main Manifest。
將下列變更套用至
Assets/Plugins/Android/AndroidManifest.xml
:如果檔案頂端有以下註解,請移除檔案頂端的以下註解:
<!-- GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN-->
將
android:exported
屬性新增至<activity>
標記:<application> <activity android:name="com.unity3d.player.UnityPlayerActivity" android:theme="@style/UnityThemeSelector" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> </activity> </application>