同社が開発した小規模なゲームは、Monkey テスト中に個々のモデルで常に同じ問題に遭遇しました。ここに記録します。
エラーログは次のとおりです。
Caused by: java.lang.Error: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000004
Build fingerprint: 'xxxxx 测试信息'
Revision: '0'
pid: 21666, tid: 21847, name: UnityMain >>> xxx 游戏包名 <<<
r0 980ae958 r1 00000004 r2 00430000 r3 b11dc6dd
r4 980ae958 r5 980ae958 r6 ffffffff r7 980afe78
r8 00000000 r9 a4b2ce00 sl 00000001 fp 980ae948
ip 002e3688 sp 980ae938 lr 9738a941 pc 978460f8 cpsr 86371100
at libunity.006ee0f8(Native Method)
at libunity.0023293d(Native Method)
at Unknown.fffffffd(Unknown Source:0)
Unity 2019.2.9 を使用しています。このエラーが発生した場合、次の 2 つのクラッシュに関連している可能性もあります。
クラッシュ1:
Caused by: java.lang.Error: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0000000000000008
Build fingerprint: 'xxxxx 测试信息'
Revision: '0'
pid: 13512, tid: 13788, name: UnityMain >>> xxx 游戏包名 <<<
x0 0000000000000008 x1 0000000000000040 x2 000000705c34e4be x3 0000000000000003
x4 0000000000000054 x5 0000007035b181e3 x6 00000000000001bc x7 abababababababab
x8 000000700de21110 x9 0000000000000000 x10 0000000000430000 x11 0000000000010001
x12 0000000000000000 x13 0000000010000000 x14 0000000000000001 x15 0000007030298583
x16 0000007035dc0e98 x17 000000705de80b88 x18 0000007035af326d x19 000000700620df10
x20 000000702ee547b0 x21 0000007035de3000 x22 0000000000000001 x23 000000700de234e8
x24 000000700de21f40 x25 0000000012f0af80 x26 00000000701b89d8 x27 0000000070873148
x28 0000000070274b70 x29 000000007030cb30 x30 00000070352714d4
sp 000000700de210e0 pc 0000007035832e7c pstate 0000000060000000
at [vdso].(:0)
at libunity.(:0)
crash2 はタイムアウトの問題です。
Subject: Input dispatching timed out (Waiting because no window has focus but there is a focused application that may eventually add a window when it finishes starting up.)
現在、ある程度解析できているのは最初の問題のみですが00000004
、解析方法はNDKのarm-linux-andr
oideabi-addr2lineツールを使用して、ある程度クラッシュの問題を特定します。具体的な利用方法については、こちらの記事をご覧ください。
分析すると、これがその方法006ee0f8
に該当し、これがその方法に該当することがわかり、それ以外に有益な情報はありません。UnitySendMessage
0023293d
JNI_OnUnload
また、Google で検索したところ、この問題はおそらくApplication.Quit()
Unity に関連しているのではないかと現時点では推測されています。結局のところ、テスト条件がなく、テストパーティからも詳細な情報が提供されていないため、この方法を使用した後、プログラムを終了します。アプリアイコンを再度タップするか、その他の操作を行うとクラッシュが発生する可能性があります。
インターネット上の 1 つの解決策は、Android 側で OnPause() メソッドをオーバーライドすることです。
@Override
protected void onPause() {
if(!isFinish) mUnityPlayer.pause();
super.onPause();
}
しかし、この問題は書き直した後も発生し、テストマシンの機種も比較的ランダムで、現時点ではUnityの公式フォーラムでもこの問題に対する明確な解決策はありません。
一時的な回避策:
最終的に、Application.Quite()
そのパーツを使用しているコードをログアウトすることにし、最終的にテストに合格しました。
PS:
最初にこの機能を追加した理由は、Google Play にアクセスしたい場合は、ゲーム内でゲームを終了する機能を提供する必要があるとパブリッシャーが言ったためで、終了ファンクション キーを追加し、また実装しました。システムファンクションキーで終了 ゲームのロジックですが、こんなに難しい問題が現れるとは予想していませんでした。また、Google Play でいくつかのゲームをダウンロードしましたが、関連する終了ロジックがないため、少しだまされたように感じます。