Android gradle:共享产品风格之间的依赖关系

2023-12-01

我的应用程序中有 3 种产品口味(flavor1、flavor2、flavor3)。 flavor1 和flavor2 共享一些与广告相关的依赖项。

有没有办法将与广告相关的依赖项捆绑到 gradle 维度或配置,并将其添加到flavor1 和flavor2 中,而无需在build.gradle 中复制compileFlavor1 和compileFlavor2 行?

这是我当前 gradle 的一部分。这有效。但是,我想知道是否有更好的方法来做到这一点?因此,我不必重复每种风格的广告依赖性。

android {
    productFlavors {
        flavor1 {}
        flavor2 {}
        flavor3 {}
    }

    sourceSets {
       main {}
       flavor1.java.srcDir 'common/ads/java'     <--- shared sourceSet
       flavor2.java.srcDir 'common/ads/java'
       flavor3.java.srcDir 'common/no_ads/java'
    }
}

dependencies {
    compile 'dependency1'
    compile 'dependency2'

    compileFlavor1 'dependency3'   <----- Same list
    compileFlavor1 'dependency4'
    compileFlavor1 'dependency5'

    compileFlavor2 'dependency3'   <------ Same list
    compileFlavor2 'dependency4'
    compileFlavor2 'dependency5
}

在风格之间共享依赖关系的解决方案(更新为implementation现在已经取代了compile):

Since implementation, flavor1Implementation, flavor2Implementation等其实都是它们自己配置您实际上可以在构建过程中的这些步骤之间应用继承关系。

因此,在这种情况下,您可以指定共享依赖项以及flavor1 only:

dependencies {
    implementation 'dependency1'
    implementation 'dependency2'

    flavor1Implementation 'dependency3'
    flavor1Implementation 'dependency4'
    flavor1Implementation 'dependency5'
}

...然后简单地允许flavor2Implementation继承自flavor1Implementation:

configurations.flavor2Implementation.extendsFrom(flavor1Implementation)

这也可以用于定义风格之间更复杂的关系,并且支持多重继承,例如:

configurations {
    flavor3Implementation.extendsFrom(
            flavor1Implementation,
            flavor2Implementation
    )
}

(最后,简单说一下分享code口味之间应继续处理sourceSets按照原来的问题。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android gradle:共享产品风格之间的依赖关系 的相关文章

  • Android ListView数组索引过滤后越界

    我认为这是专家的问题 我接到电话getView with positon 出界来自ListView数据列表 当我使用适配器过滤器时会发生这种情况 过滤器publishResults 方法使用小于原始列表的过滤列表填充数据 当新的过滤列表时似
  • Android 已弃用屏幕尺寸?

    嘿 我需要在我的应用程序中获取屏幕的宽度 该应用程序将在 2 1 及更高版本上运行 我已经将其设置为如下所示 该方法已被弃用 我可能应该使用 getSize 或其他方式 但问题是 这是否适用于 3 0 和 4 0 等 Android 版本
  • 如何在 Windows Phone 8 中安装 .xap PhoneGap 版本?

    我使用phonegap android开发了一款简单的游戏 但在为Windows iOS Android 黑莓等构建后 它仅适用于Android设备 因此我可以为Android设备安装apk文件 但在Windows xap文件中未检测到Wi
  • Android 中的 JDBC 连接

    有没有人在 android 中尝试过 JDBC 连接 因为在 Android 2 3 中支持 JDBC 我必须在没有 Web 服务的情况下连接 Mysql 我已经提出申请 但它给了我错误 public class MysqlConnect
  • 如何将视图动态添加到已在 xml 布局中声明的relativelayout?

    我宣布了一个RelativeLayout在 xml 布局文件中 现在我想添加Views从代码到现有布局 我添加了一个Button通过代码动态地更改为现有布局 如下所示 rLayout RelativeLayout findViewById
  • Android、AdMob:AdMob 广告刷新会破坏帧速率

    我正在开发一款游戏 并且进展顺利 不过 我确实对 AdMob 广告刷新有一些疑问 每次刷新广告或绘制广告的不同方面时 我的帧速率都会急剧下降 几乎使游戏无法玩 这是我用于加载广告的内容 ad new AdView this AdSize B
  • 无法在 Android 模拟器上使用 ART

    我只是想在我的模拟器上尝试 android 4 4 的 ART 我所做的是创建一个模拟器 选择设备为 Nexus 7 目标为 Android 4 4 RAM 512 然后我启动模拟器并加载它 然后我进入开发者选项并选择运行时作为 ART 设
  • Android:自动从项目包中删除未使用的图像

    我正在开发一个相当大的android项目 并且在drawable文件夹中有很多图像 其中许多图像未在项目中使用 因为它们已被替换 并且占用了宝贵的空间 有什么方法可以自动找到这些图像并删除它们 而不是搜索项目中的每个图像 我使用过的一些工具
  • sqlite 插入表中 select * from

    我需要在 Android 应用程序中将数据从一个表移动到另一个表 我想使用以下sql insert into MYTABLE2 select id STATUS risposta DATETIME now data ins from MYT
  • FFmpeg 不适用于 android 10,直接进入 onFailure(String message) 并显示空消息

    我在我的一个项目中使用 FFmpeg 进行视频压缩 在 Android 10 Google Pixel 3a 上 对于发送执行的任何命令 它会直接进入 onFailure String message 并显示空消息 所以我在我的应用程序 g
  • java.lang.RuntimeException:release()后调用的方法

    If i am 不使用 相机 release in 表面被破坏 then 无法从另一个 Activity 再次启动 CameraActivity 简而言之 得到不幸的是应用程序已停止 错误 即使不释放相机 但如果我确实点击了 主页 按钮 来
  • Android 应用程序 Phonegap 中的 Admob 实现

    我将一个 jquery 脚本转换为 Android 应用程序 现在我想将 admob 添加到其中 这可能吗 谷歌从那时起禁止在移动应用程序中使用 AdSense 在移动应用程序中使用 AdSense 移动广告违反了 AdSense 政策 移
  • 膨胀类片段 InflateException 二进制 XML 文件时出错

    我正在使用 Material Design 和 NavigationDrawer 布局等设计我的第一个应用程序 但我遇到了一个问题 该应用程序非常简单 它只显示文本 并且基于 Android Studio 中提供的模板 尝试启动我的应用程序
  • 无法仅在控制台中启动 androidstudio

    你好 我的问题是下一个 我下载了Android Studio如果我去 路径 android studio bin 我执行studio sh 我收到以下错误 No JDK found Please validate either STUDIO
  • 将 espresso 与自定义 EditText 结合使用

    这是我的布局的一部分
  • 游标在“查询、删除表、创建表、查询相同表名”后返回相同的列

    例如我有一个名为myTable在我的数据库文件中 Android ps它不支持列重命名 删除等 这张表有idx name columns 我想删除并重新创建该表 但使用新列 我是这样做的 db transaction var cursor
  • Android 和 iPhone 应用程序可以使用同一个 Facebook 应用程序 ID 吗?

    我有两个具有相同名称和相同功能的应用程序 一款在安卓市场 一款在应用商店 目前仅通过 iPhone 应用程序 您可以使用我创建的 Facebook 应用程序将您的分数发布到 Facebook 墙上 我的问题是我可以使用相同的 Android
  • 在运行时用Dagger添加Retrofit RequestInterceptor

    我正在使用匕首和改装 我用 Dagger 注入我的 Retrofit 服务 现在我想做一个授权请求来获取 accessToken 之后 我想使用请求拦截器来增强我的 api 模块 以便将此访问令牌用于将来的请求 我的想法是在收到访问令牌后使
  • 无法在 BlackBerry Playbook 上设置音量

    我在更改黑莓游戏书的音量时遇到问题 首先 我将 Android 应用程序重新打包到 Palybook 应用程序 我需要使用搜索栏更改黑莓剧本的音量 并在搜索监听器中设置音频管理器音量 这是代码 audioManager AudioManag
  • Android 等距游戏引擎 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 是否有任何现有的开源或商业解决方案

随机推荐

  • Rust 与 C++:从函数返回对象

    我是 Rust 新手 试图了解从函数返回对象时如何传递所有权 在以下基于引用的实现中 由于引用没有所有权 因此当 s 超出范围时 它会被删除并释放 fn dangle gt String dangle returns a reference
  • MPMoviePlayerController 多任务问题

    我在 iPhone 上开发一个应用程序 使用 MPMoviePlayerController 来播放音频文件 当应用程序进入后台时 如果 mpmovieplayer 正在播放 iPhone 会继续播放当前音乐 但当播放结束时 下一首曲目不会
  • React,从组件中的脚本访问 var

    我一直在尝试导入外部库 谷歌地图 以便在 React 组件中使用它 索引 html file div div
  • SSL 证书不受信任 - 仅在移动设备上[关闭]

    Closed 这个问题是无关 目前不接受答案 我的网站在桌面上通过 SSL 运行良好 chrome 我的地址栏附近有一个绿色的锁 上面写着 身份已验证 但是使用移动移动浏览器 Chrome Safari 我看到以下消息 该网站的身份尚未得到
  • 以 10 为基数的 int() 的文字无效 - django - 更新

    我是 django 初学者 并且 我正在尝试制作一个像组合框一样的子父项 条形取决于城市取决于国家 地区 我收到此错误 更新 更改了外键的模型和默认值 但仍然是相同的错误 有什么帮助吗 谢谢 这是 models py from django
  • 为什么这段代码的输出是111111?

    这是代码 我试图解决它 但我不明白它的输出怎么是111111 public class Test public static void main String args int list 1 2 3 4 5 6 for int i 1 i
  • 我如何找到 - 哪些 portlet 部署在 Liferay 6.1 的哪些页面上?

    换句话说 我需要查看哪些数据库表才能将 portlet 映射到组织中的页面 如果有这样的事 我们正在使用 Liferay 6 1 20 除了市场门户组件 如果您有权访问数据库 您可以在Layout表以了解您的 portlet 添加在哪些页面
  • Apple 在使用 PushKit 实现静默通知后遭到拒绝

    我们添加了需要 PushKit 并在 Info plist 中启用 VoIP 的静默通知 See Apple 的 PushKit 文档 现在我的应用程序被苹果拒绝了 您的应用程序在 Info plist 的 UIBackgroundMode
  • 带 CSS 的半圆(仅边框、轮廓)

    我正在尝试使用 CSS 创建一个圆圈 如下图所示 只有一个div div class myCircle div 并通过使用only CSS定义 不允许使用 SVG WebGL DirectX 等 我尝试画一个完整的圆圈 然后用另一个圆圈淡化
  • mvc如何修改默认路由

    我正在阅读 Pro Asp net mvc3 框架书 我想更改默认路由 以便我可以拥有不同的主页 我添加了一个名为 Pages 的新控制器和一个名为 Home 的视图 这就是我想要的主页 我尝试将其添加到我的 global asax cs
  • 如何在离线模式下保存Firebase实时数据库的一部分

    我想将 Firebase 数据库 JSON 中的特定路径存储在本地手机存储中 而不是实时 Firebase 数据库中的所有数据 假设我的 Firebase 数据库中有每个用户的新闻源路径 并且我只想保存为用户指定的新闻源 而不是在用户移动设
  • F# 和运算符重载:(>) 和 (^)

    好的 有人可以向我解释为什么 F 允许您重载 gt 和 运算符 但不允许您使用它们吗 op Addition Works just fine op Concatenate Compiler error in F Apparently onl
  • 为什么这不会改变 Helm 范围循环中变量的值?

    我有这个功能 define myapp getSubKey map source Before map range key value keys if kindIs int value map index map int value Aft
  • 在圆形图像区域中应用 2d 高斯滤波器 - Matlab

    有没有一种简单的方法可以在圆形图像区域应用 2d 高斯滤波器 简单我的意思是一个现成的 matlab 函数 还是必须自己实现这个 如果要将任何滤镜应用到图像的选定部分 一种选择是使用二元蒙版 Let img作为您的图像 设置圆形遮罩的位置和
  • 使用 TPL 的推测执行

    我有一个List
  • ValueError:检查目标时出错:期望dense_2具有3个维度,但得到形状为(10000, 1)的数组

    我正在使用 keras MLP 网络对 3 D 词向量进行二元分类input shape None 24 73 我用了两层致密层dense 1 and dense 2 At dense 2我收到一个我无法解决的错误 这是我的模型摘要 Lay
  • 从变量设置 div 样式标签中的宽度和高度值

    在我的 javascript 文件中 我有以下行 div style width 200px height 100px div 我想通过两个变量设置样式标签中的宽度和高度值 这两个变量从相应的函数获取它们的值 var my width ge
  • epoll(epoll_wait等)可用于iOS吗?

    我正着手将一些现有的 POSIX 兼容代码移植到 iOS 据我所知 pthreads 可用 良好 但编译器未找到 iOS 上可以使用 epoll 吗 No epoll是 Linux 特定的系统调用 达尔文内核上最接近的等价物是kqueue
  • 彩信发送/接收日期始终为 1970 年

    从下面的代码我可以得到彩信 但日期总是错误的 可能是我在转换时做错了什么 Cursor cursor activity getContentResolver query Uri parse content mms null null nul
  • Android gradle:共享产品风格之间的依赖关系

    我的应用程序中有 3 种产品口味 flavor1 flavor2 flavor3 flavor1 和flavor2 共享一些与广告相关的依赖项 有没有办法将与广告相关的依赖项捆绑到 gradle 维度或配置 并将其添加到flavor1 和f