我有一个处理创建和用户 session 的类 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
文件夹,并复制该类。新设置将是:
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/
调试
/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
,因为它们应该被使用。
长话短说
如何使用 productFlavors
或类似的东西轻松登录开发版本?
最佳答案
在我看来,您的第一种做法是:
if(BuildConfig.DEBUG){
createAndLogin("dummy", "dummy");
}
没有那么糟糕。它将所有代码保存在一个地方。话虽如此,您将代码放入 src/debug 的第二种方法很接近,您根本不需要使用产品风格来实现这种方式。这样做:
- 将
UserManager
的createAndLogin
版本放入 src/debug - 将普通版本的
UserManager
放在src/release - 不要在 src/main 中放置任何东西。
如果该类的两个版本都有很多共同的逻辑,那么您可以让它们都继承自您放在 src/main 中的共同基类。
这种方法的一个缺点是,目前 Android Studio 不够智能,无法让当前代码以外的风格或构建类型的代码参与重构等重要事情。这意味着,如果您当前正在处理调试构建类型,并且通过将 UserManager
移动到不同的包来重构它,则它不会重构您的发布构建类型中的副本,在您修复它之前,它将成为孤立对象。
关于java - 如何使用 ProductFlavors 来定义 App 中的开发行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25315147/