🐡
version catalogで@aar artifactを指定する
Androidで既存のbuildSrcで、ライブラリなどの依存関係を指定している部分をversion catalogに置き換える際に、libs.versions.toml
を使用してライブラリの宣言をしていくと思うのですが、その時にimplementation("group:name:version@aar")
というパターンが、うまくビルドできず詰まったことがあったので、その解決策を今回は書いていきたいと思います。
どのようなエラーが発生するのか?
普通に、libs.versions.toml
で下記のように設定してbuildSrcから移行してみます。
libs.versions.toml
twitter = "3.3.0@aar"
twitter = { module = "com.twitter.sdk.android:twitter", version.ref = "twitter" }
implementation(libs.twitter)
すると以下のようなエラーが発生します。
Execution failed for task ':root:mergeDevelopDebugNativeLibs'.
> Could not resolve all files for configuration ':root:developDebugRuntimeClasspath'.
> Failed to transform growthbeat-android-2.0.11.jar (com.growthbeat:growthbeat-android:2.0.11) to match attributes {artifactType=android-jni, org.gradle.category=library, org.gradle.libraryelements=jar, org.gradle.status=release, org.gradle.usage=java-runtime}.
> Execution failed for JetifyTransform: /Users/s09225/.gradle/caches/modules-2/files-2.1/com.growthbeat/growthbeat-android/2.0.11/8b92596f6d52454fbdf5837f1ab413be139cf7aa/growthbeat-android-2.0.11.jar.
> Failed to transform '/Users/s09225/.gradle/caches/modules-2/files-2.1/com.growthbeat/growthbeat-android/2.0.11/8b92596f6d52454fbdf5837f1ab413be139cf7aa/growthbeat-android-2.0.11.jar' using Jetifier. Reason: ZipException, message: duplicate entry: androidx/core/R.class. (Run with --stacktrace for more details.)
Suggestions:
- Check out existing issues at https://issuetracker.google.com/issues?q=componentid:460323&s=modified_time:desc, it's possible that this issue has already been filed there.
- If this issue has not been filed, please report it at https://issuetracker.google.com/issues/new?component=460323 (run with --stacktrace and provide a stack trace if possible).
解決策
参考リンクに貼ってあるissueを見てもらうと全て解決するのですが、下記のようにすることでバージョンに@aar
がついていても指定ができて、ビルドできるようになりました。
twitter = "3.3.0"
twitter = { module = "com.twitter.sdk.android:twitter", version.ref = "twitter" }
build.gradle.kts
implementation(libs.twitter) {
artifact {
type = "aar"
}
}
上記のようにして、artifactを指定することで問題解決できました。
version catalogで宣言した場合、libs.versions.toml
でartifactタイプを一緒に宣言しようとすると、gradleがうまく依存関係を解決できなくなるようです。
参考
Discussion