【Flutter】「アプリは Android 14(API レベル 34) 以降を対象とする必要があります」とか言われる件
Google Play Console から
「アプリは Android 14(API レベル 34) 以降を対象とする必要があります。2024年8月31日より、最新の Android リリースから 1 年以内の API レベルを対象としていない場合は、アプリを更新できなくなります。」
というメッセージが送られて来た。
Google Play Consoleを開いて対処方法を見ても、具体的にどこをどう修正しろとは書いてない・・・
こちらとしては、そんなに古いバージョンまでサポートする必要ないし、そもそもGoogle Playに掲載できなくなるんなら、そりゃ古いバージョンは否応も無く動作対象外にせざるを得ない。
FlutterもDartも最新版に上げてあるし、Android Emulatorの動作チェックも最新版とその一個前くらいしかやってない。
って言うか、そもそもFlutterってGoogle社謹製なんだから、デフォルトでGoogle Play Consoleが受入れ可能なバージョンに上げといてくれちゃってればいいのに、なんでそうはなってないんだろ?
まぁそれはともかく・・・下記のようなサイトと記事を参考にさせてもらいました
早く答えを知りたい方は上のyuki katayamaさんのほうを見ていただくほうがいいのですが
自分用の備忘も兼ねて書いてます
で、android/app/build.gradleを見たら、こんなふうになってたんだよね
android {
...
defaultConfig {
...
minSdkVersion flutter.minSdkVersion
targetSdkVersion flutter.targetSdkVersion
...
}
minSdkVersion flutter.minSdkVersion
って数字書いてないじゃん
flutter.minSdkVersionってどこに定義してあるんだよプンスカ!!
ってなってさらに調べたら、
flutter/packages/flutter_tools/gradle/flutter.gradle
に書いてあるんだってさ
class FlutterExtension {
・・・
static int minSdkVersion = 16
・・・
じゃあこれを
class FlutterExtension {
・・・
static int minSdkVersion = 34
・・・
に直せばいいんでしょって思ったら、
ここでflutter.gradleのコードを直接変更すると、SDKのアップデートのたびに変更が必要となり、好ましくありません。そのためdefaultConfigの定義を書き換えることが一番簡単な修正方法となります。
って言うんで、それもそうだなっていうことで、結局今直してるアプリのandroid/app/build.gradleに戻って、
android {
...
defaultConfig {
...
- minSdkVersion flutter.minSdkVersion //この行をコメントアウト
+ minSdkVersion 34
targetSdkVersion flutter.targetSdkVersion
...
}
結局、yuki katayamaさんと同じ結論になりましたポリポリ( T_T)\(^-^ )
まとめると
アプリを作ったら毎回その時の最新APIバージョンの一個前の数字にして、
そのアプリは最低年1ペースでこの箇所を修正するようにする
新規アプリでもこれと同様のことを毎回してから
flutter clean
flutter build appbundle
して、
Google Play Consoleに送信するとイイよ
ってことらしいです
なんか、こういうのは自動化できたらいいのにな
あとついでながら、この箇所を修正すると当然ながら次のビルドを作ってアップロードしなくちゃいけないので、
android/app/build.gradleのこの箇所と、
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '7'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '2.0.2'
}
pubspec.yamlのこの箇所の番号を
version: 2.0.2+7
適宜インクリメントしなくちゃいけません
リリースしたアプリが何個もあるとそれなりにタイヘンですが、Googleさん的には「ちゃんと定期的にメンテナンスしろよ」ってことらしいので、まあしょうがないですね
と、ここまで書いといてナンなんだけど、そもそも1年以内に更新してるアプリだったら、タイトルのようなメールは飛んで来てない
たまたまこのアプリ、なんの不具合も機能追加もなく1年放置してしまったから、こんなことになってるんだよな
その一方で、Flutter SDKはちゃんとアップデートしてきた
そのFlutter SDKを見ると、
class FlutterExtension {
・・・
static int targetSdkVersion = 34
・・・
ってなってるんだけど、
これがもしかして、前にアプリをビルドした時に33になっていたのでは?
ということに思い至ったんだよね
と言うことはつまり、なんの不具合修正も機能追加も無くても、
ただ新しいSDKを使ってビルドをやり直せばイイんじゃね?
デフォルトでGoogle Play Consoleが受入れ可能なバージョンに上げといてくれちゃってればいいのに
とかなんとか言っちゃってたんだけど、実はちゃんとそうなってた!?
Flutter SDKさんゴメンよ・・・
新しいビルドをconsoleに登録するために、
android/app/build.gradleのこの箇所と、
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '7'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '2.0.2'
}
pubspec.yamlのこの箇所の番号を
version: 2.0.2+7
この部分だけ修正して、新しいSDKで
flutter clean
flutter build appbundle
して、
app-release.aabをGoogle Play Consoleにアップロードしてやれば、
それでイイんじゃね?
いちいち
minSdkVersion flutter.minSdkVersion
targetSdkVersion flutter.targetSdkVersion
こんなのイヂる必要無かったんじゃねぇの?
昨日consoleにアップ&公開はしたけど、targetSdkVersion = 34 が最終的にOKになったのかわからないので、ちょっとモヤモヤしてるんだけどねぇ・・・・
もしこれが正解なんだったら、
Googleさん、それ早く言ってよ・・・・😅
松重豊さんのあの表情が目に浮かぶ
その後、本当の解決・・・
ホントウの問題はそこじゃなくて、最初期の「内部テスト」リリースを公開したまま(もう本番リリースしたしOKでしょ、と思い込んで放置してた)になってたことだった・・・。Google Play Consoleでは一度公開リリースしてしまうとリリースの削除ができない(「公開したくないリリースを破棄できるようになりました」って書いてあるのは公開前だけの話)ので、またもやしばらく悩んでしまったんだけど、「トラックを一時停止」というボタンを見つけて押したら、上記の解決メールが来た
一時停止でいいのかよ・・・・
そっちだったんかよ・・・・
ここまでの苦労はなんだったんだよ・・・・
Googleさん、それならそうと、早く言ってよ・・・・😅part2
そうして今日も疲労困憊ル
Discussion