我有一个类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 模式下,我想自动登录,因此每次将应用程序推送到开发设备时,我都不需要手动执行此操作。< / p>
我想知道我是否可以更有效地做到这一点。我试图创建一个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
或类似内容轻松登录开发版本?
答案 0 :(得分:3)
在我看来,你的第一个做法是:
if(BuildConfig.DEBUG){
createAndLogin("dummy", "dummy");
}
不是那么糟糕。它将所有代码保存在一个地方。话虽如此,您在 src / debug 中放置代码的第二种方法是关闭的,并且您根本不需要使用产品风格来实现这一目标。这样做:
createAndLogin
版UserManager
放入 src / debug UserManager
放入 src / release 如果该类的两个版本都有许多通用逻辑,那么您可以使它们中的每一个继承自您放入 src / main 的公共基类。
这种方法的一个缺点是,目前Android Studio还不够智能,无法使用当前版本之外的代码或构建类型参与重构等重要事项。这意味着,如果您当前正在处理调试构建类型并重构UserManager
,比如将其移动到另一个包,则它不会在您的发布版本中重构该副本类型,这将是孤立的,直到你修复它。