gpt4 book ai didi

java - 如何使用 ProductFlavors 来定义 App 中的开发行为?

转载 作者:行者123 更新时间:2023-11-29 05:19:35 32 4
gpt4 key购买 nike

我有一个处理创建和用户 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 的第二种方法很接近,您根本不需要使用产品风格来实现这种方式。这样做:

  • UserManagercreateAndLogin 版本放入 src/debug
  • 将普通版本的UserManager放在src/release
  • 不要在 src/main 中放置任何东西。

如果该类的两个版本都有很多共同的逻辑,那么您可以让它们都继承自您放在 src/main 中的共同基类。

这种方法的一个缺点是,目前 Android Studio 不够智能,无法让当前代码以外的风格或构建类型的代码参与重构等重要事情。这意味着,如果您当前正在处理调试构建类型,并且通过将 UserManager 移动到不同的包来重构它,则它不会重构您的发布构建类型中的副本,在您修复它之前,它将成为孤立对象。

关于java - 如何使用 ProductFlavors 来定义 App 中的开发行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25315147/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com