riru/宝石小箱 2022/10/28 00:09

Androidアプリ更新格闘録

googleさんから課金システムを11月入るまでにGooglePlay Billing Library4以上にしてね、あと対象 API レベルを上げてねと言われたので対応をしていたのですが、まーーーーーーーーーー大変だったのでその格闘の記録を…
全部対応完了するまでまるまる1週間費やしました。この時間があればドラクリどれだけ進められたかとか考えてはいけない。(一応ビルドとかの合間にちょろっとやったりしたけど、細切れ過ぎて集中できなかった)
基本的に私が脳みそからっぽのままちゃんとエラー文読まずに調べてたことが原因ですが、時期的に悩んでいる方もいるかもしれないので少しでもお力になれば幸いです。

ただ試行錯誤しすぎて何を調べて何を試して何が効いたかあんまり覚えてないので、とりあえずこんなエラーが出てこんな対処をしたよなどつらつら書く方式になります。
課金システム更新の必要があり、広告がいろいろなものを使っていたりフォルダの構成も昔のままで一番時間を要したFairyGarden、比較的最近だったけどUnityのバージョンがちょっと昔だったからなんだかんだいろいろ変えざるを得なかったひつじObject、前2つよりはましだけどビルド形式が違うためこれはこれで苦戦したツクール作品系の3本立てでお送りします
(ツクール作品系は今まで作ったフリゲアプリ化計画の記事の方にも追記をしています)


<FairyGarden(そこそこ昔で課金システムの更新が必要だったもの)編>

いいたいこと。まずは
プロジェクトフォルダ\Library\PackageCacheから来るエラー文が消えない場合は、大人しく新しくプロジェクト作ってPlugin/Android以外のAsset以下を移植したほうが手っ取り早い!!

とりあえずUnityバージョンを上げてみたんですが、core@1.4.0みたいなところから「API21は廃止されました。API22以上にしてください(意訳)」的なエラーが2つ現れ、調べても消し方がわからずバージョンを戻しました。
でもそれはそれでいろいろなエラーが出て、結局新しいプロジェクトにぶっこむことになりました。
まぁその先でもいろんなエラーが出たわけですが…
ちなみにUnityIAP(課金システム)については最新バージョンに上げるとUnityIAPも最新のバージョンにできるようになってるので、それを適用すると自動的にGooglePlay Billing Library4以上になるらしいのでこれでOK。
ただそうすると課金を取り扱っているスクリプトで
builder.Configure<IGooglePlayConfiguration>().SetPublicKey
の部分がエラーになったので、思い切ってコメントアウトしたらなんとかなりました。
参考ツイート→https://twitter.com/HyperMamu/status/1565524303700930561

その他いろんなエラーはこちら

Caused by: java.lang.NoClassDefFoundError: com/android/tools/lint/LintCliClient
プロジェクト設定>player>公開設定
でビルドの
カスタムベーステンプレートにチェックを入れる。
それによってできたbaseProjectTemplate.gradleの
dependencies
の中に
classpath 'com.android.tools.lint:lint:26.3.2'
を追加
参考サイト→Android build returns "java.lang.NoClassDefFoundError: com/android/tools/lint/LintCliClient"

Duplicate class
要するにクラスが重複してるということらしいです。
プロジェクト設定>player>公開設定
でビルドの
カスタムメインテンプレートにチェックを入れる。
それによってできたmainTemplate.gradleの
dependencies {
の中に
implementation ('com.google.android.gms:play-services-ads:19.5.0')
みたいなのがあると思うので、それを
implementation ('com.google.android.gms:play-services-ads:19.5.0'){

exclude group: 'androidx.core', module: 'core'
exclude group: 'androidx.documentfile', module: 'documentfile'
exclude group: 'androidx.loader', module: 'loader'
exclude group: 'androidx.localbroadcastmanager', module: 'localbroadcastmanager'
exclude group: 'androidx.print', module: 'print'
exclude group: 'androidx.legacy', module: 'legacy-support-core-utils'

}
みたいに変える。
Duplicate class~と続く文には必ず()が2つあり、少なくともどちらかは
(androidx.core:core:1.2.0)
みたいな:(コロン)で区切られたものが出てくると思います。
の区切られた最初をgroupに、2番目をmoduleに入れるとエラーが消えます。
参考サイト→Android Studioで Duplicate classes エラーの対処法
これでもエラーがなくならない場合は
プロジェクト設定>player>公開設定
でビルドの
カスタムGradleプロパティテンプレートにチェックを入れ、それによってできたgradleTemplate.propertiesに
android.useAndroidX=true
android.enableJetifier=true

を追加してみよう


お客様のアプリにはポリシーを遵守していない SDK バージョンが含まれています
AndroidManifest.xmlの
<manifest ... >となっている下に
<uses-permission android:name="com.google.android.gms.permission.AD_ID"></uses-permission>
参考サイト→targetSDKVersionが31以上のアプリでビルドする場合の対応について


<ひつじOjject(課金とかはないけどちょっと昔のプロジェクト)編>

gradleのバージョンはUnityのバージョンによって変わってくるらしいです。
なので古いバージョンのUnityを使っていて、諸々の更新をするために必要なプラグインのバージョン(baseProjectTemplate.gradleファイルの中にある classpath 'com.android.tools.build:gradle:x.x.x' のx.x.x部分)を変える場合はUnity自体のバージョンアップが必要となるかもしれません。
下記のようなビルドエラーが出たときはそういう意味です

What went wrong:
A problem occurred evaluating project ':launcher'.
> Failed to apply plugin [id 'com.android.internal.version-check']
> Minimum supported Gradle version is 6.1.1. Current version is 5.6.4. If using the gradle wrapper, try editing the distributionUrl in E:\HD-PEU2\RPGVX\Unity\HitsujiObject\Temp\gradleOut\launcher\gradle\wrapper\gradle-wrapper.properties to gradle-6.1.1-all.zip


<その他ツクール作品系(cordovaでビルドしているもの)編>

Could not find an installed version of Gradle either in Android Studio
昔のプロジェクトだとフォルダ構造が変わってビルドするときにエラーが起こるときがあります。
そのときはandroidフォルダを消してコマンドプロンプトで
cordova platform add android@6.2.3
と打つとフォルダが再構成されます。
2022年11月5日追記 これでビルドを行うとビルド自体は成功するものの、起動すると”Admob is not defined”というエラーが出て進まなくなります。なので代わりにプロジェクトフォルダでコマンドプロンプトをだして
cordova platform remove android
と打ってコマンドからandroidフォルダを消し、
cordova platform add android@8.0.0
でandroidフォルダを再構成します

参考サイト→ionic build android failure :Execution failed for task ':CordovaLib:compileDebugJavaWithJavac'
参考サイト→【Cordova】プラグイン追加時に発生した「Could not find an installed version of Gradle either in Android Studio」エラーの対処法

このファイルは Android 12 以降にはインストールできません
アプリは無事ビルドできたけど、GooglePlayConsoleにアップロードしたら下記のようなことを言われた場合
アップロードされた APK または Android App Bundle には、インテント フィルタを使用するアクティビティ、アクティビティ エイリアス、サービス、またはブロードキャスト レシーバが含まれていますが、'android:exported' プロパティ セットは使用されていません。このファイルは Android 12 以降にはインストールできません。
AndroidManifest.xmlのactivityの中に
android:exported="true"
を追加する
参考サイト→【Unity】GooglePlayConsoleにて「アップロードされた APK または Android App Bundle には、インテント フィルタを使用するアクティビティ、アクティビティ エイリアス、サービス、またはブロードキャスト レシーバが含まれていますが、'android:exported' プロパティ セットは使用されていません。このファイルは Android 12 以降にはインストールできません。」というエラーが出た時の対処法

広告IDの取得
targetSDKVersionが31以降の場合、広告IDの権限が付与されてないよー、IDがゼロでかえっちゃうよーというエラーがGoogleplayにアップロードするときに警告される時があります。
その時はAndroidManifest.xml(基本的にはplatforms\android\app\src\mainにあるのでいいと思う)のmanifestの下あたりに
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
をつけてみてください

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

記事のタグから探す

月別アーカイブ

限定特典から探す

記事を検索