2016-02-25 53 views
0

這並不因爲工作,在所生成的BuildConfigSTORE結束UNLOCKEDPLAYSTORE前限定。我怎樣才能做到這一點?搖籃buildConfigField非法前向參考

的build.gradle

android { 
    defaultConfig { 
     buildConfigField 'int', 'UNLOCKED', '0' 
     buildConfigField 'int', 'PLAYSTORE', '1' 
    } 

    productFlavors { 
     unlocked { 
      buildConfigField 'int', 'STORE', 'UNLOCKED' 
     } 

     playStore { 
      buildConfigField 'int', 'STORE', 'PLAYSTORE' 
     } 
    } 
} 

BuildConfig.java(生成,Play商店中的香味)

// Fields from product flavor: playStore 
public static final int STORE = PLAYSTORE; // ERROR 
// Fields from default config. 
public static final int PLAYSTORE = 1; 
public static final int UNLOCKED = 0; 

樣品用例

if(BuildConfig.STORE == BuildConfig.PLAYSTORE) 
    validatePurchaseOnPlay(); 
+0

這裏有什麼用例?這可能有助於我們找出解決方法。 – stkent

+0

@stkent在問題中添加了一個用例 – cambunctious

+0

我的猜測是,構建配置字段將始終以「最具體到最不具體」的方式生成,以允許更具體的配置閉包覆蓋在較不特定的配置閉包中定義的字段。運行明顯的測試支持這個想法。鑑於此,我認爲你不能單獨使用構建配置字段來實現你想要做的。你的建議解決方案對我來說似乎沒問您大概可以在任何類中找到常量,而不僅僅是定製應用程序子類? – stkent

回答

0

一種解決方案是,以限定常量在我Application類的螞蟻,然後用

buildConfigField 'int', 'STORE', 'MyApp.UNLOCKED' 
1

試着改變你的店打造的config字段聲明:

buildConfigField 'int', 'STORE', 'BuildConfig.UNLOCKED'

0
使用下面的方法值之間

可以實現的一致性:

android { 

    def storeUnlocked = '0' 
    def storePlaystore = '1' 

    defaultConfig { 
     buildConfigField 'int', 'UNLOCKED', storeUnlocked 
     buildConfigField 'int', 'PLAYSTORE', storePlaystore 
    } 

    productFlavors { 
     unlocked { 
      buildConfigField 'int', 'STORE', storeUnlocked 
     } 

     playStore { 
      buildConfigField 'int', 'STORE', storePlaystore 
     } 
    } 
} 

如果stateUnlocked或statePlaystore更改,則生成的BuildConfig和值將保持一致。

唯一缺少的部分是BuildConfig源代碼將不會顯示的關係,但如果你正確地命名字段沒有多大關係:

STORE 
STORE_UNLOCKED 
STORE_PLAYSTORE