Closed9

古い Android アプリを API Level 33 (Tiramisu) でビルドするまでにやったこと

ピン留めされたアイテム
snakasnaka

背景

  • 自分自身は、8年くらい前に Unity でアプリ開発に関わったことがある程度で、Android まわりにはあまり詳しくない。
  • 諸々の事情で、とあるプロジェクトの Android アプリを API Level 30 → 33 まで上げる必要性がでてきた。
  • プロジェクトの開発環境に関する情報が少なく、あまりあてにならない状況。
snakasnaka

以前のアプリの状況

以下の環境でビルドしていた

  • Android 11 (R) - API Level 30
  • Android Studio 4.2.2
snakasnaka

Android Studio のバージョンを Framingo | 2022.1 にした

どうせ、今後もバージョンアップがあるのを見越して「とりあえず最新版を入れる」という選択肢もあるが、現状のアプリが対応していたバージョンとの乖離が大きいと、その分だけ非互換に対応する作業も増える可能性が高くなるため、必要最小限のバージョンとして Framingo を選択した。

バージョンの決定は、以下のページの「Android API レベルをサポートするツールの最小バージョン」で、
API Level 33 をサポートしている最小バージョンが Flamingo であることから。

https://developer.android.com/studio/releases?hl=ja#api-level-support

snakasnaka

Source option 6 is no longer supported. Use 7 or later というエラー

Project に含まれている Module の Source Compatibility / Target Compatibility の設定がなかったのが問題らしい。

File > Project Structure... を開き、 Modules > (対象モジュール) で、 Source Compatibility / Target Compatibility で 1.7 を選択した。

該当箇所の変更は build.gradle に反映された。

build.gradle
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_7
+        targetCompatibility JavaVersion.VERSION_1_7
+    }

これもまた、1.7 より新しいバージョンでも良さそうだが、今は非互換の対応を最小限に抑えたいので1.7とした。

snakasnaka

Installed Build Tools revision 33.0.2 is corrupted. Remove and install again using the SDK Manager. というエラー

どうやら、 Android Gradle Plugin が古く、新しい Build-Tools (v33.0.2) に対応していないのが問題らしい。

関連リンク:

https://stackoverflow.com/a/71844871/259829

上記のページでは、 build-tools/(version) の中の d8 というファイルを dx という名前にコピーするかシンボリックリンクする、みたいな対処法が上位に上がっているが、根本的には Android Gradle Plugin を対応するバージョンまで引き上げるのが得策と思われる。

Project Structure を開き Android Gradle Plugin Version と Gradle Version を引き上げた

このバージョンとした理由は、Android API レベルをサポートするツールの最小バージョン に、以下の記述があったことから AGP 7.2 を選択したが Gradle のバージョンはそれ以上を選択する必要があった。

差分

Project Structure の変更は以下の差分となった

build.gradle
    dependencies {
-        classpath 'com.android.tools.build:gradle:3.6.4'
+        classpath 'com.android.tools.build:gradle:7.2.2'
gradle/wrapper/gradle-wrapper.properties
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
snakasnaka

AGP のバージョンを上げると Gradle Sync でエラーが出る

発生したエラーは以下のとおり ( 一部改変 )

 Unnecessarily replacing a task that does not exist is not supported.  Use create() or register() directly instead.  You attempted to replace a task named '(task name)', but there is no existing task with that name.

原因

利用している Gradle Plugin のいずれかが古い Gradle の API を利用していて、Gradle の新しいAPIに対応していないことが原因らしい。

https://github.com/FibreFoX/javafx-gradle-plugin/issues/147

対応

問題となっている Gradle Plugin のバージョンを現在の Gradle に対応したバージョンまで上げる。

今回は Gradle DeployGate Plugin の問題だった ( StackTrace にそれっぽい情報があった ) ので、そのバージョンを上げることでエラーが解消した。

同じ理由で Google Services Gradle Plugin もバージョンを上げた

https://developers.google.com/android/guides/google-services-plugin

このスクラップは4ヶ月前にクローズされました