cocoa-mhlw / cocoa

Mozilla Public License 2.0
991 stars 112 forks source link

Xamarin.Androidを11.2.0.21にアップデートするとデバッグ実行時にエラーが発生する #53

Closed keiji closed 3 years ago

keiji commented 3 years ago

Describe the bug Xamarin.Androidを11.2.0.21にアップデートすると、ビルド後に実機/エミュレーターでデバッグ実行するときにCommand too longが発生する。

Time Elapsed 00:00:09.10
    /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.Debugging.targets(590,5): error : Command too long
    /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.Debugging.targets(590,5): error :   at Mono.AndroidTools.Adb.AdbClient.GetCommandBuffer (System.String command) [0x0006d] in /Users/builder/azdo/_work/278/s/xamarin-android/external/monodroid/tools/msbuild/external/androidtools/Mono.AndroidTools/Adb/AdbClient.cs:265 
    /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.Debugging.targets(590,5): error :   at Mono.AndroidTools.Adb.AdbClient.BeginWriteCommand (System.String command, System.AsyncCallback callback, System.Object state) [0x00006] in /Users/builder/azdo/_work/278/s/xamarin-android/external/monodroid/tools/msbuild/external/androidtools/Mono.AndroidTools/Adb/AdbClient.cs:227 
    /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.Debugging.targets(590,5): error :   at Mono.AndroidTools.Adb.AdbClient.BeginWriteCommandWithStatus (System.String command, System.AsyncCallback callback, System.Object state) [0x0000a] in /Users/builder/azdo/_work/278/s/xamarin-android/external/monodroid/tools/msbuild/external/androidtools/Mono.AndroidTools/Adb/AdbClient.cs:275 
    /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.Debugging.targets(590,5): error :   at System.Threading.Tasks.TaskFactory`1[TResult].FromAsyncImpl[TArg1] (System.Func`4[T1,T2,T3,TResult] beginMethod, System.Func`2[T,TResult] endFunction, System.Action`1[T] endAction, TArg1 arg1, System.Object state, System.Threading.Tasks.TaskCreationOptions creationOptions) [0x000f9] in /Users/builder/jenkins/workspace/build-package-osx-mono/2020-02/external/bockbuild/builds/mono-x64/external/corert/src/System.Private.CoreLib/src/System/Threading/Tasks/FutureFactory.cs:919 
    /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.Debugging.targets(590,5): error :   at System.Threading.Tasks.TaskFactory.FromAsync[TArg1] (System.Func`4[T1,T2,T3,TResult] beginMethod, System.Action`1[T] endMethod, TArg1 arg1, System.Object state, System.Threading.Tasks.TaskCreationOptions creationOptions) [0x00000] in <36514b14425c4337b446653c547aa9c3>:0 
    /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.Debugging.targets(590,5): error :   at Mono.AndroidTools.Internal.AdbClientTaskExtensions.WriteCommandWithStatusAsync (Mono.AndroidTools.Adb.AdbClient client, System.String command, System.Threading.Tasks.TaskCreationOptions options) [0x00000] in /Users/builder/azdo/_work/278/s/xamarin-android/external/monodroid/tools/msbuild/external/androidtools/Mono.AndroidTools/Internal/AdbClientTaskExtensions.cs:62 
    /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.Debugging.targets(590,5): error :   at Mono.AndroidTools.AndroidDevice+<>c__DisplayClass62_0.<RunShellCommand>b__0 (System.Threading.Tasks.Task t) [0x0000f] in /Users/builder/azdo/_work/278/s/xamarin-android/external/monodroid/tools/msbuild/external/androidtools/Mono.AndroidTools/AndroidDevice.cs:403 
    /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.Debugging.targets(590,5): error :   at System.Threading.Tasks.ContinuationResultTaskFromTask`1[TResult].InnerInvoke () [0x00024] in <36514b14425c4337b446653c547aa9c3>:0 
    /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.Debugging.targets(590,5): error :   at System.Threading.Tasks.Task.Execute () [0x00000] in /Users/builder/jenkins/workspace/build-package-osx-mono/2020-02/external/bockbuild/builds/mono-x64/external/corert/src/System.Private.CoreLib/src/System/Threading/Tasks/Task.cs:2319 
Done building target "_Upload" in project "Covid19Radar.Android.csproj" -- FAILED.

Done building project "Covid19Radar.Android.csproj" -- FAILED.

Build FAILED.

/Users/keiji_ariyama/.nuget/packages/msbuild.sdk.extras/2.0.54/Sdk/Sdk.props(25,3): warning MSB4011: "/usr/local/share/dotnet/sdk/5.0.201/Sdks/Microsoft.NET.Sdk.WindowsDesktop/targets/Microsoft.NET.Sdk.WindowsDesktop.props" cannot be imported again. It was already imported at "/usr/local/share/dotnet/sdk/5.0.201/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.props (148,3)". This is most likely a build authoring error. This subsequent import will be ignored. [/Users/keiji_ariyama/cocoa/Covid19Radar/Xamarin.ExposureNotification/Xamarin.ExposureNotification.csproj]
/Users/keiji_ariyama/.nuget/packages/msbuild.sdk.extras/2.0.54/Sdk/Sdk.props(25,3): warning MSB4011: "/usr/local/share/dotnet/sdk/5.0.201/Sdks/Microsoft.NET.Sdk.WindowsDesktop/targets/Microsoft.NET.Sdk.WindowsDesktop.props" cannot be imported again. It was already imported at "/usr/local/share/dotnet/sdk/5.0.201/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.props (148,3)". This is most likely a build authoring error. This subsequent import will be ignored. [/Users/keiji_ariyama/cocoa/Covid19Radar/Xamarin.ExposureNotification/Xamarin.ExposureNotification.csproj]
/Users/keiji_ariyama/.nuget/packages/msbuild.sdk.extras/2.0.54/Sdk/Sdk.props(25,3): warning MSB4011: "/usr/local/share/dotnet/sdk/5.0.201/Sdks/Microsoft.NET.Sdk.WindowsDesktop/targets/Microsoft.NET.Sdk.WindowsDesktop.props" cannot be imported again. It was already imported at "/usr/local/share/dotnet/sdk/5.0.201/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.props (148,3)". This is most likely a build authoring error. This subsequent import will be ignored. [/Users/keiji_ariyama/cocoa/Covid19Radar/Xamarin.ExposureNotification/Xamarin.ExposureNotification.csproj]
/Users/keiji_ariyama/.nuget/packages/msbuild.sdk.extras/2.0.54/Sdk/Sdk.props(25,3): warning MSB4011: "/usr/local/share/dotnet/sdk/5.0.201/Sdks/Microsoft.NET.Sdk.WindowsDesktop/targets/Microsoft.NET.Sdk.WindowsDesktop.props" cannot be imported again. It was already imported at "/usr/local/share/dotnet/sdk/5.0.201/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.props (148,3)". This is most likely a build authoring error. This subsequent import will be ignored. [/Users/keiji_ariyama/cocoa/Covid19Radar/Xamarin.ExposureNotification/Xamarin.ExposureNotification.csproj]
/Applications/Visual Studio.app/Contents/Resources/lib/monodevelop/bin/MSBuild/Current/bin/Microsoft.Common.CurrentVersion.targets(2143,5): warning MSB3277: Found conflicts between different versions of "System.Numerics.Vectors" that could not be resolved.  These reference conflicts are listed in the build log when log verbosity is set to detailed.
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.Debugging.targets(590,5): error : Command too long
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.Debugging.targets(590,5): error :   at Mono.AndroidTools.Adb.AdbClient.GetCommandBuffer (System.String command) [0x0006d] in /Users/builder/azdo/_work/278/s/xamarin-android/external/monodroid/tools/msbuild/external/androidtools/Mono.AndroidTools/Adb/AdbClient.cs:265 
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.Debugging.targets(590,5): error :   at Mono.AndroidTools.Adb.AdbClient.BeginWriteCommand (System.String command, System.AsyncCallback callback, System.Object state) [0x00006] in /Users/builder/azdo/_work/278/s/xamarin-android/external/monodroid/tools/msbuild/external/androidtools/Mono.AndroidTools/Adb/AdbClient.cs:227 
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.Debugging.targets(590,5): error :   at Mono.AndroidTools.Adb.AdbClient.BeginWriteCommandWithStatus (System.String command, System.AsyncCallback callback, System.Object state) [0x0000a] in /Users/builder/azdo/_work/278/s/xamarin-android/external/monodroid/tools/msbuild/external/androidtools/Mono.AndroidTools/Adb/AdbClient.cs:275 
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.Debugging.targets(590,5): error :   at System.Threading.Tasks.TaskFactory`1[TResult].FromAsyncImpl[TArg1] (System.Func`4[T1,T2,T3,TResult] beginMethod, System.Func`2[T,TResult] endFunction, System.Action`1[T] endAction, TArg1 arg1, System.Object state, System.Threading.Tasks.TaskCreationOptions creationOptions) [0x000f9] in /Users/builder/jenkins/workspace/build-package-osx-mono/2020-02/external/bockbuild/builds/mono-x64/external/corert/src/System.Private.CoreLib/src/System/Threading/Tasks/FutureFactory.cs:919 
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.Debugging.targets(590,5): error :   at System.Threading.Tasks.TaskFactory.FromAsync[TArg1] (System.Func`4[T1,T2,T3,TResult] beginMethod, System.Action`1[T] endMethod, TArg1 arg1, System.Object state, System.Threading.Tasks.TaskCreationOptions creationOptions) [0x00000] in <36514b14425c4337b446653c547aa9c3>:0 
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.Debugging.targets(590,5): error :   at Mono.AndroidTools.Internal.AdbClientTaskExtensions.WriteCommandWithStatusAsync (Mono.AndroidTools.Adb.AdbClient client, System.String command, System.Threading.Tasks.TaskCreationOptions options) [0x00000] in /Users/builder/azdo/_work/278/s/xamarin-android/external/monodroid/tools/msbuild/external/androidtools/Mono.AndroidTools/Internal/AdbClientTaskExtensions.cs:62 
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.Debugging.targets(590,5): error :   at Mono.AndroidTools.AndroidDevice+<>c__DisplayClass62_0.<RunShellCommand>b__0 (System.Threading.Tasks.Task t) [0x0000f] in /Users/builder/azdo/_work/278/s/xamarin-android/external/monodroid/tools/msbuild/external/androidtools/Mono.AndroidTools/AndroidDevice.cs:403 
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.Debugging.targets(590,5): error :   at System.Threading.Tasks.ContinuationResultTaskFromTask`1[TResult].InnerInvoke () [0x00024] in <36514b14425c4337b446653c547aa9c3>:0 
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.Debugging.targets(590,5): error :   at System.Threading.Tasks.Task.Execute () [0x00000] in /Users/builder/jenkins/workspace/build-package-osx-mono/2020-02/external/bockbuild/builds/mono-x64/external/corert/src/System.Private.CoreLib/src/System/Threading/Tasks/Task.cs:2319 
    5 Warning(s)
    1 Error(s)

To Reproduce 再現試験はお薦めしない。 一度この現象が発生すると、不具合のないXamarin.Androidに更新(ダウングレード含む)を行うまで現象は改善しない。

Steps to reproduce the behavior:

  1. Xamarin.Androidを11.2.0.21にアップデートする(更新通知から。または最新版のVisual Studio for Macをインストールする)
  2. COCOAのソリューションを開きConfigurationをDebugまたはDebug_Mockに変えてエミュレーター/実機でデバッグを実行
  3. See error

Expected behavior エミュレーター/実機でアプリが起動してデバッグできる

Desktop (please complete the following information):

Xamarin.Android
Version: 11.2.0.21 (Visual Studio Community)
Commit: xamarin-android/d16-9/93eab59
Android SDK: /Users/keiji_ariyama/Library/Android/sdk
    Supported Android versions:
        5.1 (API level 22)

SDK Tools Version: 26.1.1
SDK Platform Tools Version: 31.0.0
SDK Build Tools Version: 30.0.2

Build Information: 
Mono: 5e9cb6d
Java.Interop: xamarin/java.interop/d16-9@d6d86b2
ProGuard: Guardsquare/proguard/v7.0.1@912d149
SQLite: xamarin/sqlite/3.34.1@daff8f4
Xamarin.Android Tools: xamarin/xamarin-android-tools/d16-9@9d8924d

Additional context Stackoverflowに類似の報告が見つかっている。

In Visual Studio 16.9.0 Android “deploy to device” error - Command too long https://stackoverflow.com/questions/66465262/in-visual-studio-16-9-0-android-deploy-to-device-error-command-too-long

Android Build Optionの"Use Fast Deployment"を無効化にするという方法については試行したものの、そもそも現在のCOCOAに含まれるCovid19Radar.Androidプロジェクトでは"Use Fast Deployment"は無効になっている。しかし、Deployment時のログには「Fast Deployment」が記録されているので、オプション選択が正常に機能していない可能性がある。 また、"Use Fast Deployment"を有効にして「OK」ボタンでダイアログを閉じても、次にダイアログを開いた時には無効になっている。

結局、https://github.com/cocoa-mhlw/cocoa/issues/40#issuecomment-793821555 と同様、Xamarin.Androidのバージョンを「 11.1.0.17 」にダウングレードして 解決した。 解決していないので引き続き情報を収集する。

アップデートは慎重に!!

atsushieno commented 3 years ago

Xamarin.AndroidのFast Deploymentまわりは、最近わりと大がかりな書き換えがあったはずなので(参考)、リグレッションがあったのでしょう。Command too longはadbから出ているものなので、fast deploymentを有効にすると「間違いなく出る」状態なのだと理解しています。

issue #40 でVSMacのUI上でFast Deploymentを無効にしていてもどうやらそれが効いていないようだというのは xamarin-android本家にあるissueのコメント https://github.com/xamarin/xamarin-android/issues/5710#issuecomment-799283044 にある(というよりリンク先のVScommunityの投稿)にある通りです。

IDEだけの問題であれば、われわれ(?)みたいにちょっと詳しい人間は.csprojファイルを直接編集して対応することもあるのですが、これはXamarin.Androidのツールチェインのレベルの問題なので、このレベルでFast Deploymentの設定として回避するのも無理そうです。その代わり、上記コメントの通り回避策として<EmbedAssembliesIntoApk>true</EmbedAssembliesIntoApk><PropertyGroup> の中に追加してやれば、ビルドとデプロイメントは(多少遅くはなりますが)正常に動作する可能性が上がります。(その他の引数がまだtoo longにならないか次第)

バグ自体は内部的に修正済みでリリース待ちのようです(この辺の実装はXamarin.Androidでもクローズドソースの部分なので、われわれがXamarin.Androidチームの外側で修正するのは無理でしょう)。割と重大なバグなので数日内に出る可能性もあると思います(希望的観測)。

keiji commented 3 years ago

ありがとうございます。 次のバージョンが出たら試してみて、安全が確認できたらアップデートすると言うことでいきます。

keiji commented 3 years ago

あ、Xamarin.Androidの11.2.2.1リリースされてた。

keiji commented 3 years ago

Visual Studio for Mac 8.9.2とXamarin.Android 11.2.2.1で正常にAndroidアプリをビルドでき、エミュレーター・実機へのインストールとデバッグ実行ができることを確認したのでcloseします。

Xamarin.Android
Version: 11.2.2.1 (Visual Studio Community)
Commit: xamarin-android/d16-9/877f572
Android SDK: /Users/keiji_ariyama/Library/Android/sdk
    Supported Android versions:
        5.1 (API level 22)

SDK Tools Version: 26.1.1
SDK Platform Tools Version: 31.0.0
SDK Build Tools Version: 30.0.2

Build Information: 
Mono: 5e9cb6d
Java.Interop: xamarin/java.interop/d16-9@54f8c24
ProGuard: Guardsquare/proguard/v7.0.1@912d149
SQLite: xamarin/sqlite/3.34.1@daff8f4
Xamarin.Android Tools: xamarin/xamarin-android-tools/d16-9@d210f11

一度だけ実機への転送中に次のエラーが発生しました。設定を開いてFast DeployをON/OFFし、メッセージの指示にあるプロジェクトファイルのEmbedAssembliesIntoApktrueに設定すると問題なくdeployが完了しました。その後、ためしにEmbedAssembliesIntoApkfalseに戻してもうまく動くのでよくわからないというのが正直なところです。

Fast Deploy Application Files
    /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.Debugging.targets(590,5): error XA0129: Error deploying files/.__override__/Covid19Radar.dll. Please disable fast deployment in the Visual Studio project property pages or edit the project file in a text editor and set the 'EmbedAssembliesIntoApk' MSBuild property to 'true'.
Done building target "_Upload" in project "Covid19Radar.Android.csproj" -- FAILED.

Done building project "Covid19Radar.Android.csproj" -- FAILED.

Build FAILED.
atsushieno commented 3 years ago

お、とりあえず一応は動作しているみたいなのでなによりです。

このあたりはアプリケーションのデバッグ デプロイメントまわりの問題なので、エラーが出たのはローカルにあったビルドのstale cacheのせいかもしれないし、IDE側が、target側に以前デプロイされたファイルが残っているのを考慮せずに「差分更新は不要っぽい」と判断して以前のデプロイメントのままで実行している可能性もまああります。が、挙動不審であればとりあえず EmbedAssembliesIntoApk で安全側に倒せば、引き続き何とかなるでしょう。