PR

【Unity】Androidビルド時のエラー対策マニュアル

Unity

この度はUnityで「Androidをビルドする時によく出るエラー」の修正方法を毎回忘れてしまうので備忘録を残すことにしました。

はじめに

Androidでビルドする時、GooglePlay周りのライブラリなどの競合でエラーが出てしまうこともよくありますよね。

こんな感じのエラーです。

java.lang.RuntimeException: Duplicate class android.support.v4.app.INotificationSideChannel found in modules classes.jar (:androidx.core.core-1.2.0:) and classes.jar (:core-1.1.0:)

自分も毎回苦められています…

なので今回は簡単なものとなりますが
そういったものを解決する手順を書いておこうと思います。

 

Androidエラーを解決する手順

エラーの原因は「同じライブラリが2つあるよ!」が多いです。
なので基本的にそのぶつかっている同じライブラリの片方を削除していくのが基本となります。

流れとしては

  1. Androidでビルドする
  2. エラーが出た部分が「どのライブラリか」を確認
  3. 例えば「androidx.core.core-1.2.0」とあればそれを「Assets/Plugins/Android」から削除する(ぶつかっているライブラリの新しいバージョン番号の方を残す)
  4. ビルドの度に作成されるファイルもあるため、必要に応じて自動更新を止める
  5. ビルドしてエラーを確認する
  6. 1.に戻る

と言った流れとなります。

 

基本的な対応方法

例えば先程のエラーは末尾がこのようになっていますよね。

(:androidx.core.core-1.2.0:) and classes.jar (:core-1.1.0:)

「androidx.core.core-1.2.0」と「core-1.1.0」が同じライブラリなのでぶつかっていて
古い方を削除する感じです。

バージョン的には大きいものがバージョンが新しいのでここでは
androidx.core.core-1.2.0を削除します。

 

多いがコツコツ対応していく

ぶつかったライブラリは大量にエラーを吐いたりします。
メモ帳などにぶつかっているエラーで重複しているものを除いて
取り出していって、まとめて不要なライブラリファイルを削除していくのがおすすめです。

英語ばかりで目が疲れそうです…
でもコツコツ頑張るしかないですね!

 

旧名称と新名称でぶつかっているケース

この場合、ライブラリの名称が違うので判断が難しいですよね。
ただ調べていると下記サイトで古いバージョンから名前が変わったとの情報がありました。

アーティファクトのマッピング  |  Jetpack  |  Android Developers

「旧名称」と「新名称」で被っていたら
「旧名称」側を削除すれば良さそうですね

 

自動でライブラリ更新されるのを止める

項目にもあったことですが、ぶつかっているライブラリを削除したところで
また勝手で再生成されてしまう仕組みが存在しています。

なんと…恐ろしい。
それだと、またエラーが出てしまいますね

なのでビルド時には自分で解決しているのでひとまず自動更新を止める必要があります。

方法としては
「メニュー→Assets→External Depency Manager→Android Resolver→Settings」
を選択します。(下記画像)

Settingの場所

 

そして開いたウィンドウで設定が出来るので下記2項目をOFFにします。

  • Enable Auto-Resolution
  • Enable Resolution On Build

自動更新をさせない設定

これで自動で更新されなくなりました!

これでエラーを潰しながら修正していけばすべてエラーが取れるはず…です!

 

自動更新を止める弊害

この対応でビルドが通っても必要なライブラリが自動更新で作成されない場合があります。
更新が抜けるとAndroidでアプリが動かなくなることもあるのでその際は一度手動で更新を行うようにしてください。

更新は「メニュー→Assets→External Depency Manager→Android Resolver→Resolve」から実行することができます。

アプリ起動後にすぐ落ちる場合はかなり怪しいです!

 

「Build Setting」画面からエクスポートする

Androidはビルド環境を出力できるのでその出力されたファイルで
実際に衝突しているファイルを確認できるようです。

手順としては

  1. BuildSettingsを開く(Androidに切り替え)
  2. 「Export Project」をチェック
  3. 「Export」ボタンを押してフォルダを選択
  4. 出力されたプロジェクトにある「build.gradle」を確認
  5. dependenciesという項目を確認

こういう方法で実際ビルド時に実際組み込まれるライブラリファイルを確認することができます。

それをヒントに調査していく感じです

 

余談:開発環境から見直す

本サイトでは基本的にバージョン管理をおすすめしています。
バージョン管理というのは簡単に言えば「時間を戻せる、過去の変更を見れる機能」となります。

これは本当に便利!

エラーが起きる際は基本的にプラグイン取り込み・更新時だと思われるます。

そしてプロジェクト管理しておくことによって複雑なエラーな場合に巻き戻せたり、調査が容易になるため事前に管理しておくことは推奨しております。

 

番外編:エラー取れたけど、アプリが正常に動かない時

私が開発している時にエラーがなくなってアプリが動作するけど
アプリの一部機能が動作しないことがありました。

対応方法が全くわからない状況で辛かったです

ここでは自分の例を参考に解決手順をお伝えしたいと思います。

 

まずは動く状況にする

これまでFirebaseがない環境ではプッシュ通知が動いていたので
試しにFirebase関連のデータとライブラリを削除すると…動きました!

ただFirebase側とぶつかっているライブラリで削除した
逆側を消したりしても改善せずでした…

 

プラグイン開発側の気持ちになる

こんな感じで開発している側の気持ちになって考えました。

  1. リリースされているプラグインは動作確認はしているはず
  2. Firebaseとそのプラグインのバージョンが遠すぎるために想定外が起きているのではないか
  3. 問題になっているFirebaseのバージョンにできるだけ近づけたバージョンのNCMBを使えば動くはず!
  4. 調査の結果、含まれていたライブラリ(.arrファイルなど)がv4.1.0のものがFirebaseのものに一番近かったので導入
  5. 無事に動作しました!

このようにエラーが出ないけど動作がしない場合はできるだけ近いバージョンのライブラリが含まれているプラグインに切り替えることによって改善できることがあります。

エラーが出なくなってもバグが出ないとは限らないのが怖いですよね
できるだけ近いバージョンのライブラリを使うのが安全そうです

 

 

最後に

いかがでしたでしょうか。

今回は忘れた頃にやってくるAndroidのビルドエラーについてまとめてみました。
個人的にも毎回どうするんだっけ?と思うことが多かったので何度もお世話になりそうです。

今後はよりスムーズに対応ができそうですね!

それでは本記事はここで終わりにしたいと思います。
ここまでお読みいただきありがとうございました。

コメント

スポンサーリンク
Ads Blocker Image Powered by Code Help Pro

広告ブロッカーが検出されました

広告をブロックする拡張機能を使用していることがわかりました。これらの広告ブロックを無効にして、私たちをサポートしてください。

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