如何从常见的 java class 中为不同的产品口味调用不同的方法

how to call different method for different product-flavor from common java class

我需要这样的东西:

来自任何方法:

if(for one flavor)

   do something

else

   do something

如何处理来自 java 的口味?

您可以为口味指定文件。如果我是你,我会这样做: 在 main/java/your/package 源中放置一个文件,我们将其命名为 CustomClass.java。 它包含如下内容:

public class CustomClass {
   public static void myCustomMethod() {
      //Do something here...
   }
}

之后,您可以在风味名称文件夹(主文件夹旁边)中创建此 class 的风味特定版本。 所以在这里放一个CustomClass.java:your_flavor_name/java/your/package 做点别的:

  public class CustomClass {
       public static void myCustomMethod() {
          //Do something here for that specific flavor!
       }
    }

构建将合并文件并使用适合您口味的特定文件,如果找不到特定口味的文件,则使用主版本。您可以将它用于可绘制对象和所有其他文件(资产,...)。

之后你只需要创造一个新的味道。在您的 gradle 中添加:

productFlavors {
        your_flavor_name {
            applicationId "your.package"
        }
}

这里有更多内容:http://developer.android.com/tools/building/configuring-gradle.html

感谢@GaborNovak 的回答

事实上,我搜索了类似的常见内容 class:

if("flavor-name".equals(getApplicationContext().getPackageName())){
                myIntent.setClass(thisClass.this, nextClass.class);
            }
            else {
                myIntent.setClass(thisClass.this, nextClass.class);
            }

我觉得有点混乱。当我写 getApplicationContext.getpackageName -> 它在构建 gradle 中定义了选定风味的 application_id。 当我写 BuildConfig.APPLICATION_ID -> 它得到包名。有没有人可以解释这种逻辑背后的原因?是不是一头雾水?

为两个product-flavors分别定义两个string.xml,并在每个product-flavors中添加一串常用名,例如在第一种风味的string.xml中添加<string name="flavor">Flavor One</string>并在第2种口味的string.xml中加入<string name="flavor">Flavor Two</string>。现在在方法中,获取字符串 flavor 的值并相应地添加代码行。 因为,对于这两种口味,字符串口味将有两个不同的值。

在 productFlavor 的 something() 中创建 class :

主要共同来源:

main\java\com.exmaple.test\class.java - > something()

Flavor1 来源:

flavor\java\com.exmaple.test\class.java - > something()

Flavor2 来源:

flavor\java\com.exmaple.test\class.java - > something()