您的位置:首页 > 移动开发 > Android开发

Android Studio3.0多渠道打包遇到的问题

2017-12-12 13:20 323 查看
最近升级到了Android Studio3.0,在给测试打包的时候突然出错,错误如下:

Error:Cannot choose between the following configurations of project :UMUpdate:
- debugApiElements
- debugRuntimeElements
- releaseApiElements
- releaseRuntimeElements
All of them match the consumer attributes:
- Configuration 'debugApiElements':
- Found com.android.build.api.attributes.BuildTypeAttr 'debug' but wasn't required.
- Found com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' but wasn't required.
- Found com.android.build.gradle.internal.dependency.VariantAttr 'debug' but wasn't required.
- Found org.gradle.api.attributes.Usage 'java-api' but wasn't required.
- Configuration 'debugRuntimeElements':
- Found com.android.build.api.attributes.BuildTypeAttr 'debug' but wasn't required.
- Found com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' but wasn't required.
- Found com.android.build.gradle.internal.dependency.VariantAttr 'debug' but wasn't required.
- Found org.gradle.api.attributes.Usage 'java-runtime' but wasn't required.
- Configuration 'releaseApiElements':
- Found com.android.build.api.attributes.BuildTypeAttr 'release' but wasn't required.
- Found com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' but wasn't required.
- Found com.android.build.gradle.internal.dependency.VariantAttr 'release' but wasn't required.
- Found org.gradle.api.attributes.Usage 'java-api' but wasn't required.
- Configuration 'releaseRuntimeElements':
- Found com.android.build.api.attributes.BuildTypeAttr 'release' but wasn't required.
- Found com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' but wasn't required.
- Found com.android.build.gradle.internal.dependency.VariantAttr 'release' but wasn't required.
- Found org.gradle.api.attributes.Usage 'java-runtime' but wasn't required.


查了以下,发现在3.0上打包的话,如果你的app moudle有几种buildTypes的话,所依赖的moudle也必须有几种(不做具体实现也可以),什么意思呢?

比如,你的app目录下的build.gradle文件中,buildTypes如下:

buildTypes {
release {
buildConfigField "boolean", "LOG_DEBUG", "false"
zipAlignEnabled true
shrinkResources true
minifyEnabled true
proguardFiles 'proguard-rules.pro'
}

debug {
buildConfigField "boolean", "LOG_DEBUG", "true"
zipAlignEnabled true
shrinkResources false
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}

debug2{

}
}


同时,你的app依赖一个第三方moudle比如叫UMUpdate,则在UMUpdate目录下的build.gradle文件中,也必须声明上边儿这三种buildTypes,当然,可以不做具体处理:

buildTypes {
release {

}

debug {

}

debug2{

}
}


更新:

以上办法在遇到依赖多个moudle的时候会非常麻烦,幸好又大佬说了一个matchingFallbacks的词,通过配置它可以处理app与moudle的依赖匹配问题。

摘抄如下:

可以通过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的每个build type都执行相同的回退策略(例如我们大量的library只有一个release的build type),则可以使用批量指令:

buildTypes.all { type ->
type.matchingFallbacks = ['release']
}


通过这两种配置matchingFallbacks的方式,就可以通过只修改app下的build.gradle文件,来解决打包时buildTypes不匹配的问题了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: