构建以 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 build 出现故障。
以下情况可能会触发此错误:
- 升级到适用于 Unity 的 AR Foundation 版本 1.26 的 ARCore Extensions
- 在任何 Unity 项目中以 Android SDK 级别 31 为目标,无论 ARCore 扩展版本是什么,
- 在任何 Unity 项目中以 Android SDK 级别 30 为目标平台,同时安装 Build Tools 版本 31.0.0(无论 ARCore Extensions 版本如何)。
临时解决方法
我们正在与 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 build
对于使用旧版本构建的 Unity 版本 2019.4、2020.1 和 2020.2,您需要将自定义 Gradle build 设置为 Gradle 6.1.1 或更高版本。您还需要 Android Gradle 插件 4.0.1 或更高版本。
以 SDK 31 为目标平台的应用需要使用 Gradle 6.1.1 或更高版本。
- 前往 Preferences > External Tools > Android > Gradle,然后将自定义 Gradle build 设置为 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>