Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Problém
Nástroj aapt2 nemůže vyřešit jeden ze souborů, které mu byly předány.
To je obvykle způsobeno tím, že cesta je delší než maximální délka cesty povolená v oknech.
Řešení
Nejlepším způsobem, jak se tomu vyhnout, je zajistit, aby projekt nebyl umístěný hluboko ve struktuře složek. Pokud například vytvoříte všechny projekty ve složkách, jako je například
C:\Users\shelly\Visual Studio 2022\Android\MyProjects\Com.SomeReallyLongCompanyName.MyBrillantApplication\MyBrilliantApplicaiton.Android\
můžete se setkat s problémy nejen s aapt2, ale i s předčasnou kompilací. Stručné a stručné názvy projektů a struktury složek vám pomůžou tyto problémy vyřešit. Místo výše uvedeného byste například mohli použít
C:\Work\Android\MyBrilliantApp
To je mnohem kratší a mnohem méně pravděpodobné, že dojde k problémům s cestou.
To ale není vždy možné. Někdy projekt nebo prostředí vyžaduje hloubkové struktury složek. Povolení podpory dlouhých cest ve Windows může stačit k tomu, aby váš projekt fungoval. Podrobnosti o tom, jak to udělat, najdete tady.
Pokud podpora dlouhých cest nefunguje, změna umístění $(BaseIntermediateOutputPath) vám může pomoci tyto problémy vyřešit. Aby to fungovalo, nastavení musí být nezbytně změněno ještě předtím, než dojde k jakémukoli sestavení nebo obnovení. K tomu můžete využít podporu nástroje MSBuild Directory.Build.props .
Vytvoření souboru ve vašem řešení nebo adresáři projektu, který předefinuje $(BaseIntermediateOutputPath) na místo někde blíže ke kořenovému adresáři disku, pomůže vyřešit tyto problémy. Přidáním souboru s následujícím obsahem vytvoříte adresář obj na jiném místě podle vašeho výběru.
<Project>
<PropertyGroup>
<BaseIntermediateOutputPath Condition=" '$(OS)' == 'Windows_NT' ">C:\Intermediate\$(ProjectName)</BaseIntermediateOutputPath>
<BaseIntermediateOutputPath Condition=" '$(OS)' != 'Windows_NT' ">/tmp/Intermediate/$(ProjectName)</BaseIntermediateOutputPath>
</PropertyGroup>
</Project>
Pomocí této techniky snížíte délky cest odesílaných do různých nástrojů, jako je aapt2.
Mějte na paměti, že se jedná o obecně pouze problém s Windows. Proto není potřeba překrývat prostředí na bázi macOS nebo Linuxu. Možná budete chtít přepsat ve všech případech, abyste zachovali konzistenci.