環境
- Android Studio
3.2.1
- プロジェクトのGradle Plugin:
3.1.2
現象
-
Android Studio 3.2.1でプロジェクトを初めて開くとエラーメッセージが表示された
- エラーの元はとgradleのようだ
- プロジェクトは3年以上前に作成された古いアプリ
- Android Studio 3.1でビルドはできていた
エラーログ
FAILURE: Build failed with an exception.
* What went wrong:
A problem occurred configuring root project 'my_android_project'.
> Could not resolve all files for configuration ':classpath'.
> Could not find lint-gradle-api.jar (com.android.tools.lint:lint-gradle-api:26.1.2).
Searched in the following locations:
https://jcenter.bintray.com/com/android/tools/lint/lint-gradle-api/26.1.2/lint-gradle-api-26.1.2.jar
classpath
が解決できてない?
lint-gradle-api.jar
とは一体なんだ...?
classpath という単語があるなら、トップレベルbuild.gradleが原因に違いない。
原因
このstackoverflowによると、トップレベルのbuild.gradleにある依存関係の宣言順が間違っている。
buildscript {
repositories {
jcenter()
google() // <=宣言順がおかしい
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
classpath 'com.google.gms:google-services:3.2.1'
}
}
allprojects {
repositories {
jcenter()
google() // <=同上
mavenCentral()
maven { url "https://maven.google.com" }
}
}
公式も順番は優先度に関係があると言っている。
Dependency order | Android Developers
日本語訳
最初のライブラリーは2番目のライブラリーよりも高い優先度を持ち、2番目のライブラリーは3番目のライブラリーより高い優先度を持ちます。
エラーログを見るに、
lint-gradle-api.jar (com.android.tools.lint:lint-gradle-api:26.1.2).
が https://jcenter.bintray.com/~
から検索したが見つからないと出ている。
おそらくlint-gradle-api.jar
はjcenter()
の中ではなく、google()
の中に含まれているんだろう。
それでこのようなエラーログが出ていると予想した。
解決策
google()
の宣言位置を一番上に移動させるだで解決した。
buildscript {
repositories {
google() // <=jcenterの前に移動
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
classpath 'com.google.gms:google-services:3.2.1'
}
}
allprojects {
repositories {
google() // <=同上
jcenter()
mavenCentral()
maven { url "https://maven.google.com" }
}
}
これは古いAndroid Studioで作成されたバージョンで発生する問題のようで、割と見かけるエラーなのかもしれない。
自分は初めて見たけどね。