最近、Android Gradleプラグイン3.0.0-alpha4を現在使用しているAndroid Studioの最新Canaryビルドをインストールしました。
エラーが発生しました:
Error:Failed to resolve: Could not resolve project :MyLib.
Required by:
project :app
私は読んだ: ローカルモジュールの依存関係設定を移行する
dependencies { // This is the old method and no longer works for local // library modules: // debugCompile project(path: ':foo', configuration: 'debug') // releaseCompile project(path: ':foo', configuration: 'release') // Instead, simply use the following to take advantage of // variant-aware dependency resolution. You can learn more about // the 'implementation' configuration in the section about // new dependency configurations. implementation project(':foo') // You can, however, keep using variant-specific configurations when // targeting external dependencies. The following line adds 'app-magic' // as a dependency to only the 'debug' version of your module. debugImplementation 'com.example.Android:app-magic:12.3' }
私が変更され:
releaseCompile project(path: ':MyLib', configuration: 'appReleaseApp')
debugCompile project(path: ':MyLib', configuration: 'appDebug')
に:
implementation project(':MyLib')
しかし、私はまだこのエラーがあります:Error:Failed to resolve: Could not resolve project :MyLib.
lib gradle:
apply plugin: 'com.Android.library'
Android {
publishNonDefault true
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
minSdkVersion 14
targetSdkVersion 25
}
buildTypes {
debug {
...
}
releaseApp {
...
}
releaseSdk {
...'
}
}
flavorDimensions "default"
productFlavors {
flavor1{
...
flavor2{
...
}
flavor3{
...
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.Android.support:appcompat-v7:25.3.1'
compile 'com.Android.support:support-v4:25.3.1'
compile 'com.google.code.gson:gson:2.8.0'
compile 'com.google.Android.gms:play-services-maps:10.2.6'
compile 'com.google.Android.gms:play-services-gcm:10.2.6'
compile 'com.google.Android.gms:play-services-location:10.2.6'
}
apply plugin: 'maven'
uploadArchives {
repositories {
mavenDeployer {
repository(url: mavenLocal().url)
}
}
}
アプリのグラドル:
apply plugin: 'com.Android.application'
Android {
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
vectorDrawables.useSupportLibrary = true
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
minSdkVersion 19
targetSdkVersion 25
versionCode 12
versionName "5.0.2"
}
buildTypes {
release {
...
}
debug {
...
}
}
flavorDimensions "default"
productFlavors {
flavor1 {
...
}
flavor2 {
...
}
}
testOptions {
unitTests {
all {
jvmArgs '-noverify'
systemProperty 'robolectric.logging.enable', true
}
}
}
}
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
// releaseCompile project(path: ':MyLib', configuration: 'appRelease')
// debugCompile project(path: ':MyLib', configuration: 'appDebug')
implementation project(':MyLib')
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.Android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.Android.support', module: 'support-annotations'
})
compile 'com.google.Android.gms:play-services-maps:10.2.6'
compile 'com.google.Android.gms:play-services-location:10.2.6'
compile 'com.google.Android.gms:play-services-analytics:10.2.6'
compile 'com.google.Android.gms:play-services-gcm:10.2.6'
compile 'com.google.code.gson:gson:2.8.0'
compile 'com.Android.support:appcompat-v7:25.3.1'
compile 'com.Android.support:design:25.3.1'
compile 'com.Android.support:support-v4:25.3.1'
compile 'com.Android.support:cardview-v7:25.3.1'
compile 'com.Android.support:gridlayout-v7:25.3.1'
compile 'com.Android.volley:volley:1.0.0'
compile 'com.facebook.stetho:stetho:1.4.1'
compile 'com.facebook.stetho:stetho-okhttp3:1.4.1'
compile 'com.Android.support:percent:25.3.1'
compile 'com.Android.support:recyclerview-v7:25.3.1'
compile 'com.squareup.picasso:picasso:2.5.2'
testCompile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-core:2.1.0'
testCompile 'org.robolectric:robolectric:3.1.4'
testCompile 'org.assertj:assertj-core:1.7.1'
compile 'com.flipboard:bottomsheet-core:1.5.0'
compile 'com.flipboard:bottomsheet-commons:1.5.0'
compile 'com.Android.support.constraint:constraint-layout:1.0.1'
}
apply plugin: 'com.google.gms.google-services'
助けてください
Googleはそれを解決する方法をさらに追加しました: 依存関係のマッチングに関連するビルドエラーを解決する
ビルドエラーの原因:
アプリには、ライブラリの依存関係にはないビルドタイプが含まれています。
たとえば、アプリには「ステージング」ビルドタイプが含まれますが、依存関係には「デバッグ」および「リリース」ビルドタイプのみが含まれます。
ライブラリの依存関係にアプリにないビルドタイプが含まれている場合、問題はありません。これは、プラグインが依存関係からそのビルドタイプを要求することがないためです。
解像度
次のように、matchingFallbacksを使用して、特定のビルドタイプの代替一致を指定します。
// In the app's build.gradle file.
Android {
buildTypes {
debug {}
release {}
staging {
// Specifies a sorted list of fallback build types that the
// plugin should try to use when a dependency does not include a
// "staging" build type. You may specify as many fallbacks as you
// like, and the plugin selects the first build type that's
// available in the dependency.
matchingFallbacks = ['debug', 'qa', 'release']
}
}
}
同じ問題に直面した後、私は最終的にAppとModulesのbuild.gradleファイルの両方でまったく同じbuildTypesを宣言しました。
あなたの場合、追加
buildTypes {
debug {}
releaseApp {}
releaseSdk {}
}
モジュールのbuild.gradleにトリックを行う必要があります。
「コンパイルプロジェクト」も「実装プロジェクト」に変更してください。
それが役に立てば幸い
新しいプラグインでは、バリアントに対応した依存関係の解決
implementation project(':MyLib')
ビルドタイプが完全に一致する必要があります。 移行ガイドでこれについて説明しています
たとえば、プロデューサーとコンシューマーが一致しないため、このメカニズムを介して「デバッグ」バリアントに「リリース」バリアントを消費させることはできません。 (この場合、「デバッグ」という名前は、「公開の依存関係」セクションで前述した公開された構成オブジェクトを指します。)コンパイル用とランタイム用の2つの構成を公開しました。 tはもう機能しません。
だから古い方法
releaseCompile project(path: ':foo', configuration: 'debug')
もう機能しません。
あなたの例では、これは次のようになります。
アプリbuild.gradle
で:
apply plugin: 'com.Android.application'
Android {
buildTypes {
debug {}
releaseApp {}
releaseSdk {}
}
...
dependencies {
implementation project(':MyLib')
}
}
Module/lib 'MyLib' build.gradle
で:
apply plugin: 'com.Android.library'
Android {
buildTypes {
debug {}
releaseApp {}
releaseSdk {}
}
}
したがって、ビルドタイプはexactlyと一致する必要があります。
サブモジュールがビルドタイプを定義しない場合、「matchingFallbacks」と呼ばれる新しい機能を使用してデフォルトのビルドタイプを定義できます。
MatchingFallbacksを使用して、特定のビルドタイプの代替一致を指定します(...)
たとえば、module/lib 'MyLib' gradleが次のようになっている場合:
apply plugin: 'com.Android.library'
Android {
buildTypes {
debug {}
releaseLib {}
}
}
アプリbuild.gradle
で次を定義できます。
apply plugin: 'com.Android.application'
Android {
buildTypes {
debug {}
releaseApp {
...
matchingFallbacks = ['releaseLib']
}
releaseSdk {
...
matchingFallbacks = ['releaseLib']
}
}
...
dependencies {
implementation project(':MyLib')
}
}
DefaultConfigブロックでmissingDimensionStrategyを使用して、プラグインが欠落している各ディメンションから選択するデフォルトのフレーバーを指定します
Android {
defaultConfig {
missingDimensionStrategy 'minApi', 'minApi18', 'minApi23'
...
}
}
このソリューションは私のために働いた。 Android Studio 3.1.2を使用しています。 Android Gradleプラグイン3.1.2。 Gradle 4.4。 trial
やpremium
などのフレーバーを持つライブラリモジュールがあります。 Android Gradleプラグイン3.1.2への移行プロセスの一環として、ライブラリモジュールのgradleビルドファイルにmain
のフレーバーディメンションを追加しました。したがって、アプリのbuild.gradle
ファイルでビルドエラーを修正するために、以下を変更しました。
debugImplementation project(path: ':library', configuration: 'premiumDebug')
releaseImplementation project(path: ':library', configuration: 'premiumRelease')
なりました
implementation project(':library')
defaultConfig
ブロックに次の行を追加しました:missingDimensionStrategy 'main', 'premium'
今日、Android Studio 3に移行した後も同じ問題が発生しました。問題は、ネットワークの問題により、gradleが特定のライブラリを解決できないことです。理由はさまざまです。プロキシの背後で作業する場合は、gradle.propertiesファイルにプロキシパラメータを追加する必要があります。
systemProp.http.proxyHost=<proxy_Host>
systemProp.http.proxyPort=<proxy_port
systemProp.https.proxyHost=<proxy_Host>
systemProp.https.proxyPort=<proxy_port>
私の場合、もう1つ問題がありました。私の会社は自己署名SSL証明書を使用しているため、SSL接続に問題がありました。同じことが当てはまる場合は、次のようにgradle.propertiesファイルでパラメーターを再度設定できます。
org.gradle.jvmargs=-Djavax.net.ssl.trustStore="/usr/lib/jvm/Java-8-Oracle/jre/lib/security/cacerts" -Djavax.net.ssl.trustStoreType=JKS -Djavax.net.ssl.keyStorePassword=changeit
より明確にするには、Android Studioのメッセージログで[詳細を表示]リンクをクリックします。このログは、実際の問題を判断するのに役立ちます。
私は同じ問題に直面していました、この移行ページを見つけました: 一致するタイプをビルド
状態:
見つからないビルドタイプのデフォルトを選択します
プロデューサーが構成しないビルドタイプをコンシューマが構成する場合、コンシューマのビルドタイプをプロデューサからのビルドタイプに手動で一致させる必要があります。たとえば、アプリモジュールが「ステージング」ビルドタイプを構成し、そのライブラリモジュールの依存関係「mylibrary」が構成しない場合、Androidプラグインは次のビルドエラーをスローします。
Error:Failed to resolve: Could not resolve project :mylibrary.
Required by: project :app
このエラーを解決するには、Androidプラグインがアプリの "ステージング"ビルドタイプと一致する必要がある "mylibrary"のビルドタイプを指定する必要があります。これは、以下に示すように、アプリのbuild.gradleファイルのbuildTypeMatchingプロパティを使用して実行できます。
// Add the following to the consumer's build.gradle file.
Android {
...
// Tells the Android plugin to use a library's 'debug' build type
// when a 'staging' build type is not available. You can include
// additional build types, and the plugin matches 'staging' to the
// first build type it finds from the one's you specify. That is,
// if 'mylibrary' doesn't include a 'debug' build type either, the
// plugin matches 'staging' with the producer's 'release' build type.
buildTypeMatching 'staging', 'debug', 'release'
}
BuildTypeMatchingを追加すると、ライブラリに不要なタイプを作成せずに修正されました