如何从常见的 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()
我需要这样的东西:
来自任何方法:
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()