🐡

version catalogで@aar artifactを指定する

2023/02/02に公開

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がうまく依存関係を解決できなくなるようです。

参考

https://github.com/gradle/gradle/issues/21267

Discussion