2017-06-19 159 views
5

我最近安裝了最新的Canary版本的Android Studio,它目前使用的是Android Gradle插件3.0.0-alpha4(以前是2.3.3)。Android gradle 3.0.0 buildConfigField更新後警告

我現在得到一個警告我的所有buildConfigFields的:

buildTypes { 
     def BOOLEAN = "boolean" 
     def STRING = "String" 
     def INT = "int" 
     def TRUE = "true" 
     def FALSE = "false" 
     def SOME_PER_BUILD_TYPE_FIELD = "SOME_PER_BUILD_TYPE_FIELD" 

debug { 
      buildConfigField BOOLEAN, SOME_PER_BUILD_TYPE_FIELD, FALSE 
} 

release { 
      buildConfigField BOOLEAN, SOME_PER_BUILD_TYPE_FIELD, TRUE 
} 

的警告讀到這樣:

Warning:BuildType(debug): buildConfigField 'SOME_PER_BUILD_TYPE_FIELD' value is being replaced: false -> false 
Warning:BuildType(debug): buildConfigField 'SOME_STRING_FIELD' value is being replaced: "999" -> "999" 

而且有像他們一樣的100對我的各個領域,並建立類型。我如何解決它們以及實際告訴我的警告是什麼?

+1

不知道如何解決這個問題,但警告是自我解釋爲(已經提到)這種情況下建立的變量:構建系統只是警告你一些'buildConfigField'正在被重新分配。兩個示出的字段被重新分配到相同的值,這暗示,要麼A)構建腳本配置錯誤,並評估一些表達兩次B)構建腳本具有重複轉讓C)本身的gradle評估構建腳本兩次,並警告您自己的行動 – Vasiliy

+0

我曾與3.0.0-的α4以及一些奇怪的警告/錯誤,這是固定移動回3.0.0-素α3很奇怪。也許給一個嘗試? – ItWillDo

+1

是的,我相當肯定,這是指向一個問題在我的構建腳本爲@Vasiliy提及。我定義默認的調試和發佈版本類型的配置領域,也生成類型爲對方的味道,它看起來像,因爲我在這兩個'debug'定義它們和'debug_flavor_1'等,是的gradle指出了這一點作爲一個錯誤的位置它之前沒有。我已將默認的調試和發佈類型重命名爲'debug_default'和'release_default',並且所有錯誤似乎都消失了。 –

回答

2

構建系統會警告您某些buildConfigField正在重新分配。

兩個顯示的字段被重新分配到相同的值,這暗示了下列情況之一可能會發生:

  1. 構建腳本配置錯誤,並評估一些表達兩次
  2. 您構建腳本有重複轉讓
  3. gradle這個本身評估構建腳本兩次,並警告您自己的行動
+3

如何抑制警告任何想法。更換buildConfigValues依賴於構建變體是一種正常的使用情況下 – for3st

+0

@ for3st,我不知道。 – Vasiliy

3

原因是心病直接由Vasiliy提及。只需添加一點,它的一個可能的原因可能是當你有一個使用任何其他buildType初始化的buildType時。例如考慮下面的生成配置:

debug { 
    buildConfigField 'boolean', 'ENABLE_CRASH_REPORTING', 'false' 
} 
stage { 
    initWith(buildTypes.debug) 
    buildConfigField 'boolean', 'ENABLE_CRASH_REPORTING', 'true' 
} 
release { 
    buildConfigField 'boolean', 'ENABLE_CRASH_REPORTING', 'true' 
} 

在這種情況下,你會得到警告的buildType階段

警告:BuildType(期):buildConfigField 'ENABLE_CRASH_REPORTING' 值被替換:假 - >真

原因是非常簡單和明顯,階段繼承所有字段從調試然後階段取代它,因爲你可能想爲它們分配不同的值階段(如上例)。可能的解決方法可以用

signingConfig signingConfigs.debug 

這被替換

initWith(buildTypes.debug) 

將消除簽署錯誤,您通常會得到構建階段建立的時候。但是現在配置中的主要區別是階段在這種情況下不會從調試繼承構建變量,因此您也不會收到任何警告。你還必須redifine所有階段階段沒有更多的從調試繼承

相關問題