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に書き加えるようにしてください。
# マイグレーションの方法
## 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 com.google.android.play.core.install.InstallState found in modules jetified-重複しているモジュール名-バージョン-...
```
こちらは使用しているライブラリが内部でplay coreライブラリを使用している場合に起こるエラーです。
社内の別部署で開発したライブラリ、第三者が提供しているライブラリなど、依存しているライブラリのさらにその内部で使用しているために発生します。
## 解決方法 1
下記のように全てのライブラリに対して表示されたモジュールを除く設定を記載すれば、エラーが解消されると思います。
```
dependencies {
    configurations {
        all {
            exclude group: "com.google.android.play", module: "core"
        }
    }
    
    ...
}
```
1回の設定で全てに適用できるため楽な反面、他の開発者に誤解を与えてしまう可能性や追加の設定を深く考えずにこちらに記載してしまう可能性があります。
## 解決方法 2
ライブラリの依存関係を洗い出し、必要なものにだけ設定する方法があります。これをするにはgradlewコマンドを打つ必要があり、これにはjavaが必要になります。
洗い出す方法に関しては[こちら](https://qiita.com/hkusu/items/b6dbb7f52512e36f1101)を参照してください！

洗い出したあとは必要なライブラリに対して設定を適用するだけになります。上記エラー内容の「重複しているモジュール名」に下記の「モジュール名」を書き換えてください。
```
dependencies {
    ...
    
    implementation('ライブラリA') {
        exclude group: "com.google.android.play", module: "core"
    }
    
    ...
}
```
メリットは、必要なライブラリにのみ記載するため混乱を招きにくいという点です。デメリットは場合によってはjavaのインストールが必要であることと、解決方法 1に比べると手間であるという点です。
# おわりに
何かありましたらお気軽にご連絡ください！
「いいね」もお願いします！！

個人ブログではQiitaに載せきれていない内容もあるので、ご興味ありましたら是非みてください！！

https://vegcale.com/