Android / Kotlin / Programming

play coreのSDK34+警告について

エラー(警告)について

com.google.android.play:core has added this note for core:バージョン:

If your app is targeting SDK 34+ (targetSdkVersion), then the PlayCore SDK is outdated and will likely cause crashes in your app! Please update: developer.android.com/guide/playcore#playcore-migration

こちらの警告は、このメッセージが表示されているアプリがplay coreというgoogle提供のライブラリを使用している場合に表示されます
「Please update: 」の後のURLに記載がありますが、この警告が表示されるようになった理由はplay coreライブラリが複数のライブラリに分かれたのが原因になっています

下記ではマイグレーションの手順と出くわす可能性のあるエラーについて書いていますが、マイグレーションについては必要なライブラリのみをdependenciesに書き加えるようにしてください

マイグレーションの方法

全てGoogle公式の手順を簡潔に書いるだけなので、ぜひ本家も参照してください!

tasksインポートの変更(使用していれば)

全ファイル内の最上部にplay.core.tasks.XXXXという表記のあるものは下記のように変更します

import com.google.android.gms.tasks.*;

// import com.google.android.play.core.tasks.AAAAA;
// のAAAAAは変更せずに
// import com.google.android.gms.tasks.AAAAA;
// と変更する

play coreライブラリの削除

build.gradle (:app)の下の方に「dependencies {」で始まる記載があると思います
ここから以降は、全てその中での作業になります

まずは今回のマイグレーションで不要になるplay coreライブラリの削除を行います
下記の表記のライブラリを見つけ削除してください

dependencies {
    ...
    
    // implementation 'com.google.android.play:core:バージョン' // 削除する

    ...
}

Play Asset Delivery Libraryの追加

dependencies {
    ...
    
    implementation 'com.google.android.play:asset-delivery:2.2.2'

    // For Kotlin users also add the Kotlin extensions library for Play Asset Delivery:
    // Kotlin用のPlay Asset Delivery
    implementation 'com.google.android.play:asset-delivery-ktx:2.2.2'
    
    ...
}

Play Feature Delivery Libraryの追加

dependencies {
    ...
    
    implementation 'com.google.android.play:feature-delivery:2.1.0'

    // For Kotlin users, also add the Kotlin extensions library for Play Feature Delivery:
    // Kotlin用のPlay Feature Delivery
    implementation 'com.google.android.play:feature-delivery-ktx:2.1.0'
    
    ...
}

Play In-App Review Libraryの追加

dependencies {
    ...
    
    implementation 'com.google.android.play:review:2.0.1'

    // For Kotlin users, also add the Kotlin extensions library for Play In-App Review:
    // Kotlin用のPlay In-App Review
    implementation 'com.google.android.play:review-ktx:2.0.1'
    
    ...
}

Play In-App Update Libraryの追加

dependencies {
    ...
    
    implementation 'com.google.android.play:app-update:2.1.0'

    // For Kotlin users, also add the Kotlin extensions library for Play In-App Update:
    // Kotlin用のPlay In-App Update
    implementation 'com.google.android.play:app-update-ktx:2.1.0'
    
    ...
}

出くわす可能性のあるエラー

上記変更を加えてSyncを押すと下記エラーが発生する可能性があります!

Duplicate class エラー

内容

Duplicate class com.google.android.play.core.install.InstallState found in modules jetified-重複しているモジュール名-バージョン-...

原因

こちらは使用しているライブラリが内部でplay coreライブラリを使用している場合に起こるエラーです

社内の別部署で開発したライブラリ、第三者が提供しているライブラリなど、依存しているライブラリのさらにその内部で使用しているために発生します

解決方法 1

全てのライブラリに対して表示されたモジュールを除く設定を記載する

下記のようにcoreモジュールを指定すればエラーが解消されると思います

dependencies {
    configurations {
        all {
            exclude group: "com.google.android.play", module: "core"
        }
    }
    
    ...
}

メリットは、1回の設定で全てに適用できるため楽です
デメリットは、他の開発者に誤解を与えてしまう可能性や追加の設定を深く考えずにこちらに記載してしまう可能性があります

解決方法 2

ライブラリの依存関係を洗い出し、必要なものにだけ設定する

ライブラリの依存関係を洗い出すにはgradlewコマンドを打つ必要があり、これにはjavaが必要になります
洗い出す方法に関してはこちらを参照してください!

洗い出したあとは必要なライブラリに対して設定を適用するだけになります
上記エラー内容の「重複しているモジュール名」に下記の「モジュール名」を書き換えてください

dependencies {
    ...
    
    implementation('ライブラリA') {
        exclude group: "com.google.android.play", module: "core"
    }
    
    ...
}

メリットは、必要なライブラリにのみ記載するため混乱を招きにくいという点です
デメリットは場合によってはjavaのインストールが必要であることと、解決方法 1に比べると手間であるという点です

おわりに

Google公式の手順に従いマイグレーションを行えば問題ないとは思いますが、実際のところの影響範囲は、私の知識不足も相まり、詳しくはわかりません
特にライブラリ内部でplay coreに依存しているものの調査も工数がかなりかかると思います

もし知識や経験がある方がいらっしゃればご教授いただければと思います🙇
また、質問等があればお気軽にコメントまでお願いいたします!🙇‍♂

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です