Android API Level31以上に対応する(QuasarとCapacitor4を利用)
少し前からGoogle PlayStoreはAPI Level 31以上を必須としました。 Quasar Frame workを使って API Lv31以上のAABを作成してPlay Storeにアップロードするまでに至った手順を紹介します。 色々手間取りましたが無事提出できました。とりあえず以下の作業を進める前に別ブランチで作業することを推奨します。
Capacitor4を使う
API LV31以上に対応するにはCapacirot4に更新します。しかしQuasarの公式サイトにはCapacitor4に関する言及がありません。 記事はCapacitor3で止まっています。サポートされていないように見えますが、Capasitor4でも動作しました。
具体的なフロー
いつものようにQuasarからAndroidのビルドを行います.
src-capacirorフォルダを開き、package.jsonを修正します。 capacitorのバージョンを4以上にします。
変更したら作業ディレクトリを移動し、最新版に更新します
src-capacitor内で以下のコマンドを入力します。以下の処理は若干時間がかかります。
Capacitorの公式移行ガイドも参照してください。
migrate中にエラーが発生する場合は、エラー内容を確認してください。 私の環境では以下のようなエラーが発生しました。
java 11を使えということですね。 Android Studio -> Preferenceを開きます。 Build, Execution, Deploymentを開き、Build tools -> Gradleの順にアクセスします。
Gradle JDKを11に修正します。 修正後に再び同じコマンドを入力します。
エラーが出なくなれば成功です。
android studio上での作業
npx cap openでAndroid Studioを立ち上げます。起動と同時にビルド処理?が始まりますが、ここでエラーが発生することがあります。
Android StudioでGradle sync failed: Timeout waiting to lock journal cacheというエラーが出る場合は、前回のビルドのキャッシュが原因で失敗しています。 プロセスを終了して再実行すれば改善される可能性が高いです。
/Users/ユーザ名/.gradle/caches/journal-1/journal-1.lockというファイルを削除してしまえばOKです。 または
とすることでも解消できます。AABファイルとしてビルドする手順についてはAndroidビルドの記事を参照してください。
詳しい原因は不明ですが、ビルドを終えてPlay StoreにUPすると「APIレベル22を対象としています」と表示されます。
以前は「APIレベル30を対象としています」だったのでむしろ悪化したような感じですね。 valiables.gradleでは以下のようになっています
何故かminSDKを31にしてもこの問題は解決しませんでした。 build.gradleの方で直接バージョンを指定することでこの問題は解決できました。(反映が遅れただけなのか?)
これで再度ビルドし、アップロードしたところ無事にAPI Lv31を対象とすることができました。
最後に
AndroidのAPILv31については当初ビルドが失敗して色々調べました。Quasarでは次のようなPull Requestがあります。 このプルリクが実装されればもう少しスマートに移行できたかもしれません。ただ更新が止まっているためこのプルリクが実装される見込みは低そうです。 また、IssueにもAPI Lv31に関する議題があがっていました。
今回は色々試行錯誤して問題が解決できましたが、この辺の手順を公式Quasarでしっかり書いてくれないので使う側は色々調べ回る必要があるのが辛いところですね。