ビルドできない
Androidアプリを作ろうと思い、早速ビルドを行うと問題が発生した。
以下のようなエラーが発生。
Dependency 'androidx.activity:activity:1.8.0' requires libraries and applications that
depend on it to compile against version 34 or later of the
Android APIs.
:app is currently compiled against android-33.
翻訳すると、
androidx.activity:activity:1.8.0'に依存するライブラリとアプリケーションは、
バージョン34以降でコンパイルする必要があります。
依存するライブラリとアプリケーションは、バージョン34以降でコンパイルする必要があります。
に対してコンパイルする必要があります。
現在、アプリはandroid-33に対してコンパイルされています。
言うことを聞いてみる
app配下にあるbuild.gradle.ktの数値を変えて、バージョンを変えてみる。
compileSdk = 34
targetSdk = 34
に変更。
sdkのバージョン変更後
コードを確認すると、targetSdkの方に赤い波線がでてしまう。
エラーの内容は以下の画像の通り。
ドキュメントを参照すると、仮想デバイスのAPIレベルが足りていないと書かれていた。
ドキュメントはこちら
そこで、APIレベルが34以上の仮想デバイスをインストールした。
それぞれ変更した変数の役割について
そもそも何を変更したのかわからない。なんでうまくいったのかを調べるためにまずは変更した変数の意味を調べた。
compileSDK
compileSdkVersion specifies the Android API level Gradle should use to compile your app. This means your app can use the API features included in this API level and lower.
compileSdkVersionは、Gradleがアプリをコンパイルする際に使用するAndroid APIレベルを指定します。これは、アプリがこのAPIレベル以下に含まれるAPI機能を使用できることを意味します。
コンパイルに使うSDKのバージョン。新しい機能を使えるようにするため、基本的には現時点での最新を指定する。
minSdk
Defines the minimum API level required to run the app.
アプリの実行に必要な最低限のAPIレベルを定義します
アプリの最低OSバージョン。
古いOSをサポートする場合、この値を小さくする。
targetSdk
Specifies the API level used to test the app.
アプリのテストに使用するAPIレベルを指定します。
問題のやつ。翻訳してもよくわからなかったので、調べたところわかりやすい説明があったため引用しました。
アプリを動作させるAPIレベルを指定します。compileSdkと同じく基本的には現時点での最新を指定すればいいですが、例えばAndroid 12(APIレベル31)対応が完了していない場合、targetSdkを30に指定すればAndroid 12でも11のように振る舞う、ということです。
参考:https://qiita.com/uhooi/items/0f2ad61d83b96d9166c8
targetSdkを33にする
これは、実行時にどのOSバージョンの互換モードで動かすかの指定。
だからここは最新ではなくてもよい。
バージョンを以下のように修正し
compileSdk = 34
targetSdk = 33
ビルドをし直すと、うまく動作した!
内容についての指摘や追加情報等ございましたら、コメントで教えていただけますと幸いです。