アレアレ

お役立ち情報、お悩み解決情報を発信!

visual studio for mac

Visual Studio for Mac製のアプリがGoogle Playに公開した時だけクラッシュする原因

Visual Studio for Mac製のアプリがGoogle Playに公開した時だけクラッシュする原因

私は、Visual Studio for Macで作ったAndroidアプリをGoogle Playに公開しています。

この記事を書いている最近、そのアプリにちょっと機能を追加して、Google Play上のアプリを更新したところ、とんでもないことになりました。次のグラフの通りです。

クラッシュ数

これまで滅多にクラッシュしていなかったのが、急増する結果となりました。

そのクラッシュにあたり、例外の情報を確認すると、次のような例外が起きていることがわかりました。

at md5c05f612bf2d0eba115bb1bfea875dacf.MainActivity.n_onCreate (Native Method)
at md5c05f612bf2d0eba115bb1bfea875dacf.MainActivity.onCreate (MainActivity.java:29)
at android.app.Activity.performCreate (Activity.java:6705)
at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1119)
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2664)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2772)
at android.app.ActivityThread.-wrap12 (ActivityThread.java)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1515)
at android.os.Handler.dispatchMessage (Handler.java:102)
at android.os.Looper.loop (Looper.java:241)
at android.app.ActivityThread.main (ActivityThread.java:6223)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:755)

この情報を見ると、起動時にすぐに例外が発生してクラッシュしていることがわかります。

このクラッシュの発生にあたり、私が不思議だったのが、ローカル環境では再現しなかったことです。Visual Studio for Mac上に接続した実機に対し、Debugビルド、Releaseビルドどちらを試しても、アプリがちゃんと機能するんですね。

一方で、そのAPKをGoogle Playに公開し、Google Play経由でインストールした時のみ、アプリを起動するとすぐに例外が発生してクラッシュする状況となりました。どうも、Google Play経由でインストールした場合のみ、上にある「ZygoteInit」の例外が発生するようなんですね。

そして、Xamarinのユーザーフォーラムを見ると、この問題に関しての情報がありました。次のリンク先の通りです。

ZygoteInit Errors

この記事を見ると「Xamarin.Android 7.4.0.11+」でこの問題は解決するとあるのですが、私は、それよりも新しい、8.0.2.1のバージョンでこの問題が発生しました。

結局、この問題が発生する根本的な解決策は、わかりませんでした。私は、Google Playに公開した時のみ例外が起こる箇所のプログラムの仕方を変えることで対応しました。

今回の件から、「Visual Studio for Macで作ったAndroidアプリをいきなりGoogle Playの本番環境にリリースするのは怖いな」と感じました。なので、βテストで公開して問題ないことを確認した上で、本番に公開するようにした方が良いことがわかりました。

Return Top