APT2264 de erro do .NET para Android
A ferramenta aapt2
não consegue resolver um dos arquivos que foram passados.
Isso geralmente é causado pelo caminho ser maior do que o comprimento máximo do caminho permitido no Windows.
A melhor maneira de evitar isso é garantir que seu projeto não esteja localizado profundamente na estrutura de pastas. Por exemplo, se você criar todos os seus projetos em pastas como
C:\Users\shelly\Visual Studio 2022\Android\MyProjects\Com.SomeReallyLongCompanyName.MyBrillantApplication\MyBrilliantApplicaiton.Android\
você pode encontrar problemas não apenas aapt2
, mas também com a compilação antecipada. Manter os nomes dos projetos e as estruturas de pastas curtos e concisos ajudará a contornar esses problemas. Por exemplo, em vez do acima, você pode usar
C:\Work\Android\MyBrilliantApp
Que é muito mais curto e muito menos provável de encontrar problemas de caminho.
No entanto, isso nem sempre é possível. Às vezes, um projeto ou um ambiente requer estruturas de pastas profundas. Habilitar o suporte a caminhos longos no Windows pode ser suficiente para fazer seu projeto funcionar. Detalhes sobre como fazer isso podem ser encontrados aqui.
Se o suporte a caminhos longos não funcionar, alterar a localização do $(BaseIntermediateOutputPath)
pode ajudar a resolver esses problemas. Para que isso funcione, a configuração DEVE ser alterada antes que ocorra QUALQUER compilação ou restauração. Para fazer isso, você pode usar o suporte do MSBuild Directory.Build.props
.
Criar um Directory.Build.props
arquivo em sua solução ou diretório de projeto que redefine o $(BaseIntermediateOutputPath)
para algum lugar mais próximo da raiz da unidade com resolver esses problemas. Adicionar um arquivo com o conteúdo a seguir criará o obj
diretório em um local diferente de sua escolha.
<Project>
<PropertyGroup>
<BaseIntermediateOutputPath Condition=" '$(OS)' == 'Windows_NT' ">C:\Intermediate\$(ProjectName)</BaseIntermediateOutputPath>
<BaseIntermediateOutputPath Condition=" '$(OS)' != 'Windows_NT' ">/tmp/Intermediate/$(ProjectName)</BaseIntermediateOutputPath>
</PropertyGroup>
</Project>
O uso dessa técnica reduzirá os comprimentos dos caminhos enviados para as várias ferramentas, como aapt2
.
Observe que isso geralmente é apenas um problema do Windows. Portanto, não há necessidade de substituir os $(BaseIntermediateOutputPath)
ambientes baseados em Mac ou Linux. No entanto, você pode querer substituir em todos os lugares para ser consistente.