2013-07-31 29 views
35

Tôi có một ứng dụng Android với một số hương vị sản phẩm khác nhau được cấu hình trong build.gradle tôi tập tin ví dụNhận hương vị sản phẩm hoặc xây dựng biến thể trong một ứng dụng android

productFlavors { 
    someFlavor {} 
    anotherFlavor {} 
} 

Trong mã ứng dụng của tôi, tôi muốn có thể để có được tên của hương vị hiện đang được biên dịch (hoặc xây dựng biến thể). Một giải pháp là:

productFlavors { 
    someFlavor { 
     buildConfig "public static final String PRODUCT_FLAVOR = \"someFlavor\";" 
    } 
    anotherFlavor { 
     buildConfig "public static final String PRODUCT_FLAVOR = \"anotherFlavor\";" 
    } 
} 

Và sau đó trong cuộc gọi ứng dụng Android của tôi BuildConfig.PRODUCT_FLAVOR.

Có cách nào để tôi có thể tự động làm việc này không? Hoặc là có một số API khác trong android tôi có thể sử dụng để có được tên hương vị sản phẩm?

Trả lời

53

Chỉnh sửa: Điều này hiện được thực hiện tự động bắt đầu với phiên bản 0.7 của plugin. BuildConfig.java sẽ chứa

public static final String BUILD_TYPE = "debug"; 
public static final String FLAVOR = "f1Fa"; 
public static final String FLAVOR_group1 = "f1"; 
public static final String FLAVOR_group2 = "fa"; 

FLAVOR là tên hương vị kết hợp với tất cả các kích thước hương vị/nhóm áp dụng. Sau đó, mỗi thứ nguyên có sẵn là FLAVOR_<group name>.

Cuối cùng BUILD_TYPE chứa tên của loại xây dựng đã sử dụng.

Nếu bạn có một kích thước hương vị duy nhất, thì bạn chỉ có hằng số FLAVOR.

Đây là cách duy nhất để thực hiện ngay bây giờ.

Một điều bạn có thể làm là tự động hóa. Vì vậy, bạn có thể làm một cái gì đó như thế này:

android { 
    productFlavors.whenObjectAdded { flavor -> 
     flavor.buildConfig "public static final String PRODUCT_FLAVOR = \"${flavor.name}\";" 
    } 

    // your normal config here. 
} 

Bằng cách này bạn không phải tự làm điều đó cho mỗi hương vị.

+0

Đó chính xác là những gì tôi muốn - cảm ơn. Tôi thấy tôi cần sử dụng khiObjectAdded thay vì whenAdded, vì vậy tôi đã chỉnh sửa câu trả lời của bạn, nhưng về cơ bản thì điều này là chính xác. – robd

+1

Cảm ơn rất nhiều vì đã cập nhật câu trả lời của bạn - hữu ích! – robd

+0

Tôi muốn lấy biến thể xây dựng đã chọn trong build.gradle nhưng khiObjectAdded không hoạt động đối với tôi. Dưới đây là những gì tôi đang làm: android { productFlavors { flavor1 {} \t \t flavor2 {}} productFlavors.whenObjectAdded {hương vị -> println 'khi đối tượng nói thêm:' + hương vị } buildTypes { debug {} phát hành {}} } – userv

6

Giải pháp được chấp nhận thật tuyệt vời. Đối với một số trường hợp, một thay thế có thể hữu ích mặc dù.

Bạn có thể thêm tệp cấu hình, nói 'Appconfig.java' vào sản phẩm của bạnLưu trữ thư mục nguồn cụ thể tức là src/<productflavor>/java/<packagename>/Appconfig.java; sau đó bạn có thể sử dụng Appconfig.PRODUCT_FLAVOR trong ứng dụng của mình. Trình biên dịch sẽ giữ cho bạn trung thực và chắc chắn rằng bạn thêm điều này cho tất cả các hương vị. Như tôi đã nói, trong trường hợp cụ thể này, giải pháp được chấp nhận có lẽ tốt hơn vì bạn thậm chí không cần thêm bất kỳ thứ gì cho sản phẩm mớiFlavors nhưng cách tiếp cận này có thể hữu ích cho các trường hợp khác.

Các vấn đề liên quan