Clean Architecture, Clean Life

仕事・個人での技術的なことつぶやきます

【Android】【Gradle】ライブラリ間の依存関係に関して

経緯

ローカルからAARファイルを読み込む際に、謎のエラーが発生したのでこちらに備忘録として記載しておく

結論

1.maven経由時はimplement時にtransitiveオプションを付けることで依存関係を解決できる

2.ローカルからAARファイルを読み込む場合は依存関係を含んでいないので自力で解決する必要がある

順番に解説します

maven経由時はimplement時にtransitiveオプションを付けることで依存関係を解決できる

これはそのままです

ライブラリ内の依存関係に関しては下記のようにtransitiveオプションを付けることで解決できます

implement ('com.example.sdk.android:1.0.0@aar') {
    transitive = true;
}

実際に、

「プロジェクトではRxJava3のライブラリ使っていたんですが、別のライブラリではRxJava2をつかっていた」

ということがありました

基本的にはライブラリの参照元でこういうふうに書いてね、と記載があるのでそれに従っていれば問題ないと思います (つまり私は見逃していたということ・・・)

問題は次です

ローカルからAARファイルを読み込む場合は依存関係を含んでいないので自力で解決する必要がある

その名の通り、ローカルの場合はtransitiveオプションが使えません

解決策としては

  • 提供元にMaven Repositoryを立ち上げてもらうように依頼する
  • すべての依存関係を洗い出す

の2つになるかと思います

自分で作ったライブラリなら特に問題はない(とはいっても、きちんと管理しておくに越したことはないけど)とは思いますが、外部から提供してもらったものに関してはややこしいですねー

Maven経由でできませんか?と依頼して、だめって言われたらせめて依存関係くらいは~(お通並感)と依頼してみるしかないと思われます

それすらしてくらないなら、ライブラリの選定から見直したほうがいいんじゃないですかね?

正直ライブラリが更新されるたびに依存関係見直すとかやってられないと思うので

では、同じ問題にぶち当たってる方、ご検討を祈ります()

参考記事:

stackoverflow.com

stackoverflow.com