android - 两种构建类型 - 重复代码。不好解决

标签 android android-gradle-plugin

安卓工作室 3.4

我有下一个 Activity :

public class CartActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cart);
        someCommonMethod()
    }

    private void someCommonMethod() {
        // some code
    }
}

现在我有 2 种构建类型:debugrelease。 在 debug 中,我将方法 someDebugMethod() 添加到 Activity 中

public class CartActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cart);
        someCommonMethod()
        someDebugMethod()
    }

    private void someCommonMethod() {
        // some code
    }

    private void someDebugMethod() {
        // some debug code
    }
}

release 中,我将方法 someReleaseMethod() 添加到 Activity 中

public class CartActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cart);
        someCommonMethod()
        someReleaseMethod()
    }

    private void someCommonMethod() {
        // some code
    }

    private void someReleaseMethod() {
       // some debug code
    }
}

我看官方documentation

现在项目的结构是:

app\src\debug\java\com\myproject\CartActivity.java
app\src\release\java\com\myproject\CartActivity.java

我从 app\src\main\java 中删除了 CartActivity.java。 因此,我有两个文件 CartActivity.java

不错。

现在,当我在 debug 构建类型中启动应用程序时,然后在 debug 文件夹中运行 CartActivity。 当我在 release 构建类型中启动应用程序时,然后在 release 文件夹中运行 CartActivity

不错。它工作正常。

但假设现在我需要更新公共(public)方法someCommonMethod()。此方法用于两种构建类型

因此,我需要两次更新此方法。首先在 app\src\debug\java\com\myproject\CartActivity.java 和 然后在 app\src\release\java\com\myproject\CartActivity.java

使用相同的代码更新相同的方法

所以我觉得这样不好

因为这是重复代码。当更新方法 someCommonMethod() 时,我需要在 两个文件复制和粘贴 每次

真的很糟糕。

如何避免重复代码?

理想的方法是在 CartActivity.java 中只有 delta

  1. app\src\debug\java\com\myproject\CartActivity.java中有唯一方法someDebugMethod()
  2. app\src\release\java\com\myproject\CartActivity.java中有ONLY方法someReleaseMethod()

通用代码在app\src\main\java\com\myproject\CartActivity.java

这可能吗?

附言假设我有 3 种构建类型。 因此,我需要更新三个文件中的相同代码。确实不好。

最佳答案

只需在

中创建一个 CommonCartActivity
app\src\main\java\com\myproject\CommonCartActivity.java

然后扩展类以覆盖 flavor 实现中的方法。

public class CartActivity extends CommonCartActivity {

    protected void someCommonMethod() {
        // some code
    }
}

通过这种方式,CartActivity 仅继承自 CommonCartActivity,没有其他任何东西,以两种形式重复。

关于android - 两种构建类型 - 重复代码。不好解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56254581/

相关文章:

java - 蓝牙打印在不同设备上从 Socket 抛出 IOException

java - 继续从 Android 在 Firebase 数据库的现有数组中插入新数据

gradle - Gradle:使用 '+'时确定实际使用的库版本

java - 为什么我的 JSONObject 相关单元测试失败?

android - 多个dex文件定义Lcom/amazonaws/AmazonWebServiceClient;

gradle - 使用 gradle 'java-library' 时无法引用库中的类

java - Android DynamoDBMappingException : Expected S in value

android - 安装我的应用程序后如何创建图标?

安卓工作室 : Error Expected Resources as string when using R. color.colorX

android - 不要隐藏抽屉导航