【Unity】Android11(APIレベル30)でUnityAdsが原因でクラッシュした話
局所的な話題ですが、Android向けにアプリを作っている人向けに。
UnityでAndroid向けにビルドしたアプリをAndroid11(APIレベル30)の環境で実行するとクラッシュすることがありました。結論から言うと原因は古いバージョンのUnityAdsを使っていたためで、アップデートしたらAndroid11の環境でも想定どおりに動きました。
使っているUnityのバージョンが少し前のものだとUnityAdsのバージョンがデフォルトになっていることがあるので、アップデートの際はUnityAdsのバージョンも確認するといいかも。
環境
macOS 10.15 Catalina
Unity2018.4.23f1
UnityAds 3.4.7
発生した事象
UnityでAndroid向けにビルドしたアプリをAndroid11(APIレベル30)の環境で実行するとクラッシュすることがありました。
その際、 Android Studioのlogcatには以下のエラーが出力されていました。スタックトレースの中身を全部残していた訳ではないので概要だけですが、なにかしらネットワークの状態を取得しようとしてクラッシュしたみたい。
原因
このエラーはUnityAdsを使っているシーンで発生していて、他のシーンでは発生していなかったことからUnityAdsあたりが関係しているように思いました。
『getDataNetworkTypeForSubscriber』でググってみると同様のエラーが出力されたという報告がUnityフォーラムにもありました。ここでもUnityAdsが原因であると言われているようだったので多分これかなーとあたりを付けられました。
Android11では権限に関して更新が行われたので、この『getDataNetworkTypeForSubscriber』に関して『READ_PHONE_STATE』のパーミッションが要求されるようになったようです。なので、権限がなくてクラッシュしていたみたい。
Android11における権限の更新については以下のページもご覧ください。
解決方法
UnityAdsのバージョンを3.4.9以降にアップデートすることで、Android11の環境においてUnityAdsが原因でクラッシュすることがなくなります。
パッケージのChangeLogの [3.4.9] の部分にこの修正が記載されています。
2020年11月18日現在だと3.5.2が最新版になっています。使っているUnityのバージョンによってUnityAdsのデフォルトバージョンが異なるので、もし古いバージョンのUnityAdsを使っている場合はアップデートした方がよさそうです。
特に長期サポートのUnity2018.4を使っている場合は、プロジェクトを作成した時のバージョンのままになっていることもあるかもしれません。アップデートを提出する際、新しいバージョンのOSで動かないとなるとインパクトが大きいですからね。
実は以前、UnityAdsのバージョンが古くてiOSのUIWebViewのガイドラインに引っかかってビルドを提出できなかったことがあったので、定期的にUnityAdsのバージョンを確認しておいた方が良いです。この時はUnityAdsの2.xから3.xにアップデートしていて、リリース前にソースコードも変更したりと結構慌てた思い出があります(笑)
まとめ
UnityでAndroid向けにビルドしたアプリをAndroid11(APIレベル30)の環境で実行するとクラッシュすることがあった件について事象と解決方法を記載しました。
2020年11月に入ってAndroid11にアップグレードできる機種なども出てきているので、UnityAdsを使っている場合はアプリのアップデートをした方が良いかもしれません。
開発環境を取り巻く進化スピードはとても早いので、定期的にリリース済みのアプリの状況を確認しておくと安心です。
ゲーム開発の攻略チャートを作りました!
-
前の記事
リリースまでいくアイディアは7つに1つなのでいっぱい出そう【ゲーム開発】 2020.11.19
-
次の記事
他の人を気にしすぎると手が止まるんですよね【ゲーム開発】 2020.11.21
コメントを書く