Udostępnij przez


Błąd APT2264 platformy .NET dla systemu Android

Problematyka

Narzędzie aapt2 nie może rozpoznać jednego z przekazanych plików. Jest to zwykle spowodowane tym, że ścieżka jest dłuższa niż dozwolona maksymalna długość ścieżki w oknach.

Rozwiązanie

Najlepszym sposobem, aby tego uniknąć, jest upewnienie się, że projekt nie znajduje się głęboko w strukturze folderów. Jeśli na przykład tworzysz wszystkie projekty w folderach, takich jak

C:\Users\shelly\Visual Studio 2022\Android\MyProjects\Com.SomeReallyLongCompanyName.MyBrillantApplication\MyBrilliantApplicaiton.Android\

Możesz napotkać problemy nie tylko z aapt2, ale także z kompilacją Ahead of Time. Utrzymywanie krótkich nazw projektów i struktur folderów, zwięzłe pomoże obejść te problemy. Na przykład zamiast powyższych można użyć

C:\Work\Android\MyBrilliantApp

Jest to znacznie krótsze i znacznie mniej prawdopodobne, aby napotkać problemy ze ścieżką.

Jednak nie zawsze jest to możliwe. Czasami projekt lub środowisko wymaga głębokich struktur folderów. Włączenie obsługi długich ścieżek w systemie Windows może wystarczyć, aby Twój projekt działał. Szczegółowe informacje na temat tego, jak to zrobić, można znaleźć tutaj.

Jeśli obsługa długiej ścieżki nie działa, zmiana lokalizacji obiektu $(BaseIntermediateOutputPath) może pomóc rozwiązać te problemy. Aby to zadziałało, należy zmienić ustawienie przed wystąpieniem dowolnej kompilacji lub przywracania. W tym celu możesz skorzystać z obsługi programu MSBuild Directory.Build.props .

Utworzenie pliku w katalogu rozwiązania lub projektu, który redefiniuje $(BaseIntermediateOutputPath) bliżej korzenia dysku, pomoże rozwiązać te problemy. Dodanie pliku z następującą zawartością spowoduje utworzenie katalogu obj w innej, wybranej lokalizacji.

<Project>
  <PropertyGroup>
      <BaseIntermediateOutputPath Condition=" '$(OS)' == 'Windows_NT' ">C:\Intermediate\$(ProjectName)</BaseIntermediateOutputPath>
      <BaseIntermediateOutputPath Condition=" '$(OS)' != 'Windows_NT' ">/tmp/Intermediate/$(ProjectName)</BaseIntermediateOutputPath>
  </PropertyGroup>
</Project>

Użycie tej techniki spowoduje zmniejszenie długości ścieżek wysyłanych do różnych narzędzi, takich jak aapt2. Należy pamiętać, że jest to zazwyczaj tylko problem z systemem Windows. Nie ma więc potrzeby nadpisywania $(BaseIntermediateOutputPath) w systemach operacyjnych Mac lub Linux. Jednak możesz przesłonić wszędzie, aby być spójne.