2014-10-23 26 views
12

Derecenin yapı görevlerini yöneten komut dosyaları gördüm ve şimdi 'defaultConfig dışında bir dize ayarlanıp ayarlanmayacağını merak ediyorum. tatlar.Bir dize olarak tanımlayın ve ayrıca aromaya özgü bir uygulama kullanınId

Temel olarak birden çok lezzet alıyorum ve hepsinin belirli bir ApplicationId'si var. Daha sonra java kodumda kullanılacak bir dize kaynağı ayarlamak için bu kimliği kullanmak istiyorum.

defaultConfig { 
    minSdkVersion 11 
    targetSdkVersion 21 
    versionCode 1 
    versionName "1.0" 
} 

productFlavors { 
    one { 
     applicationId "com.my.app.one" 
    } 
    two { 
     applicationId "com.my.app.two" 
    } 
} 

Böyle bir dize ayarlamak istiyorum:

resValue "string", "authority", applicationId + ".dataprovider" 

denedim Ne:

  • Ben applicationID hala null defaultConfig bölümünde koyarsanız, böylece
  • Hatalı bir dize alıyorum Her bir lezzete ait bölümün üzerine çalışıyorum ancak birden fazla çeşniye sahip olduğum için çok sayıda kod tekrarı oluşturuyor

Alternatif arama.

P.S. Android Studio 0.8.12 kullanıyorum.

+0

"buildTypes" inizde ne var? – Blundell

+0

@Blundell 'applicationId' var değil, sadece soneki mevcut görünüyor. – Simas

cevap

30

Pek çok aramadan sonra, bunun cevabını bulmayı başardım. Belki birisi bunu faydalı bulacaktır.

productFlavors.all { 
    resValue "string", "authority", applicationId + ".dataprovider" 
} 

Bu basit pasajı kendi invidual değişkenler ayarlanmış sonuçta tatlar bir dize ayarlar. Bu, defaultConfig gibi bir şey ama lezzet bloklarından sonra idam edilmediği için değil.


Ekstra:

Hatta applicationId ayarlayabilirsiniz çıkıyor! Benim Nihai sonuç, şimdiye kadar geçerli:

<provider 
    android:name="com.my.app.DataProvider" 
    android:authorities="@string/authority" 
    android:exported="false" /> 


:

def final String AUTHORITY = '.dataprovider' 

productFlavors.all { 
    applicationId "com.my.app." + name 
    resValue "string", "authority", applicationId + AUTHORITY 
    buildConfigField "String", "AUTHORITY", "\""+applicationId + AUTHORITY+"\"" 
} 

Şimdi ben Manifest'inizde ve sırasıyla benim sınıf dosyasında kullanmak BuildConfig.AUTHORITY ve @string/authority üzerinden her lezzet sağlayıcının yetkisini elde edebilirsiniz

public class DataProvider extends ContentProvider { 
    public static final String PROVIDER = BuildConfig.AUTHORITY; 
    public static final Uri SEARCH_URI = Uri.parse("content://" + PROVIDER + "/search"); 
} 
+0

Benim efendim, BuildConfigField yönergesi ile BuildConfig için bir sabit ekleme fikrimi kurtardı günüm! :-) Ben benim contentproviders benim appId AUTHORITY sınıfı-sabitler yaymak için kullanın. –

+2

Sadece BuildConfig.APPLICATION_ID öğesinin oluşturulduğunu fark ettim, yapı tipi için diğer sabitlerin yanı sıra, tatlar da dahil. boyutlar ve sürüm bilgisi. Yine de, bu bilgiyi cevabınız olmadan görmezdim. –

+0

@ arne.jans, bu cevabın uzunluğunun sebebinin, aynı zamanda bir kaynak dizgisi olan, aromaya özgü bir otoriteye sahip olmak istediğidir, bu yüzden manifestoda kullanılabilir. Bunu sadece BuildConfig.APPLICATION_ID ile yapamazsınız. – Simas