[Unity][android] SDK35対応でClassNotFoundException

まずは、
Unity Project SettingsのPublishing SettingsのMinifyチェックを外す。
すでに設定済みの場合は、既存のProguardファイルを退避してからなど。

Minifyにチェックを入れた場合、Custom Proguard Fileに色々書かないといけない。
→とりあえずチェック入れないで動くようにしてから考えよう。

圧縮やいらないものを削除で、ビルドファイルが小さくなるシステムですが、Proguard Fileに色々書かないと必要なものも消える。そのため、インストール後にClassNotFoundExceptionがめちゃ出ます。
AdMobなら
ClassNotFoundException: com.google.android.gms.adsなんとか

このあたりのエラーが出ない状態にしておく。
〜〜〜〜〜〜

AdMobやPlaygamesの更新は、入れようとするファイルのある場所を、削除する。
更新よりは消してから入れたい感じがある。
Import前に一覧が出るので、消しやすい。

Unity6.2 6000.2.6f1
GoogleMobileAds-v10.4.2.unitypackage
GooglePlayGamesPlugin-2.1.0.unitypackage

更新すると、実行しても動作しない。
ログには、
ClassNotFoundException: com.google.games.bridge.HelperFragment

Assets/GeneratedLocalRepoに作成されるファイルが参照されなくなっていて、
Assets直下の既存のフォルダが利用されるようになっている。

Assets → External Dependency Manager → Android Resolver → Settings
ここの
Assets/GeneratedLocalRepoをAssetsにすることで参照されるように。

変更後は、
Assets → External Dependency Manager → Android Resolver → Delete Resolved Libraries で消して Force Resolve で作成
GeneratedLocalRepoフォルダを消して、ただのResolveでもよかったような。多分同じ。

[参考場所]
https://github.com/playgameservices/play-games-plugin-for-unity/issues/3318#issuecomment-3278937289

Playgamesをデバッグで動かすには?

[android] リリース版SHA1が必要
こちらの応用ですが、本番稼働中のクライアントの他に、もうひとつ作って、それを使って接続します。

keystoreのSHA1を利用するので、Googleによる署名を行っていなければ、そのまま繋がるのかもしれないけど。

Google Cloud Platformの同じ場所にもうひとつ作ります。

そのクライアントの「証明書のフィンガープリント」に、デバッグ時にビルドで利用するkleystoreファイルのSHA1を入れ込む。

Unity Hub内のもの使うとき
keytoolでSHA1を確認する
/Applications/Unity/Hub/Editor/6000.2.6f1/PlaybackEngines/AndroidPlayer/OpenJDK/bin/keytool -keystore keystoreファイルのパス -list -v

ビルド&インストール後、実機でのログ見たりするとき
/Applications/Unity/Hub/Editor/6000.2.6f1/PlaybackEngines/AndroidPlayer/SDK/platform-tools/adb logcat | grep Unity
grepの対象は色々変えたり

Google Play ConsoleのPlay Gamesサービスの設定で「認証情報を追加」。
作成したdebug用のクライアントを「OAuth クライアント」で選択します。


これだけは絶対にチェックしないように。。。どうなるかわかりません。

「認証情報を追加」したあとは、「公開」します。
公開しなくても接続はできたけど、リーダーボードなどへのアクセスができない。

Unityで、
Window → Google Play Games → Setup → Android setupで、この作成したクライアントIDを入れる。

これでデバッグビルドでも繋がるようになります。

リリースビルド時(審査に送るとき)は、このクライアントIDをリリース版へ変更しないといけないのは忘れてはいけない。
すべて手動なので、確実に。

Google公開の内容を見ると、クライアントIDは省略可との記載でした。
公開されているクライアントが利用されるということと思われるけど、上記の追加をしないとdebugで繋がらないなーという感じではある。

Googleのページ → Unity 用 Google Play Games を設定して認証する


Unity,playgamesなどをこの構成で、内部テスト版が起動しないという状況になっています。
やり直し中ですが、バックアップ取ったりなど、対応は慎重に。

アプリが起動しないのは、SDKなど関係なく、PlayConsoleで変更するテストユーザーのライセンス応答の内容でした。
NORMALにしたところ、起動しました。IAPの確認で変更したままという状態だったため。

「正常に」ライセンスではじかれたようで、起動ログにエラーやExceptionがなかった。
結構気付けなそうでハマります。

[Unity][android] 内部テスト版が起動しないレアパターン

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする