构建以 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 中断。
以下情况下可能会触发此错误:
- 升级到 ARCore Extensions for Unity AR Foundation 版本 1.26、
- 在任何 Unity 项目中以 Android SDK 级别 31 为目标平台,无论 ARCore Extensions 版本如何,
- 在安装 Build Tools 版本 31.0.0 时,在任何 Unity 项目中以 Android SDK 级别 30 为目标平台,无论 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>