Android Studioで新規プロジェクトを作成した場合に、setting.gradle.ktsのpluginManagementが以下のように作成されるようになっています。
pluginManagement {
repositories {
google {
content {
includeGroupByRegex("com\\.android.*")
includeGroupByRegex("com\\.google.*")
includeGroupByRegex("androidx.*")
}
}
mavenCentral()
gradlePluginPortal()
}
}
Gradleでは複数のリポジトリが記述されている場合、先頭から順にリクエストし、エラーとなった場合は次のリポジトリにリクエストする、という検索が行われます。ネットワークリクエストを伴うためコストが大きく、リポジトリやライブラリの数が増えていくとどんどん効率が悪くなってしまいます。できれば不要なネットワークリクエストは行いたくないものです。
そこで、ライブラリを検索する条件を設定して、条件に合致しない場合はそもそもリクエストを行わないようにすることでビルドの効率を上げることができます。
条件設定方法
include条件とexclude条件を設定することができます。
include条件に該当したものの中からexclude条件に該当したものを除いたものが、そのリポジトリにあると見なされます。
デフォルトはすべてをincludeし、excludeなしの状態ですね。
フィルタリング条件は様々ありますが、通常はライブラリのGroupIDで条件振り分けをすることになるでしょう。
ここでは省略しますが、同一のGroupIDで複数のリポジトリにArtifactが配置されているもの、同一のライブラリで、バージョンによってリポジトリが異なる、という場合もあり得ることです。その場合も指定する手段は用意されています。
includeGroup
/excludeGroup
GroupIDを直接指定します。
includeGroupByRegex
/excludeGroupByRegex
GroupIDを正規表現で指定します。正規表現になれていないと間違った指定をしてしまいがちでもあります。
includeGroupAndSubgroups
/excludeGroupAndSubgroups
前述の正規表現は少し使用の難易度が高いですが、ほとんど場合で正規表現を用いるのは、そのグループおよびそのサブグループ全体(org.gradle
自体およびorg.gradle.XXX
全体)を指定したい場合であるということで、Gradle 8.1から追加された指定方法です、まだ@Incubating
がついていますが、特別不安定というわけではなさそうで、ほとんどの場合、これを使えば問題無く指定できると思います。
android開発ではgoogleのリポジトリは必須で使いますので、概ね以下のような指定になると思います。
pluginManagement {
repositories {
google {
content {
includeGroupAndSubgroups("com.android")
includeGroupAndSubgroups("com.google")
includeGroupAndSubgroups("androidx")
}
}
mavenCentral()
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google {
content {
includeGroupAndSubgroups("com.android")
includeGroupAndSubgroups("com.google")
includeGroupAndSubgroups("androidx")
}
}
mavenCentral()
}
}
そのほか業務での開発なら社内でのみ利用するリポジトリなどがあると思いますので、それらに適切な条件を設定して無駄な検索が行われないようにすると良いでしょう。
以上です。