- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个具有 2 种风格的 android 应用程序:- flavor 1- flavor 2
我的目录树是:
/src/main
/src/flavor1
/src/flavor2
main 具有默认源集。 flavor1 和 flavor2 目录有自己的源集,gradle 会自动获取。如果我将资源文件添加到 flavor 目录中,它会从 main 覆盖它,并且工作正常。
但是,如果我将一个 java 类添加到 flavor2 中以覆盖“main”中的另一个类(例如,一个需要在 flavor2 中不同的 Activity ),它不会替换它并且它说有一个重复的类我的项目。我只是通过从“主”目录中删除类并将其添加到所有 flavor 文件夹中来实现这一点。
有没有办法像资源文件一样覆盖 java 类?为什么会这样?
最佳答案
Is there a way I can override java classes just like resource files ?
没有。来自 Android 工具团队的 Xavier Ducrohet 简要讨论了其中的一些 here .
虽然有很多方法可以实现您想要的,但稍后会详细介绍。
why does this happen?
您的 Java 代码需要编译。假设您从 main
源集中的其他类中引用了一个类 Foo
,那么无论哪种风格,该 Foo
类都必须具有相同的公共(public) API正在编译。如果您能够将主 Foo
完全替换为特定风格的 Foo
,那么这可能不成立。这当然不是用工具解决的不可能的问题,但当前构建工具的解决方案是根本不让你这样做。
当然对于图片等资源,这完全不同——只要存在某个版本的资源,Android就可以正常使用。
但是,您可以创建一个类的特定风格的实现,以在您的 main
源集中使用。最简单的方法是在每个 flavor 中简单地放置一个 Foo
,而不是在您的 main
源集中提供一个 Foo
。为了获得奖励积分,请在您的 main
源集中为这些实现创建一个接口(interface),以确保特定 flavor 的实现符合相同的接口(interface)并且不会导致构建错误。
关于java - 为什么 gradle 不会覆盖不同 Android 风格的 Java 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31733937/
Textmate 语法(.tmLanguage 文件)有时以 XML 格式表示。 我想转换为更易读的格式(即 JSON 或 YAML)以集成到 VS Code 语法突出显示扩展中。 为了澄清我的意思,
如何通过 pandas 样式隐藏列标签?有一个 hide_index() 方法可以删除索引行,不幸的是 hide_column() 标签会删除整个列(标题和数据)。我只想隐藏标题。谢谢! 最佳答案 s
我正在考虑为一组服务使用 SOA 架构来支持我咨询的业务,以前我们使用数据库集成,其中每个应用程序从共享的 MS SQL 数据库中挑选出它需要的东西并使用它等等。我们有各种与怪物数据库(包括 java
所以我有以下代码,我想知道 Objective-C 中哪种“风格”被认为更好。 选项 1: id temp = [dictionary objectForKey: @"aBooleanValue"];
当创建一个没有类参数的对象时,我很难决定是否应该包含空括号。一个具体的例子:我正在与现有的 Java 代码交互,并创建一个实现名为 EventResponder 的接口(interface)的对象。我
我有一个抽象类Stack和一个扩展它的类:MyStack。我需要为 MyStack 创建一个复制构造函数。只传入 MyStack 对象更好,还是传入任何 Stack 对象更好? public MySt
我正在考虑将那些在函数体中未修改的 Python 函数参数拼写为 ALL_UPPERCASE,向此类 API 的用户发出信号,表明传递的值不会被修改(如果一切都如广告所言,无论如何) )。我不知道这会
我的 build.gradle 文件、staging、stable 和 production 以及默认构建类型 debug 和 release。对于其中的每一个,我都有不同的 AAR 文件,例如,我有
假设我有以下文件: main.cpp 例程.cpp 例程.h 进一步假设 main.cpp 调用了在 routine.cpp 中定义的函数 routine(),但是 routine.cpp 还包含仅由
我对此进行了一些搜索,但实际上我还没有找到 MySQL 中用于创建外键的样式概念是什么 - 在创建表定义中或在 alter 语句中。谢谢。 最佳答案 何时创建外键: 如果在创建表时明确需要外键,则在创
您好,我正在尝试将 Android 应用风格(免费且完整)实现为动态壁纸。在 Eclipse 中,我曾经使用以下代码从我自己的 Android Activity 打开动态壁纸预览: I
我的 Android 应用程序有两种不同的风格,lite 和 pro。在应用程序中,我有一个名为 customFragment.java 的类,它包含在 main 中(不同风格之间没有区别)并且还包含
我有一个包含多个子目录的项目,如下所示: /opt/exampleProject/src ├── __init__.py ├── dir1 │ ├── __init__.py │ ├──
假设我们有类似的东西 int f(int n); .... do{ int a = b; int b = f(a); } 这样说有没有风险 do{ int b = f(b);
是否有风格指导或理由来选择其中一种模式而不是另一种? 最小化上下文管理器下的代码量“感觉”更干净,但我无法指出具体原因。这可能只是偏好,并没有关于此事的官方指导。 1) 里面的所有代码都有上下文。 w
module Hints module Designer def self.message "Hello, World!" end
我正在开发一个具有多种风格的 android 项目。 这很好用,我可以自定义应用程序的元素,例如颜色和字符串资源。 我想让一些风格基于 AppCompat 浅色主题,一些基于 AppCompat 深色
因此,这不起作用,因为 seatsAvailable 是最终的。如何使用更多的 lambda 风格的从头开始的方式来完成我想要完成的事情? final boolean seatsAvailable =
考虑以下代码: cpu_set_t cpuset; CPU_ZERO(&cpuset); CPU_SET(0, &cpuset); sched_setaffinity(0, sizeof(cpuset
从历史上看,我总是这样编写我的异常处理代码: Cursor cursor = null; try { cursor = db.openCursor(null, null
我是一名优秀的程序员,十分优秀!