2014-10-20 124 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之間切換,但如果發佈則強制進行分段/實時設置。