2015-09-27 18 views
12

Ben farklı derleme varyant tatlar bir uygulama inşa ediyorum. Tatlar "Ücretsiz" ve "Ücretli" dir. Java sınıflarımda, sadece uygulama "Ücretli" ise sadece tetiklenmesi gereken bir mantık oluşturmak istiyorum. Ben böyle bir şey yapabileceğini uygulama kimliği öğrendikten sonraAndroid - Nasıl Flavor's ApplicationId alın

gradle.build

productFlavors { 
    free { 
     applicationId "com.example.free" 
     resValue "string", "app_name", "Free App" 
     versionName "1.0-free" 
    } 
    paid { 
     applicationId "com.example.paid" 
     resValue "string", "app_name", "Paid App" 
     versionName "1.0-paid" 
    } 

: aşağıda gösterildiği gibi nedenle ben gradle oluşturma işlemi sırasında set "applicationID" almak için bir yol gerekir:

if(whateverpackageid.equals("paid")) { 
     // Do something or trigger some premium functionality. 
    } 

ben "applicationID" eninde sonunda "paket adı" olur gradle oluşturma işlemi sırasında uygulama derlenmiş bir kez söylemek haklı mıyım? Öyleyse, "uygulama kimliği" veya "paket adı" almanın en iyi yolu nedir, böylece java dosyalarıma bazı lezzet bağımlı mantıkları uygulayabilir miyim?

cevap

20

Ürün aromalarınızda yapılandırma yapılandırma değişkenlerini kullanırım. Bir şey satırları:

productFlavors { 
    free { 
     applicationId "com.example.free" 
     resValue "string", "app_name", "Free App" 
     versionName "1.0-free" 
     buildConfigField "boolean", "PAID_VERSION", "false" 
    } 
    paid { 
     applicationId "com.example.paid" 
     resValue "string", "app_name", "Paid App" 
     versionName "1.0-paid" 
     buildConfigField "boolean", "PAID_VERSION", "true" 
    } 
} 

Sonra yapı sonra kullanabilirsiniz:

if (BuildConfig.PAID_VERSION) { 
    // do paid version only stuff 
} 

Bir senkronizasyon yapmak gerekebilir/gradle üzerine inşa derlemek ve ithalat için önce öznitelik ekledikten sonra Gradle'ın sizin adınıza oluşturduğu BuildConfig sınıfı.

10

APPLICATION_ID, BUILD_TYPE, FLAVOUR, VERSION_CODE ve VERSION_NAME gibi tüm değerleri almak için en iyi çözümü buldum.

Sadece yaz: Log.d ("Uygulama Kimliği:", BuildConfig.APPLICATION_ID); senin kodunda. Aromalarınızın APPLICATION_ID değerini sağlar. Bu bağlantıyı başvurabilirsiniz Daha fazla ayrıntı için

BuildConfig.java

public final class BuildConfig { 
    public static final boolean DEBUG = Boolean.parseBoolean("true"); 
    public static final String APPLICATION_ID = ""; 
    public static final String BUILD_TYPE = "debug"; 
    public static final String FLAVOR = ""; 
    public static final int VERSION_CODE = 1; 
    public static final String VERSION_NAME = ""; 
} 

: http://blog.brainattica.com/how-to-work-with-flavours-on-android/

+0

iyi çözüm, kabul edilmelidir –