如何在运行时确定哪个Gradle配置处于活动状态?

时间:2016-11-06 12:47:36

标签: android gradle android-gradle

我的项目有几种可能的配置,每个配置都在“生产”期间运行它自己的任务。相。如何确定选择了哪个配置?或者,确定运行哪个任务将为jsut提供相同的服务。

1 个答案:

答案 0 :(得分:0)

是的,可以通过检查生成的BuildConfig.java文件来实现。 BuildConfig.java自动生成,并放入gen文件夹。

假设在你的app模块的build.gradle文件中,你有这个buildType配置:

 buildTypes {
        release {
            shrinkResources true
            minifyEnabled true
            debuggable false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            zipAlignEnabled true
        }

        preRelease {
            // Pre release code over here.
        }

        debugConfiguration {
            // Debug configuration code over here
        }
}

并且,如果您选择buildVariant作为发行版,则会生成此BuildConfig.Java文件...

public final class BuildConfig {
  public static final boolean DEBUG = false;
  public static final String APPLICATION_ID = "com.yourapp.packagename";
  public static final String BUILD_TYPE = "release";
  public static final String FLAVOR = "";
  public static final int VERSION_CODE = 1;
  public static final String VERSION_NAME = "1.0";
}

因此,如果您希望基于构建变体执行某些操作,您可以尝试这样的事情......

final String buildType = BuildConfig.BUILD_TYPE;

switch(buildType) {

    case "release" :
        // code for release build
        break;

    case "preRelease" :
        // code for preRelease build
        break;

    case "debugConfiguration" :
        // code for debugConfiguration build
        break;
}

注意:我不确定这是否是推荐或最佳方式来处理此问题。此方法存在已知问题请检查此链接http://www.digipom.com/be-careful-with-buildconfig-debug/

我建议您可以手动设置构建类型标志以解决此问题。例如,您可以使用此功能并根据此标志执行操作... 推荐

public class BuildTypeFlag {

    // set this to release, debug, or prerelease manually for your requirements...
    public static final BuildTypeEnum BUILD_TYPE_ENUM = RELEASE;

    public enum BuildTypeEnum {

        RELEASE, DEBUG, PRERELEASE, DUMMY_CONFIG

    }

}