2014-10-20 123 views
12

我刚刚转移到了android gradle构建系统,并且我不清楚如何设置常量值。用gradle设置常量值

例如我已经

API.java包含

BASE_URL = "http://debug.server.com" 

但当gradle这个构建版本我需要BASE_URL"http://release.server.com"

如何更换在构建这个时间值?

回答

18

Gradle生成一个名为BuildConfig的类,该类包含静态成员(例如布尔型为DEBUG,对于调试变体,该类型设置为true)。

你既可以查询这个在Java中,像这样:

if (BuildConfig.DEBUG) { 
    BASE_URL = "http://debug.server.com" 
} else { 
    BASE_URL = "http://release.server.com" 
} 

或作为一个班轮同样的事情:

BASE_URL = BuildConfig.DEBUG ? "http://debug.server.com" : "http://release.server.com" 

OR

你可以实际上设置了BASE_URL里面的BuildConfig类的gradle使用像这样:

android { 
    buildTypes { 
     debug { 
      buildConfigField "String", "BASE_URL", '"http://debug.server.com"' 
     } 

     release { 
      buildConfigField "String", "BASE_URL", '"http://release.server.com"' 
     } 
    } 
} 

注意单,双引号在周围的gradle价值,为他人在评论中提到。这样,双引号就成为了价值的一部分。

结果,静态参考BuildConfig.BASE_URL将指向对应的URL(即,“debug.server.com”调试“ release.server.com”释放)

+1

非常感谢,会用第二种方法,非常灵活 – 2014-10-22 14:41:00

+1

不客气。随意时,你可以标记为答案;) – 2014-10-22 19:10:22

+3

你的回答只适用于我,如果我使用双引号,而不是单一的,而逃脱的URL字符串,像这样: 的Android { buildTypes { 调试{ buildConfigField“字符串“,”BASE_URL“,”\“http://debug.server.com \”“ } release { buildConfigField”String“,”BASE_URL“,”\“http://release.server。com \“” } } } – 2015-02-26 15:50:09

0

回答菲费尔羊的是正确。只想为两个以上的环境留下解决方案。

两种风格的舞台和生活。

productFlavors { 
    staging { 
     ... 
    } 
    production { 
     ... 
    } 
} 

整个应用程序配置依赖于当前的ENV。使用:

public static String ENV_DEVELOPMENT = "development"; 
public static String ENV_STAGING = "staging"; 
public static String ENV_PRODUCTION = "production"; 

ENV = BuildConfig.DEBUG ? ENV_DEVELOPMENT : BuildConfig.FLAVOR; 

我可以在本地测试时在所有不同的ENV之间切换,但如果发布则强制进行分段/实时设置。