【Unity】Android実機でNatShare使用時にアプリが落ちてしまう

Androidでのリリース準備中に、Android実機でNatShareを使用しSNS共有を行うとクラッシュするようになってしまいました。
その時の原因と対応策を残しておきます。開発環境は下記のとおりです。

  • Unity 2020.3.17f1
  • PC MacBook Pro(13-inch, 2018, Four Thunderbolt 3 Ports)
  • OS macOS Monterey バージョン12.4
  • Xcode Version 13.4.1

実行環境は下記のとおりです。

  • Android Xperia 10 II
  • OS Android 11

Androidでのリリースは下記のサイトを参考に進めました。

エラー内容

今回発生したSNS共有の画面が表示される前にアプリが強制終了してしまう現象は下記の内容でした。

  • リリース用の設定をした後に発生
  • リリースビルドでSNS共有した時クラッシュが発生
  • デバッグビルドでSNS共有した時はクラッシュしない


また、アプリが落ちた際に、どんなログがはき出されているのかをadb logcatで調べてみると下記のログが出力されていました。

08-07 22:22:47.480  9822  9822 E chromium: [0807/222247.480073:ERROR:process_memory_range.cc(75)] read out of range
08-07 22:22:47.511  9822  9822 W chromium: [0807/222247.511020:WARNING:thread_snapshot_linux.cc(112)] Unknown scheduling policy 1073741825
08-07 22:22:47.564  9237  9267 E CRASH   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
08-07 22:22:47.564  9237  9267 E CRASH   : Version '2020.3.17f1 (a4537701e4ab)', Build type 'Release', Scripting Backend 'il2cpp', CPU 'arm64-v8a'
08-07 22:22:47.564  9237  9267 E CRASH   : Build fingerprint: 'Sony/A001SO/A001SO:11/59.1.D.1.237/059001D001023701600955375:user/release-keys'
08-07 22:22:47.564  9237  9267 E CRASH   : Revision: '0'
08-07 22:22:47.564  9237  9267 E CRASH   : ABI: 'arm64'
08-07 22:22:47.564  9237  9267 E CRASH   : Timestamp: 2022-08-07 22:22:47+0900
08-07 22:22:47.564  9237  9267 E CRASH   : pid: 9237, tid: 9267, name: UnityMain  >>> com.SasamiDaifuku.FallingGirl <<<
08-07 22:22:47.564  9237  9267 E CRASH   : uid: 10380
08-07 22:22:47.564  9237  9267 E CRASH   : signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
08-07 22:22:47.564  9237  9267 E CRASH   :     x0  0000000000000000  x1  0000000000002433  x2  0000000000000006  x3  0000007665eb8580
08-07 22:22:47.564  9237  9267 E CRASH   :     x4  00000079c8423000  x5  00000079c8423000  x6  00000079c8423000  x7  00000000094bd864
08-07 22:22:47.564  9237  9267 E CRASH   :     x8  00000000000000f0  x9  ff8f6d1d5cf9e100  x10 0000000000000000  x11 ffffffc0fffffbdf
08-07 22:22:47.564  9237  9267 E CRASH   :     x12 0000000000000001  x13 000000000000047a  x14 00000079c4091d22  x15 0000000000000005
08-07 22:22:47.564  9237  9267 E CRASH   :     x16 00000079c408ec80  x17 00000079c4070b70  x18 00000075c0fde1c8  x19 0000000000002415
08-07 22:22:47.564  9237  9267 E CRASH   :     x20 0000000000002433  x21 00000000ffffffff  x22 0000000000000058  x23 0000000000000058
08-07 22:22:47.564  9237  9267 E CRASH   :     x24 00000076d19f0000  x25 0000000000000043  x26 00000076d1a7486c  x27 00000076d19f2000
08-07 22:22:47.564  9237  9267 E CRASH   :     x28 00000076d19f3000  x29 0000007665eb8600
08-07 22:22:47.564  9237  9267 E CRASH   :     sp  0000007665eb8560  lr  00000079c40243e0  pc  00000079c402440c
08-07 22:22:47.564  9237  9267 E CRASH   : backtrace:
08-07 22:22:47.564  9237  9267 E CRASH   :       #00 pc 000000000004e40c  /apex/com.android.runtime/lib64/bionic/libc.so (abort+164) (BuildId: 8d77279a411c99f8bc6edb79c76340fb)
08-07 22:22:47.564  9237  9267 E CRASH   :       #01 pc 000000000055d070  /apex/com.android.art/lib64/libart.so (art::Runtime::Abort(char const*)+2308) (BuildId: 68b638712a884691307f118d7fc44150)
08-07 22:22:47.564  9237  9267 E CRASH   :       #02 pc 0000000000013978  /system/lib64/libbase.so (BuildId: 7f81cc97d60164bfae3b52a2cd822f20)
08-07 22:22:47.564  9237  9267 E CRASH   :       #03 pc 0000000000012fa4  /system/lib64/libbase.so (android::base::LogMessage::~LogMessage()+320) (BuildId: 7f81cc97d60164bfae3b52a2cd822f20)
08-07 22:22:47.564  9237  9267 E CRASH   :       #04 pc 00000000005b1b74  /apex/com.android.art/lib64/libart.so (art::Thread::AssertNoPendingException() const+1808) (BuildId: 68b638712a884691307f118d7fc44150)
08-07 22:22:47.564  9237  9267 E CRASH   :       #05 pc 00000000001d1950  /apex/com.android.art/lib64/libart.so (art::ClassLinker::FindClass(art::Thread*, char const*, art::Handle<art::mirror::ClassLoader>)+64) (BuildId: 68b638712a884691307f118d7fc44150)
08-07 22:22:47.564  9237  9267 E CRASH   :       #06 pc 0000000000393054  /apex/com.android.art/lib64/libart.so (art::JNI<false>::FindClass(_JNIEnv*, char const*)+1048) (BuildId: 68b638712a884691307f118d7fc44150)
08-07 22:22:47.564  9237  9267 E CRASH   :       #07 pc 000000000067c1e4  <anonymous:00000076c45e4000>
08-07 22:22:47.743  9237  9267 E CRASH   : Tombstone written to: /storage/emulated/0/Android/data/com.SasamiDaifuku.FallingGirl/files/tombstone_00

ログを出してみたもののよくわからなかったため、原因特定をするためにリリースのために設定した内容を1つずつ戻していき、どの時点で失敗するかを確認しました。

ちなみにadb logcatのやり方は下記サイトを参考にしました。

adb: command not foundが出てきた場合は下記サイトを参考にANDROID_HOMEのPATH設定を行う必要がありました。

原因

「Project Settings」内の「Minify」の「Release」にチェックを入れていると今回のエラーが発生することがわかりました。
Minifyが何なのかについてはUnityのリファレンスに下記のように書かれています。

小型化 (Munification) とは、アプリケーションのコードを縮小、難読化、最適化するプロセスです。コードサイズを縮小し、コードを逆アセンブルしにくくすることができます。Minify の設定を使って、いつ、どのように Unity がビルドに小型化を適用するかを定義します。

https://docs.unity3d.com/ja/2020.1/Manual/class-PlayerSettingsAndroid.html#minify

なぜこの設定を入れるとエラーを起こしてしまうのかについては、下記のサイトがわかりやすかったです。

エラーが発生した時の僕の「Project Setteings」は下記の画像のようになっていました。
なのでReleaseの時のみエラーが発生していたのかなと思います。

対応策

Project Settingsの「Custom Proguard File」を有効にし、作成される「proguard-user.txt」内に「keep class api.natsuite.**{*;}」を記述します。

Project Settingsの「Custom Proguard File」を有効にする。

「Assets/Plugins/Android」内に「proguard-user.txt」が作成されるので、ファイルを開き下記を入力します。

keep class api.natsuite.**{
*;
}

以上の設定を行うことで、エラーを解決することができました。

コメント

タイトルとURLをコピーしました