対象APIレベル35(Android15)への更新時のエラー対応記録

※当サイトは、アフィリエイト広告を利用しています

エラー対応記録

Androidでは毎年恒例ですが、2025年8月31日期限の対象APIレベル更新作業(Android15・APIレベル35)の備忘録です。

 

Flutterで開発した複数のアプリで対応し、いずれも苦労しましたが、概ね対応パターンが整理できたので、来年以降の更新時の参考も兼ねて、内容を共有できればと思います。

 

自分のアプリの場合には、おおよそ以下のパターンで対応できました。

 

  • 「compileSdkVersion」、「targetSdkVersion」を35に上げる
  • 「gradle-wrapper.properties」、「settings.gradle」の設定バージョンを上げる
  • 「Android API 35」を完全インストール
  • 「Android NDK」のバージョン「26.1.10909125」をインストールして、「app/build.gradle」に設定を追記
  • エラーが出るパッケージのアップグレード(Javaのバージョン不整合、またはnamespace未指定への対応) ※ここでFlutter SDKのアップグレードが必要になると厄介
  • 「AndroidManifest.xml」にAdMob関連の設定を追記 ※AdMob使用時のみ 

 

以下、自分が対応した過程に沿って、詳細を記載します。

 

前提とする環境

  • PC:MacBook Pro(Intel Core i5)
  • OS:macOS Sonoma 14.5
  • Flutter:3.19.6 ※更新が必要になったケースあり(後述)
  • Android Studio:Koala 2024.1.1 Patch 1
  • Gradle関連の記述変更は対応済(下記公式ページの対応)

 

 

対応①:compileSdkVersion、targetSdkVersionを35にする

app/build.gradle」の「compileSdkVersion」、「targetSdkVersion」をいずれも35に修正しました。

 

すると、「targetSdkVersion 35」に赤波下線が出て、以下の警告文が表示されます。

 

 

しかし、これ自体は予防的なメッセージらしく、気にしなくて良いようです。

 

 

対応②:gradle-wrapper.properties、settings.gradleの設定バージョンを上げる

対応①の状態で、Androidでビルドすると、自分の場合は以下のエラーが出ました。

 

Execution failed for task ':app:processDebugResources'.
A failure occurred while executing com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask$TaskAction
Android resource linking failed
aapt2 E 07-07 ##:07:16 ##### 359821 LoadedArsc.cpp:94] RES_TABLE_TYPE_TYPE entry offsets overlap actual entry data.
aapt2 E 07-07 ##:07:16 ##### 359821 ApkAssets.cpp:149] Failed to load resources table in APK '/Users/####/Library/Android/sdk/platforms/android-35/android.jar'.
error: failed to load include path /Users/####/Library/Android/sdk/platforms/android-35/android.jar.

 

調査すると、下記情報が見つかりました。

 

 

Chat-GPTに尋ねても、類似の見解だったので、これらの情報に従って、

 

「android/gradle/wrapper/gradle-wrapper.properties」のバージョンを「8.9」に更新し、

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
# 元々の記述
# distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
# ↓こちらに更新 (「〜all.zip」でも良いが、「〜bin.zip」の方が、必要最小限で容量が少ない模様)
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip

 

「android/settings.gradle」の「plugins」ブロックの「com.android.application」のバージョンを「8.5.0」に更新しました。

plugins {
    id "dev.flutter.flutter-plugin-loader" version "1.0.0" // apply true

    // 元々の記述
    // id "com.android.application" version "7.3.0" apply false
    // ↓こちらに更新
    id "com.android.application" version "8.5.0" apply false

    id "org.jetbrains.kotlin.android" version "1.8.22" apply false
    id "com.google.gms.google-services" version "4.3.14" apply false
    id "com.google.firebase.crashlytics" version "2.8.1" apply false
}

 

対応③:「Android API 35」を完全インストール

Chat-GPTに尋ねると、Android Studio上で、「Android SDK」の「API 35」を完全インストールしておく必要がある、との指摘がありました。

 

確かに、「Android SDK」を確認すると、「Android API 35」が「Partially installed」になっており、完全インストールされていなかったので、下図のとおり、「Android API 35」にチェック→「Apply」→「OK」をして、インストールしました。

 

 

※これは一度実行すれば良いので、他のアプリで対応する際は不要になります。

 

※「APIレベル」が「35-ext14」、「35-ext15」というのもありますが、これらは、拡張機能が含まれる開発者プレビュー用らしいので、インストール不要でした。

 

対応④:「Android NDK」の該当バージョンをインストール

対応②・③を実施した上でビルドすると、今度は以下のエラーが出ました。

 

 

どうやら、バージョン「26.1.10909125」以上の「Android NDK」が必要なようです。

 

(参考:NDKとは)

Android NDKはAndroidアプリケーションのネイティブコードをC/C++で開発するためのツールキットです。AndroidプラットフォームのネイティブAPIにアクセスできるため、パフォーマンスが重要な部分をネイティブコードで実装することが可能になります。

出典:https://xexeq.jp/blogs/media/it-glossary929

 

調査すると、下記情報が見つかりました。

 

 

 

Chat-GPTにも尋ねたところ、上記記事の対応内容とほぼ同じだったので、これらに基づいて、以降の通り対応しました。

 

まずは、「Settings」の状況を確認すると、確かにバージョン「26.1.10909125」以上のNDKは、インストールされていませんでした。

 

そこで、下図の通り、バージョン「26.1.10909125」を選択して、インストールしました。

 

 

※当初、NDKのバージョン毎の表示が見当たらず、戸惑いましたが、「Settings」ダイアログ右下の「Show Package Details」にチェックを入れると、表示されました。

 

次に、「android/app/build.gradle」 の android ブロック内にて、バージョンを明記する形に修正しました。

 

android {
    compileSdkVersion 35

    namespace 'com.####.####'

    // ndkVersion flutter.ndkVersion
    // ↓バージョンを明記
    ndkVersion "26.1.10909125"

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = '1.8'
    }

    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }

  … (以下略)

 

対応⑤:エラーが出るパッケージのアップグレード

対応④を実施した上でビルドすると、今度は以下のエラーが出ました。

 

 

使っていた「flutter_archive」パッケージにおいて、Javaのバージョン不整合が生じているようです。

 

パッケージのアップグレードで対応できれば楽

Webの情報やChat-GPTを活用して、試行錯誤しましたが、結局のところ、

 

パッケージのバージョンを、できる限り最新版にアップグレードする(使っているFlutter SDKのバージョン内でエラーにならない範囲で)

 

ことで解消できました。

 

その後も、ビルドする度に、他のパッケージで同様のエラーが出ましたが、アップグレードして解消する、という対応を繰り返しました。

 

調査した情報(Chat-GPTからの提案含む)では、「android/app/build.gradle」の 「android」ブロック内で、下記のように、Javaのバージョンを17に揃える修正方法が見られましたが、他のパッケージのエラーでは「1.8」を求められる事があり、整合させる事が困難でした。

 

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }

    kotlinOptions {
        jvmTarget = "17"
    }
}

 

また、下記記事で提案されているように、「android/build.gradle」の「subprojects」ブロック内に、全ての下位モジュールに、Javaのバージョンを統一適用させる記述を加える方法も試しましたが、自分の場合はエラーを解消できませんでした。

※「flutter clean」、「gradlew clean」、「gradlew cleanBuildCache」など、キャッシュ削除系を実行してもエラーは変わらずでした。

 

 

別アプリのAPI35対応をしたときは、ここでのエラー内容が、Java関連ではなく、下記のように「namespace」未指定関連の場合もありました。

 

 

この場合も同様に、当該パッケージを可能な範囲で、最新版にアップグレードすることで解消できました。

   

アップグレードできない場合

エラーが出たパッケージについて、

  • 現状のFlutter SDKのバージョンでは、それ以上のアップグレードができない
  • そもそも現状以上のバージョンがリリースされていない(パッケージの更新停止など)

といったケースもありました。

 

その場合は、Flutter SDKのアップグレードや、他の類似パッケージへの変更が必要になり、長い旅になります。。

 

自分もこのパターンに陥ったアプリがあり、大変苦労しました。。

 

やむなくFlutter SDKをアップグレードしたケースについては、下記記事に続きを記載したので、よろしければご参照ください(Chat-GPTに聞いても解決できず、苦労しました。。)

 

   

対応⑥:「AndroidManifest.xml」にAdMob関連の設定を追記

AdMob広告(「google_mobile_ads」パッケージ)を導入している場合の話になります。

 

対応⑤を実施した上でビルドすると、今度は以下のエラーが出ました(なかなか終わりません…)。

 

 

調査すると、下記情報が見つかりました(Chat-GPTに尋ねても類似の見解でした)。

 

 

 

AdMobとGoogle Play Services関連のライブラリ間で、「AndroidManifest.xml」の要素に競合(同じ<property> 要素である「AD_SERVICES_CONFIG」を定義している)が発生しているようです。

 

これらの情報に基づいて、「AndroidManifest.xml」の冒頭「<manifest・・」タグ内に、下記の通り、「xmlns:tools="http://schemas.android.com/tools"」を追記しました。

 

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.XXXX.XXXX">

 

さらに、同じく「AndroidManifest.xml」「<application・・」タグ内に、下記内容を追記しました。

 

<application
…
       <property
           android:name="android.adservices.AD_SERVICES_CONFIG"
           android:resource="@xml/gma_ad_services_config"
           tools:replace="android:resource" />

</application>

 

以上で、ようやくビルドが成功し、アプリを起動できました(長かったです...)。

 

最後に

APIレベルを上げる対応では、毎年苦労します。。

 

Kotlinの更新、Android Gradle プラグインの更新、Javaの更新、各種パッケージのアップグレード、Flutter SDKのアップグレード・・・など影響範囲が多岐に渡るので、恥ずかしながら、何度やっても慣れないです。

 

対応⑤では、パッケージのアップグレードだけで対応できると良いですが、ダメな場合は、更に対応が続くことになります。。

 

※よろしければ、こちらもご参照下さい。

 

本記事が、どなたかのお役に立てば幸いです。

 

 

リリースしたアプリ(全てFlutterで開発)

 

個人アプリ開発で役立ったもの

おすすめの学習教材

超初心者向けでオススメな元Udemyの講座/

 

 \キャンペーン時を狙えば安価で網羅的な内容が学べる(日本語訳あり)/

 

\Gitの基礎について無料で学べる/

 

おすすめの学習書籍

実用的image_pickerに関してかなり助けられた/

 

Dartの基礎文法を素早くインプットできる/


Dart入門 - Dartの要点をつかむためのクイックツアー

コメント

タイトルとURLをコピーしました