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

标签 java android gradle android-studio

我有一个处理创建和用户 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/

相关文章:

java - 无法使用 javapackager 从 .JAR 构建 DMG

java - 连接 PostgreSQL 数据库的 Spring Boot 应用程序错误

java - 如何使用 Kotlin DSL 创建 Fat JAR?

jar - gradle - 如何构建一个带有 lib 目录和其他 jar 的 jar?

android - ANDROID STUDIO BUILD错误org.gradle.internal.UncheckedException:java.util.concurrent.ExecutionException

java 8u31 插件导致签名的小程序加载速度慢得多

java - Spring Security BCryptPasswordEncoder 已插入但不匹配

java - overridePendingTransition 用于平滑地滑入和滑出 Activity

java - 在 Java 中同时对三个 ArrayLists 进行排序的最有效方法是什么

java - 如何使用for循环插入多个值