多flavor导致的源码依赖问题-- Cannot choose between the following configurations of project :sample:
一、背景:
当我们在源码依赖的时候经常会导致一些问题。
我们的主工程有如下配置,它依赖了一个sample的本地工程
flavorDimensions "demo"
productFlavors {
flavor1 {
dimension 'demo'
} flavor2 {
dimension 'demo'
}
} dependencies {
compile project(':sample')
}
我们sample的本地工程配置如下
flavorDimensions "demo2"
productFlavors {
flavor3 {
dimension 'demo2'
}
flavo4 {
dimension 'demo2'
}
}
这时候你去assemble代码的时候,你会发现报出了如下的错误
> Could not resolve project :sample.
Required by:
project :app
> Cannot choose between the following configurations of project :sample:
这里的问题是,我们的主module无法判断,我们主module的flavor需要对应sample的那个flavor。那么我们需要怎么样解决这个问题呢?
二、解决思路
Gradle3.0以下
我们通过这样引用本地工程
dependencies {
api project(path:':sample',configuration:"default") }
同时在sample配置
defaultPublishConfig "flavor3Release"
但这么写,你会发现一个非常奇葩的问题,你无法使用本地工程中的依赖,也就是依赖传递的问题(这里目前还没有implementation和api,只有compile)。
但终究是工程能够编译起来的。
Gradle3.0以上
在gradle3.0以上,google为我们提供了一种变体感知的依赖管理机制。这其实与上面的强制指定有异曲同工之处,但无疑这一种更加先进。
flavorDimensions "demo" flavorDimensions "demo2"
productFlavors { productFlavors{
flavor1 { flavor3{
dimension 'demo' dimension 'demo2'
} }
flavor2 { flavor4{
dimension 'demo' dimension 'demo2'
} }
}
}
dependencies {
compile project(':sample')
} app sample
我们可以看到我们的两个module,他们的flavorDimensions和productFlavors中的内容均不一样,那我们应该如何适配那?
使用missingDimensionStrategy和matchingFallbacks
如果你的app module是这样的,与sample一样,那么gradle会自动帮你匹配。也就是flavor相同的匹配。
flavorDimensions "demo2"
productFlavors {
flavor3 {
dimension 'demo2'
}
flavo4 {
dimension 'demo2'
}
}
如果你的appmodule是这样的,flavorDimension不一致,而flavor一致。那你就需要使用 missingDimensionStrategy 'demo2', 'flavor3', 'flavor4'
flavoorDimensions "demo"
productFlavors {
flavor3 {
dimension 'demo'
missingDimensionStrategy 'demo2', 'flavor3'
}
flavo4 {
dimension 'demo' missingDimensionStrategy 'demo2', 'flavor4' 第一个参数是sample里面的flavordimensions,后面的可以依次填里面的flavor
}
}
如果你的appmodule是这样的,flavorDimension一致,而flavor不一致。那你就需要使用 matchingFallbacks
flavorDimensions "demo2"
productFlavors {
flavor1 {
dimension 'demo2'
matchingFallbacks = ['flavor3']
}
flavo2 {
dimension 'demo2'
matchingFallbacks = ['flavor4']
}
}
如果你遇到了我们上面的那种方式,那自然是两个都需要使用,这个就留给你们自己去尝试了。
有的朋友又问了,那我的app没有flavor唉怎么办,那这种又是什么情况呢??自然是flavorDimensions和flavor都不相同,那我们只要在defaultConfig中添加即可
missingDimensionStrategy 'demo2', 'flavor3', 'flavor4'
多flavor导致的源码依赖问题-- Cannot choose between the following configurations of project :sample:的更多相关文章
- webpack源码-依赖收集
webpack源码-依赖收集 version:3.12.0 程序主要流程: 触发make钩子 Compilation.js 执行EntryOptionPlugin 中注册的make钩子 执行compi ...
- 高德APP全链路源码依赖分析工程
一.背景 高德 App 经过多年的发展,其代码量已达到数百万行级别,支撑了高德地图复杂的业务功能.但与此同时,随着团队的扩张和业务的复杂化,越来越碎片化的代码以及代码之间复杂的依赖关系带来诸多维护性问 ...
- 著名的安装制作软件InnoSetup的源码及示例源码-The installation of a well-known software s source code and sample InnoSetup source
@echo off rem Inno Setup rem Copyright (C) 1997-2007 Jordan Russell rem Portions by Martijn Laan rem ...
- tomcat源码导入eclipse步骤
1. 获取源代码 方式一:从官网http://tomcat.apache.org/download-70.cgi 直接下载,官网提供了Binary 和 Source Code两种下载方式,要研究tom ...
- Docker编译Android6.0源码
docker环境配置 更正时区时间 # 查看当前时间 $ date # 修改当前时间 $ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ech ...
- Tomcat源码导入eclipse的步骤
Tomcat源码导入eclipse 一.下载源码 1. 进入Apache 官网:http://tomcat.apache.org/ 2. 在左边侧选择要下载的源码的版本. 3. 或者直接通过Ar ...
- eclipse 导入tomcat7源码
导入tomcat的源码其实说简单也不简单,说不简单也简单,主要还是环境问题,中间花费了我很多时间,网上找了很多都没什么用,参考一些文章,然后自己慢慢摸索出来的. 环境:(1)jdk:jdk1.6.0_ ...
- 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...
- Linux 下源码编译FFMEG
目录 1. 安装依赖关系 2. 源码安装 yasm 3. 源码安装 NASM 4. 源码安装libx264 5. 源码安装x265 6. 源码安装 libmp3lame 7. 源码安装 libopus ...
随机推荐
- Vertical-Align,你应该知道的一切
我们聊聊vertical-align.这个属性主要目的用于将相邻的文本与元素对齐.而实际上,verticle-algin可以在不同上下文中灵活地对齐元素,以及进行细粒度的控制,不必知道元素的大小.元素 ...
- python--函数基础一
一.函数意义:可读性,复用性强 # def my_len(s): #def 关键词开头,my_len函数名 # i=0 # for k in s: # i+=1 # print(i) # return ...
- 第九章 Service
2019-09-23 今天距离2020年刚好有一百天,希望在未来的百日里能不负期待 不忘初心,方得始终, 初心易得,始终难守. 一.Service 的概念 Kubernetes Service定义了这 ...
- codeforces1213F Unstable String Sort 思维
题目传送门 题意:a和b都代表字符串的下标,至少用k个字符,构造一个长度为n的字符串,将这个字符串中的字符按无论是按$a$写还是按$b$写,字典序都非递减. 思路:如果将$a[l,r]=b[l,r]$ ...
- Android——谷歌官方下拉刷新控件SwipeRefreshLayout(转)
转自:http://blog.csdn.net/zouzhigang96/article/details/50476402 版权声明:本文为博主原创文章,未经博主允许不得转载. 前言: 如今谷歌推出了 ...
- eclipse启动Failed to load the JNI shared library
由于安装jdk安装了多个版本,用其他开发工具,某天再打开eclipse时弹出“Failed to load the JNI shared library jvm.dll” 原因:eclipse的版本与 ...
- codeforces round 433 D. Jury Meeting
题目大意: 输入n,m,k,分别代表城市的数量,城市编号1~n,航班的数量以及会议必须所有人员到会一起商议的天数,然后及时输入m行航班的信息,每一行输入d,f,t,c分别表示航班到站和始发的那一天(始 ...
- php操作redis--列表篇
常用函数:lpush/rpush/lpop/rpop/lrange/lrem等 应用场景:关注列表,粉丝列表,发送缓冲队列等 特点:可理解为数组操作,插入和删除数据按照一定的规律排序,数据可重复 连接 ...
- loadrunner自定义函数
https://zhangfy068.iteye.com/blog/1614794 Loadruner 有四种实现自定义函数的方式,根据脚本编写方便性进行选择不同的方式. (1)直接引用法: Acti ...
- NX二次开发-BlockUI对话框嵌套MFC对话框制作进度条
半年前在一些QQ群看到有大神NX二次开发做出了进度条,那个时候我还不会弄,也不知道怎么弄得,后来断断续续得研究了一下,直到今天我把它做出来了.内心还是很喜悦的!回想自己这两年当初从没公司肯给我做NX二 ...