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.**{
*;
}
以上の設定を行うことで、エラーを解決することができました。
コメント