Bar*_*ica 13 android gradle build.gradle android-gradle-plugin
决定从 Android gradle 插件 3.5.x 切换到 Gradle 6.5 的 gradle 插件 4.10 并坚持错误。
这是我的 build.gradle
defaultConfig {
applicationId "com.example.myapp
targetSdkVersion targetSdkVersionVar
multiDexEnabled true
}
flavorDimensions "version"
productFlavors {
kitkat {
sourceSets { "src/android/kitkat" }
dimension "version"
minSdkVersion minSdkKitkat
targetSdkVersion targetSdkKitkat
versionNameSuffix "-kitkat"
}
nougat {
sourceSets { "src/android/nougat" }
dimension "version"
minSdkVersion minSdkNougat
targetSdkVersion targetSdkVersionVar
versionNameSuffix "-nougat"
}
}
buildTypes {
debug {
multiDexKeepFile file('multidex-config.txt')
multiDexKeepProguard file('multidex-config.pro')
minifyEnabled false
zipAlignEnabled true
sourceSets {
//main.java.srcDirs += 'src/main/kotlin'
main {
java.srcDirs = ['src/android/default/java/', 'src/common/java/']
jni.srcDirs = [] //disable ndk support
manifest.srcFile 'src/android/default/AndroidManifest.xml'
resources.srcDirs = ['src/android/default']
aidl.srcDirs = ['src/android/default']
renderscript.srcDirs = ['src/android/default']
res.srcDirs = ['src/android/default/res']
assets.srcDirs = ['src/android/default/assets']
}
test {
java.srcDirs = ['src/test/java']
}
androidTest {
java.srcDirs = ['src/androidTest/java']
}
}
}
release {
multiDexKeepFile file('multidex-config.txt')
multiDexKeepProguard file('multidex-config.pro')
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
zipAlignEnabled true
sourceSets {
main {
java.srcDirs = ['src/android/default/java/', 'src/common/java/']
jni.srcDirs = [] //disable ndk support
manifest.srcFile 'src/android/default/AndroidManifest.xml'
resources.srcDirs = ['src/android/default']
aidl.srcDirs = ['src/android/default']
renderscript.srcDirs = ['src/android/default']
res.srcDirs = ['src/android/default/res']
assets.srcDirs = ['src/android/default/assets']
}
test {
java.srcDirs = ['src/test/java']
}
androidTest {
java.srcDirs = ['src/androidTest/java']
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
尝试构建我收到以下错误消息:
Could not determine the dependencies of task ':app:checkKitkatReleaseLibraries'.
> Could not resolve all task dependencies for configuration ':app:kitkatReleaseReverseMetadataValues'.
> Could not resolve project :app.
Required by:
project :app
> The consumer was configured to find a usage of 'android-reverse-meta-data' of a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'release', attribute 'version' with value 'kitkat'. However we cannot choose between the following variants of project :app:
- kitkatDebugAndroidTestCompile
- kitkatDebugAndroidTestRuntime
- kitkatDebugRuntime
- kitkatDebugUnitTestCompile
- kitkatDebugUnitTestRuntime
- kitkatReleaseRuntime
- kitkatReleaseUnitTestCompile
- kitkatReleaseUnitTestRuntime
- nougatDebugAndroidTestCompile
- nougatDebugAndroidTestRuntime
- nougatDebugRuntime
- nougatDebugUnitTestCompile
- nougatDebugUnitTestRuntime
- nougatReleaseRuntime
- nougatReleaseUnitTestCompile
- nougatReleaseUnitTestRuntime
All of them match the consumer attributes:
- Variant 'kitkatDebugAndroidTestCompile' capability myapp:app:unspecified:
- Unmatched attributes:
- Doesn't say anything about com.android.build.api.attributes.BuildTypeAttr (required 'release')
- Doesn't say anything about its usage (required a usage of 'android-reverse-meta-data')
- Provides attribute 'org.jetbrains.kotlin.localToProject' with value 'local to :app' but the consumer didn't ask for it
- Provides attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm' but the consumer didn't ask for it
- Doesn't say anything about version (required 'kitkat')
- Variant 'kitkatDebugAndroidTestRuntime' capability myapp:app:unspecified:
- Unmatched attributes:
- Doesn't say anything about com.android.build.api.attributes.BuildTypeAttr (required 'release')
- Doesn't say anything about its usage (required a usage of 'android-reverse-meta-data')
- Provides attribute 'org.jetbrains.kotlin.localToProject' with value 'local to :app' but the consumer didn't ask for it
- Provides attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm' but the consumer didn't ask for it
- Doesn't say anything about version (required 'kitkat')
- Variant 'kitkatDebugRuntime' capability myapp:app:unspecified:
- Unmatched attributes:
- Doesn't say anything about com.android.build.api.attributes.BuildTypeAttr (required 'release')
- Doesn't say anything about its usage (required a usage of 'android-reverse-meta-data')
- Provides attribute 'org.jetbrains.kotlin.localToProject' with value 'local to :app' but the consumer didn't ask for it
- Provides attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm' but the consumer didn't ask for it
- Doesn't say anything about version (required 'kitkat')
- Variant 'kitkatDebugUnitTestCompile' capability myapp:app:unspecified:
- Unmatched attributes:
- Doesn't say anything about com.android.build.api.attributes.BuildTypeAttr (required 'release')
- Doesn't say anything about its usage (required a usage of 'android-reverse-meta-data')
- Provides attribute 'org.jetbrains.kotlin.localToProject' with value 'local to :app' but the consumer didn't ask for it
- Provides attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm' but the consumer didn't ask for it
- Doesn't say anything about version (required 'kitkat')
- Variant 'kitkatDebugUnitTestRuntime' capability myapp:app:unspecified:
- Unmatched attributes:
- Doesn't say anything about com.android.build.api.attributes.BuildTypeAttr (required 'release')
- Doesn't say anything about its usage (required a usage of 'android-reverse-meta-data')
- Provides attribute 'org.jetbrains.kotlin.localToProject' with value 'local to :app' but the consumer didn't ask for it
- Provides attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm' but the consumer didn't ask for it
- Doesn't say anything about version (required 'kitkat')
- Variant 'kitkatReleaseRuntime' capability myapp:app:unspecified:
- Unmatched attributes:
- Doesn't say anything about com.android.build.api.attributes.BuildTypeAttr (required 'release')
- Doesn't say anything about its usage (required a usage of 'android-reverse-meta-data')
- Provides attribute 'org.jetbrains.kotlin.localToProject' with value 'local to :app' but the consumer didn't ask for it
- Provides attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm' but the consumer didn't ask for it
- Doesn't say anything about version (required 'kitkat')
- Variant 'kitkatReleaseUnitTestCompile' capability myapp:app:unspecified:
- Unmatched attributes:
- Doesn't say anything about com.android.build.api.attributes.BuildTypeAttr (required 'release')
- Doesn't say anything about its usage (required a usage of 'android-reverse-meta-data')
- Provides attribute 'org.jetbrains.kotlin.localToProject' with value 'local to :app' but the consumer didn't ask for it
- Provides attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm' but the consumer didn't ask for it
- Doesn't say anything about version (required 'kitkat')
- Variant 'kitkatReleaseUnitTestRuntime' capability myapp:app:unspecified:
- Unmatched attributes:
- Doesn't say anything about com.android.build.api.attributes.BuildTypeAttr (required 'release')
- Doesn't say anything about its usage (required a usage of 'android-reverse-meta-data')
- Provides attribute 'org.jetbrains.kotlin.localToProject' with value 'local to :app' but the consumer didn't ask for it
- Provides attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm' but the consumer didn't ask for it
- Doesn't say anything about version (required 'kitkat')
- Variant 'nougatDebugAndroidTestCompile' capability myapp:app:unspecified:
- Unmatched attributes:
- Doesn't say anything about com.android.build.api.attributes.BuildTypeAttr (required 'release')
- Doesn't say anything about its usage (required a usage of 'android-reverse-meta-data')
- Provides attribute 'org.jetbrains.kotlin.localToProject' with value 'local to :app' but the consumer didn't ask for it
- Provides attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm' but the consumer didn't ask for it
- Doesn't say anything about version (required 'kitkat')
- Variant 'nougatDebugAndroidTestRuntime' capability myapp:app:unspecified:
- Unmatched attributes:
- Doesn't say anything about com.android.build.api.attributes.BuildTypeAttr (required 'release')
- Doesn't say anything about its usage (required a usage of 'android-reverse-meta-data')
- Provides attribute 'org.jetbrains.kotlin.localToProject' with value 'local to :app' but the consumer didn't ask for it
- Provides attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm' but the consumer didn't ask for it
- Doesn't say anything about version (required 'kitkat')
- Variant 'nougatDebugRuntime' capability myapp:app:unspecified:
- Unmatched attributes:
- Doesn't say anything about com.android.build.api.attributes.BuildTypeAttr (required 'release')
- Doesn't say anything about its usage (required a usage of 'android-reverse-meta-data')
- Provides attribute 'org.jetbrains.kotlin.localToProject' with value 'local to :app' but the consumer didn't ask for it
- Provides attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm' but the consumer didn't ask for it
- Doesn't say anything about version (required 'kitkat')
- Variant 'nougatDebugUnitTestCompile' capability myapp:app:unspecified:
- Unmatched attributes:
- Doesn't say anything about com.android.build.api.attributes.BuildTypeAttr (required 'release')
- Doesn't say anything about its usage (required a usage of 'android-reverse-meta-data')
- Provides attribute 'org.jetbrains.kotlin.localToProject' with value 'local to :app' but the consumer didn't ask for it
- Provides attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm' but the consumer didn't ask for it
- Doesn't say anything about version (required 'kitkat')
- Variant 'nougatDebugUnitTestRuntime' capability myapp:app:unspecified:
- Unmatched attributes:
- Doesn't say anything about com.android.build.api.attributes.BuildTypeAttr (required 'release')
- Doesn't say anything about its usage (required a usage of 'android-reverse-meta-data')
- Provides attribute 'org.jetbrains.kotlin.localToProject' with value 'local to :app' but the consumer didn't ask for it
- Provides attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm' but the consumer didn't ask for it
- Doesn't say anything about version (required 'kitkat')
- Variant 'nougatReleaseRuntime' capability myapp:app:unspecified:
- Unmatched attributes:
- Doesn't say anything about com.android.build.api.attributes.BuildTypeAttr (required 'release')
- Doesn't say anything about its usage (required a usage of 'android-reverse-meta-data')
- Provides attribute 'org.jetbrains.kotlin.localToProject' with value 'local to :app' but the consumer didn't ask for it
- Provides attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm' but the consumer didn't ask for it
- Doesn't say anything about version (required 'kitkat')
- Variant 'nougatReleaseUnitTestCompile' capability myapp:app:unspecified:
- Unmatched attributes:
- Doesn't say anything about com.android.build.api.attributes.BuildTypeAttr (required 'release')
- Doesn't say anything about its usage (required a usage of 'android-reverse-meta-data')
- Provides attribute 'org.jetbrains.kotlin.localToProject' with value 'local to :app' but the consumer didn't ask for it
- Provides attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm' but the consumer didn't ask for it
- Doesn't say anything about version (required 'kitkat')
- Variant 'nougatReleaseUnitTestRuntime' capability myapp:app:unspecified:
- Unmatched attributes:
- Doesn't say anything about com.android.build.api.attributes.BuildTypeAttr (required 'release')
- Doesn't say anything about its usage (required a usage of 'android-reverse-meta-data')
- Provides attribute 'org.jetbrains.kotlin.localToProject' with value 'local to :app' but the consumer didn't ask for it
- Provides attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm' but the consumer didn't ask for it
- Doesn't say anything about version (required 'kitkat')
The following variants were also considered but didn't match the requested attributes:
- Variant 'kitkatDebugApiElements' capability myapp:app:unspecified declares a component, as well as attribute 'version' with value 'kitkat':
- Incompatible because this component declares an API of a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug' and the consumer needed a usage of 'android-reverse-meta-data' of a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'release'
- Variant 'kitkatDebugRuntimeElements' capability myapp:app:unspecified declares a component, as well as attribute 'version' with value 'kitkat':
- Incompatible because this component declares a runtime of a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug' and the consumer needed a usage of 'android-reverse-meta-data' of a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'release'
- Variant 'kitkatReleaseApiElements' capability myapp:app:unspecified declares a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'release', attribute 'version' with value 'kitkat':
- Incompatible because this component declares an API of a component and the consumer needed a usage of 'android-reverse-meta-data' of a component
- Variant 'kitkatReleaseRuntimeElements' capability myapp:app:unspecified declares a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'release', attribute 'version' with value 'kitkat':
- Incompatible because this component declares a runtime of a component and the consumer needed a usage of 'android-reverse-meta-data' of a component
- Variant 'nougatDebugApiElements' capability myapp:app:unspecified:
- Incompatible because this component declares an API of a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug', attribute 'version' with value 'nougat' and the consumer needed a usage of 'android-reverse-meta-data' of a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'release', attribute 'version' with value 'kitkat'
- Variant 'nougatDebugRuntimeElements' capability myapp:app:unspecified:
- Incompatible because this component declares a runtime of a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug', attribute 'version' with value 'nougat' and the consumer needed a usage of 'android-reverse-meta-data' of a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'release', attribute 'version' with value 'kitkat'
- Variant 'nougatReleaseApiElements' capability myapp:app:unspecified declares a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'release':
- Incompatible because this component declares an API of a component, as well as attribute 'version' with value 'nougat' and the consumer needed a usage of 'android-reverse-meta-data' of a component, as well as attribute 'version' with value 'kitkat'
- Variant 'nougatReleaseRuntimeElements' capability myapp:app:unspecified declares a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'release':
- Incompatible because this component declares a runtime of a component, as well as attribute 'version' with value 'nougat' and the consumer needed a usage of 'android-reverse-meta-data' of a component, as well as attribute 'version' with value 'kitkat'
Run Code Online (Sandbox Code Playgroud)
在此之前,当我使用 gradle-tools v 3.x 时 - 它工作得非常好。
任何想法,想法,提示,线索?
Jem*_*rov 11
在以下情况下会发生此错误。您有这些模块和依赖项:
app (free/paid)
|
featureA featureB featureC
| | |
\ /
libraryX (free/paid)
Run Code Online (Sandbox Code Playgroud)
app
模块有 2 种风格:free
, paid
. 没有一个feature
模块具有这两种风格,但是libraryX
却有!现在,当feature
模块依赖时libraryX
,它们必须明确告诉 gradle 是否需要freeLibraryXDebug
或paidLibraryXDebug
。但feature
模块不能说freeImplementation(project(":libraryX"))
orpaidImplementation(project(":libraryX"))
因为它们本身没有这些风格。
有两种方法可以解决这些问题:
feature
模块总是选择一种特定的风格,使用missingDimensionStrategy
in如此处defaultConfig
所述。这种方法的问题是模块始终依赖于一种特定的风格(免费/付费),无论选择哪种模块风格(来自左侧的 AndroidStudio“Build Variants”选项卡或来自终端命令)feature
app
feature
模块还声明 2 种风格 ( free
, paid
),然后使用implementation(project(":libraryX"))
. 为模块选择的风格app
将级联到feature
模块,也级联到libraryX
模块,一切都会自动进行。这个问题是样板文件,如果你有数十个feature
模块,它们都需要在 gradle 文件中声明 2 种风格。为了消除 bilerplate 和代码重复,您可以将productFlavors
声明提取到单独的 gradle 文件中,并将其应用plugin
到每个feature
模块中。gradle kotlin dsl的示例 代码和讨论见此处。
我无法找到一种libraryX's
通过查看app
模块选择的风味来选择风味的方法,而不需要feature
在中间向模块引入风味。
您遇到的问题似乎是您的主项目使用具有风味维度的库,而您的应用程序不知道要使用哪一个。您应该在defaultConfig块中使用missingDimensionStrategy来指定默认风格。例如 :
missingDimensionStrategy 'dimension', 'flavor1', 'flavor2'
Run Code Online (Sandbox Code Playgroud)
请查看此链接了解更多详情。
根据@Chriki 的评论,试图制定最小的可重现问题,并突然找到了解决方案。魔术在声明中:
android {
...
dynamicFeatures = [":app"]
}
Run Code Online (Sandbox Code Playgroud)
每当我评论这一行时,一切都会正常。
PS 这里应该是对 gradle 日志/调试消息的仇恨辐射,实际上没有这些日志/消息。最后我花了近一周的时间试图找到解决方案,最后偶然发现了。
如果@Chriki 发布答案,我将奖励他。
归档时间: |
|
查看次数: |
4760 次 |
最近记录: |