問題
此工具 aapt2 無法解析傳遞的其中一個檔案。
這通常是因為路徑長度超過視窗允許的最大路徑長度。
解決方法
避免這種情況的最佳方法是確保你的專案不會位於資料夾結構的深處。 例如,如果你把所有專案都建立在像這樣的資料夾裡,
C:\Users\shelly\Visual Studio 2022\Android\MyProjects\Com.SomeReallyLongCompanyName.MyBrillantApplication\MyBrilliantApplicaiton.Android\
你不但可能會遇到 aapt2 的問題,還可能在提前編譯(Ahead of Time 編譯)時遇到麻煩。 保持專案名稱和資料夾結構簡潔,有助於解決這些問題。 例如,取代上述的內容,你可以用
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)。 不過你可能想在所有地方都覆寫以保持一致。