aapt2 Unknown chunk type 200
aapt2 Unknown chunk type 200
目标 & 背景
最近的项目需要接其他海外渠道的 SDK,在处理 Android 构建时,在 M 系列的 Mac 下构建时就会有如下错误
* What went wrong:
Execution failed for task ':launcher:processDebugResources'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
> AAPT2 aapt2-4.0.1-6197926-osx Daemon #0: Unexpected error during link, attempting to stop daemon.
This should not happen under normal circumstances, please file an issue if it does.
在 Task 细节中可以看到 aapt2 抛出了一个 200 错误
> Task :launcher:processDebugResources FAILED
aapt2 W 04-28 14:04:21 79304 5722340 LoadedArsc.cpp:657] Unknown chunk type '200'.
解决方案
在搜了一部分资料后,基本锁定问题在 gradle 版本上,当前项目使用的 Unity 版本为 2021,但是实测 2022 问题仍然存在。在 Unity 文档中 Gradle for Android 中提到了这几个大版本使用的 gradle 版本信息
Unity 版本 | Gradle 版本 | Gradle Plugin-in 版本 |
---|---|---|
6000.0 | 8.4 | 8.3.0 |
2022.3 | 7.2 | 7.1.2 |
2021.3 | 6.1.1 | 4.0.1 |
在 Android Stuidio 中提供了 AGP Upgrade Assistant 工具,挨个测试版本后,发现需要将 gradle Plugin-in 升级到 7.4.2, gradle 升级到 7.5 |
在 AGP 中可以看到详细信息
仔细观察两个版本的文件变化, AGP 会修改根目录的 build.gralde 文件中 gralde plugin-in 的版本号,以及 gradle 文件夹下的 gradle-wrapper.properties 文件中的版本号
因此第一步需要在 Unity 中修改 baseProjectTemplate.gradle 文件,版本调整为 7.4.2
classpath 'com.android.tools.build:gradle:7.4.2'
第二部需要借助 git 上的一个工具 unity-gradle-wrapper 修改 gradle 的版本为 7.5,官方地通了一个 ScriptObject 配置文件,一般我会将这个工具集成到我们的打包流程中,核心就是下方代码的版本获取
public class GradleWrapperGenerator : IPostGenerateGradleAndroidProject
{
public int callbackOrder => 0;
public void OnPostGenerateGradleAndroidProject(string path)
{
// xxx
string gradleVersion = "7.5"; // 这里修改为 7.5
if (string.IsNullOrWhiteSpace(gradleVersion))
{
return;
}
// xxx
}
// xxx
}
生成的目录结构如下,会多出 gradlew 和 gradlew.bat 文件
.
├── build.gradle
├── gradle
├── gradle.properties
├── gradlew
├── gradlew.bat
├── launcher
├── local.properties
├── settings.gradle
└── unityLibrary
此时出包就需要运行如下指令
# Release 包
./gradlew assembleRelease
# Debug 包
./gradlew assembleDebug
# Windows Release
call gradlew.bat assmbleRelease
# Windows Debug
call gradlew.bat assmbleDebug
而生成的 apk 文件会出现在如下路径
./launcher/build/outputs/apk/release/launcher-release.apk
./launcher/build/outputs/apk/debug/launcher-debug.apk
最后只需要修改一下打包流程,生成 Android Project 后,执行对应的 gradlew 命令即可
最后
为了搞定这个问题,试了好多个 Unity 的版本,但是 Unity Hub 在使用一段时间后,安装新的 Unity 时,Android 环境总是会出现 Install Failed,而且这个问题已经存在了很久了,居然一直没有修复
最有效的方式竟然是卸载 Unity Hub 重装…
- 感谢你赐予我前进的力量