最近の AndroidStudio のアップデートで、新規にプロジェクトやモジュールを作った時、モジュール直下に libs ディレクトリが作られるようになりました。このおかげで、ADT 時代のように、jar を直接ぶち込んでパスを通すという作業が簡単になりました。
この libs ディレクトリは、ライブラリプロジェクトでも使うことができます。どの種類のモジュールでも、以下のようにしておくだけでパスが通ります。
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
さて、jar が libs ディレクトリにぶち込まれるということは、ADT 時代のような悪夢が再来するということになります。
つまり、ライブラリプロジェクトが保持している jar と、sha1 ハッシュの異なる jar をアプリケーションプロジェクトでも保持してしまうと怒られたり、ライブラリプロジェクトが保持している jar と同じものをアプリケーションプロジェクトが保持すると怒られたり(名前空間の衝突)します。
maven repo への依存を記述すているものは、アプリケーションプロジェクトで全てが解決されるのでこのようなことは起こりません。逆に言えば、github repo に maven repo があるものに依存するライブラリを使うときは、アプリケーションプロジェクト側でもその github repo にある maven repo のことを知らせないといけないということでもあります。
現状のビルドツールでは、ライブラリが持つ jar とアプリケーションプロジェクトが持つ jar を見分けていい感じに解決してくれるような機能は無いようなので、ライブラリプロジェクトで jar を持つのは余程のことがない限りしないほうが良さそうに思いました。