【发布时间】:2014-08-14 18:29:53
【问题描述】:
我有一个类 UserManager 处理创建和用户会话:
src/main/java/com/myapp/UserManager.java:
public class UserManager {
public UserManager(){
if(BuildConfig.DEBUG){
createAndLogin("dummy", "dummy");
}
}
public void createAndLogin(String username, String password){
// Create and login logic
}
/* Some more methods */
}
如您所见,在 debug 模式下,我想自动登录,所以我不需要每次将应用推送到开发设备时手动进行。
我想知道我是否可以更有效地做到这一点。我试图创建一个debug 文件夹,并复制该类。新设置是:
src/main/java/com/myapp/UserManager.java:
public class UserManager {
public void createAndLogin(String username, String password){
// Create and login logic
}
/* Some more methods */
}
还有:
src/debug/java/com/myapp/UserManager.java:
public class UserManager {
public UserManager(){
createAndLogin("dummy", "dummy");
}
public void createAndLogin(String username, String password){
// Create and login logic
}
/* Some more methods */
}
不幸的是,这是不允许的,因为它抱怨重复类。
如here 所述,您需要productFlavors 来完成此操作。 build.gradle 中的设置为:
buildTypes {
debug {
debuggable true
signingConfig signingConfigs.debug
}
release {
debuggable false
signingConfig signingConfigs.release
}
}
productFlavors {
dev { }
prod { }
}
现在我已将这两个类移至src/prod/... 和src/dev/...,并从src/main/... 中删除了该类。
这行得通,但我还是不开心。我需要大量重复的代码,但我不确定我是否在使用 productFlavors,因为它们应该被使用。
TL;DR
如何使用productFlavors 或类似的东西轻松登录开发版本?
【问题讨论】:
-
不要使用风味,在 src/debug 中有一个
UserManager版本,在 src/release 中有另一个版本,而在 src/main 中没有?如果他们都想共享很多代码,那么为两者创建一个公共基类并将其放在 src/main.xml 中。说了这么多,我不确定它是否比您在 BuildConfig.DEBUG 上设置条件的第一种方法更容易——恕我直言,这比该类的多个版本更容易维护。 -
嘿@ScottBarta,谢谢!那仍然需要我复制代码,对吗?也许我应该在
debug和release中都创建一个子类,如果release中的那个是空的,而debug中的那个只包含构造函数? -
@ScottBarta 老实说,我忘记了我可以使用
release文件夹,所以这是一个很大的帮助! -
是的,存在重复代码,但您似乎倾向于使用重复代码的方法——不重复的方法是
if (BuildConfig.DEBUG)。 -
酷,我把它写成一个更具描述性的答案。
标签: java android gradle android-studio