

### 前提・実現したいこと

Unityでゲームを作っています。  
多くの機種で正常に動きますが、何種類かの機種で以下のエラーメッセージが発生し、アプリが起動しません。  
私は今回が初の開発なのでandroidの知識が浅く、何によってエラーが出ているか分からない状態です。

ゲーム作成中のエラーは実機で試しながら行えたのですが、これはFirebaseで得られたログです。  
その後同じ機種をFirebaseのTestLabやAWSのDeviceFarmで試した結果、エラーが出ていることは確認できています。（その時のLogcatの見方が分からず、どこでエラーが出ているか分かりませんでした。（Errorは多くあったのですが、すべてが「アプリが起動しない」に直結するErrorではないため））

以下エラーメッセージの原因が分かる方がいれば、教えて欲しいです。  
よろしくお願いいたします。

### 発生している問題・エラーメッセージ

[code]

    Fatal Exception: java.lang.Error: FATAL EXCEPTION [main]
    Unity version     : 2019.3.14f1
    Device model      : samsung SM-A505U1
    Device fingerprint: samsung/a50ue/a50:9/PPR1.180610.011/A505U1UEU2ASH6:user/release-keys
    
    Caused by java.lang.Error: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
    Version '2019.3.14f1 (2b330bf6d2d8)', Build type 'Release', Scripting Backend 'il2cpp', CPU 'arm64-v8a'
    Build fingerprint: 'samsung/a50ue/a50:9/PPR1.180610.011/A505U1UEU2ASH6:user/release-keys'
    Revision: '10'
    ABI: 'arm64'
    Timestamp: 2021-02-28 17:20:45+0900
    pid: 5318, tid: 5495, name: Vulkan Submissi  >>> 「ゲーム名」<<<
    uid: 12217
    signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
    Cause: null pointer dereference
        x0  0000007752d74ce8  x1  00000076ce000000  x2  ffffff8932000000  x3  000000775ceee1dc
        x4  00000076dadb9f80  x5  00000076de2f16c0  x6  0000000000000100  x7  0000000000000006
        x8  0000000000000000  x9  ffffff8932000000  x10 000000000087c040  x11 0000000000000000
        x12 0000000000000100  x13 0000000000000006  x14 0000000000000000  x15 0000000000000002
        x16 000000775299da78  x17 00000077f209dcf0  x18 0000000000000038  x19 ffffff8932000000
        x20 00000076ce000000  x21 0000000000000000  x22 0000000000000006  x23 0000000000000000
        x24 00000076de2f15f0  x25 0000000000000028  x26 0000007752d74690  x27 ffffff8932000000
        x28 00000076eb3e1908  x29 00000076eb779238
        sp  00000076e71fb260  lr  000000775ceee2f0  pc  000000775d154438
    
    backtrace:
          00 pc 000000000070f438  /vendor/lib64/egl/libGLES_mali.so (BuildId: 4eb6cc22350e545f73f0ae424a8499b6)
          01 pc 00000000004a92ec  /vendor/lib64/egl/libGLES_mali.so (BuildId: 4eb6cc22350e545f73f0ae424a8499b6)
          02 pc 00000000004a91f0  /vendor/lib64/egl/libGLES_mali.so (vkFlushMappedMemoryRanges+20) (BuildId: 4eb6cc22350e545f73f0ae424a8499b6)
          03 pc 000000000073f50c  /data/app/「ゲーム名」-1e6xwERrV29wlkDZJROczA==/lib/arm64/libunity.so (BuildId: 532d8d524ea517bb96c77e9bf471ec218a2a798d)
          04 pc 000000000073e530  /data/app/「ゲーム名」-1e6xwERrV29wlkDZJROczA==/lib/arm64/libunity.so (BuildId: 532d8d524ea517bb96c77e9bf471ec218a2a798d)
          05 pc 000000000073d6c0  /data/app/「ゲーム名」-<truncated: 514 chars>
           at libGLES_mali.0x70f438()
           at libGLES_mali.0x4a92ec()
           at libGLES_mali.vkFlushMappedMemoryRanges(vkFlushMappedMemoryRanges:20)
           at libunity.0x73f50c()
           at libunity.0x73e530()
           at libunity.0x73d6c0()
           at libunity.0x586900()
           at libc.__pthread_start(void*)(__pthread_start:196)
           at libc.__start_thread(__start_thread:68)
    
[/code]


CC BY-SA 4.0
2021-02-28T11:34:59.413
74322
2021-04-01T10:15:38.510
2021-03-01T01:08:47.100
3060
44149
question
android unity3d unity2d
Androidでの特定の機種でのエラー（java.lang.Error：null pointer dereference）について


とりあえずスタックトレースからわかることは、  
`vkFlushMappedMemoryRanges`の呼び出しにおいて、Mali のVulkanドライバの内部でnull pointer
dereferenceによりsegfaultしている、ということですが、  
Unityのエンジン部分のソースコードがないので、

  * 何かVulkanのデバイスメモリ関連の仕様違反があり未定義動作に頼っていたのが一部のデバイスで問題が顕在化しているのか、
  * または単純にMaliのVulkanドライバにバグがあるのか、

というのを判断するのが難しい所はあると思います.

挙げられている端末は皆Maliを積んでいるもののようですが、Adrenoの端末では起きていないということでしょうか?

ただ一般論として、Android端末の、特に7.0とかでVulkan
1.0の対応がし始められた頃の端末に入っているVulkanドライバの実装は割とバグが多くなかなか信用ならんことで有名で、  
更にAndroid端末のグラフィクスドライバが更新される、ということがなかなか難しいこともあり、  
(GPUのベンダが更新し、端末の製造会社が対応し、キャリアがAndroidアップデートと一緒に配信する、が全部起こる必要があるため)  
自社エンジンを使っているような大手の開発会社によるアプリでも、例えばAndroid 7.1の端末から、だとかVulkan
1.1対応の端末から、のように制限をしてVulkanを有効にし、  
当てはまらない場合はGLES3を使う、のようにしていることもある[[roblox-graphics-
apis-2019](https://gist.github.com/zeux/7d3ff56568c6b02de3a87cc69899d949)]、というのが現状です.

特にGalaxy S6はかなり古いですよね.

また同じ機種でも、使用者のアップデートの状況によって、Vulkanドライバのバージョンが異なることも考えられると思います.

Unityに詳しくないのですが、今回のゲームはVulkanを使用しないとダメなものでしょうか?  
バックエンドのグラフィクスAPIをGLES3のみ、としてAPKを作る、というわけにはいかないでしょうか?

どうしてもVulkanでいきたい！の場合は、端末やそのAndroidバージョンによって配信を制限する必要が出てくるかと思います.


CC BY-SA 4.0
2021-04-01T10:15:38.510
75024
2021-04-01T10:15:38.510
7981
74322
answer