2016-11-06 58 views
-1

我的项目有几种可能的配置,每个配置都在'make'阶段运行它自己的任务。我怎样才能确定选择哪个配置?或者,确定运行哪个任务将会是一样的。如何确定在运行时哪个Gradle配置处于活动状态?

+0

我已经回答您的查询增加了一个答案。如果这个答案对你有帮助,请注册并且标记为正确:) – oathkeeper

+0

亲爱的downvoter - downvoting是合法的,所有的,但指定一个理由这样做会很好,你知道。 – Fingolfin

回答

0

是的,这可以通过检查生成的BuildConfig.java文件来实现。 BuildConfig.java是自动生成的,它被放到gen文件夹中。

假设在你的应用程序模块的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 

    } 

} 
+0

谢谢,但我对确定运行配置感兴趣,而不是构建类型。 – Fingolfin

+0

你能详细解释一下吗?运行配置是什么意思?通过运行配置,我认为你提到了“调试”或“发布”构建配置。 – oathkeeper

+0

我没有发明这个术语,这是如何在Android Studio中调用的。它用于定义执行“make”之前将运行哪些Gradle任务。 – Fingolfin

相关问题