问题
该工具 aapt2 无法解析它传递的文件之一。
这通常是由路径长度超过窗口允许的最大路径长度造成的。
解决方案
避免这种情况的最佳方式是确保项目不位于文件夹结构中。 如果您将所有项目创建在例如这样的文件夹中
C:\Users\shelly\Visual Studio 2022\Android\MyProjects\Com.SomeReallyLongCompanyName.MyBrillantApplication\MyBrilliantApplicaiton.Android\
你很可能不仅会遇到 aapt2 的问题,而且还可能会遇到提前编译的问题。 保持项目名称和文件夹结构简短,简洁将有助于解决这些问题。 例如,可以使用其他替代方案,而不是上述方案。
C:\Work\Android\MyBrilliantApp
这要短得多,不太可能遇到路径问题。
但是,这并不总是可能的。 有时项目或环境需要深层文件夹结构。 在 Windows 中 启用长路径支持可能足以使项目正常工作。 有关如何执行此作的详细信息,可 在此处找到。
如果长路径支持无法更改位置 $(BaseIntermediateOutputPath) 有助于解决这些问题。 为了使其正常工作,必须在进行任何生成或还原之前更改设置。 为此,可以使用 MSBuild Directory.Build.props 支持。
在解决方案或项目目录中创建一个 Directory.Build.props 文件,该文件重新定义 $(BaseIntermediateOutputPath) 驱动器根目录附近的某个位置,并解决这些问题。 添加包含以下内容的文件将在所选的不同位置创建 obj 目录。
<Project>
<PropertyGroup>
<BaseIntermediateOutputPath Condition=" '$(OS)' == 'Windows_NT' ">C:\Intermediate\$(ProjectName)</BaseIntermediateOutputPath>
<BaseIntermediateOutputPath Condition=" '$(OS)' != 'Windows_NT' ">/tmp/Intermediate/$(ProjectName)</BaseIntermediateOutputPath>
</PropertyGroup>
</Project>
使用此技术可以减少发送到各种工具的路径长度,例如 aapt2。
请注意,这通常是 Windows 问题。 因此,无需在 Mac 或 Linux 环境中覆盖 $(BaseIntermediateOutputPath)。 但是,你可能希望在所有地方覆盖以保持一致。