[Xamarin] “Android System.InvalidOperationException: 属性が重複しています” のビルドエラーが出る
Visual Studio 2019 で、ある Xamarin.Android プロジェクトを久しぶりにビルドしたところ、以下のエラーが出るようになりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー System.InvalidOperationException: 属性が重複しています。 場所 System.Xml.Linq.XElement.AddAttributeSkipNotify(XAttribute a) 場所 System.Xml.Linq.XContainer.AddContentSkipNotify(Object content) 場所 System.Xml.Linq.XContainer.Add(Object content) 場所 Xamarin.Android.Tasks.ManifestDocument.AddLauncherIntentElements(XElement activity) 場所 Xamarin.Android.Tasks.ManifestDocument.<>c__DisplayClass99_0.<ActivityFromTypeDefinition>b__1(ActivityAttribute aa, XElement element) 場所 Xamarin.Android.Tasks.ManifestDocument.ToElement[TAttribute](TypeDefinition type, String name, Func`2 parser, Func`2 toElement, Action`2 update) 場所 Xamarin.Android.Tasks.ManifestDocument.ActivityFromTypeDefinition(TypeDefinition type, String name, Int32 targetSdkVersion) 場所 Xamarin.Android.Tasks.ManifestDocument.Merge(TaskLoggingHelper log, TypeDefinitionCache cache, List`1 subclasses, String applicationClass, Boolean embed, String bundledWearApplicationName, IEnumerable`1 mergedManifestDocuments) 場所 Xamarin.Android.Tasks.GenerateJavaStubs.Run(DirectoryAssemblyResolver res) 場所 Xamarin.Android.Tasks.GenerateJavaStubs.RunTask() 場所 Microsoft.Android.Build.Tasks.AndroidTask.Execute() 場所 /Users/builder/azdo/_work/1/s/xamarin-android/external/xamarin-android-tools/src/Microsoft.Android.Build.BaseTasks/AndroidTask.cs:行 17 project.Droid C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets 1392 |
いろいろ調べましたが、最終的に After update cannot build Android with error: Xamarin.Android.Common.targets (1392, 3): [XAGJS7009] System.InvalidOperationException: Duplicate attribute. という記事にたどり着きました。
この記事の中に回避策として、[Activity]属性のExported = trueを削除することが書かれていました。
ソースを調べると
1 2 3 4 5 6 7 8 |
[Activity( Theme = "@style/AppTheme.Splash", Exported = true, MainLauncher = true, ScreenOrientation = ScreenOrientation.Portrait)] public class SplashActivity : AppCompatActivity |
のような記述がスプラッシュ画面にありましたので Exported = true
を削除したところ無事にビルドできるようになりました。
実は社内でも複数のエンジニアが、異なる時期にこの問題にハマったので、メモとしてここに残しておきます。
ITエンジニア募集中!
キュアコード株式会社はITエンジニアを募集しております。少人数の職場なので、上流・下流やサーバー・クライアント対応の垣根なく、あなたの強みを活かしながら いろいろなことにチャレンジ可能です。エンジニアとしての未経験の方、経験が少ない方も歓迎しています。
下記よりITエンジニア募集の採用情報をご覧いただけます。