2015-09-27 13 views
12

Tôi đang xây dựng một ứng dụng khác với các phiên bản khác nhau của phiên bản. Các hương vị là "miễn phí" và "trả tiền". Tôi muốn tạo ra một số logic trên các lớp java của tôi mà chỉ nên được kích hoạt nếu ứng dụng là "Paid". Vì vậy, tôi cần một cách để có được những "applicationId" đặt trong quá trình xây dựng gradle như hình dưới đây:Android - Cách tải ứng dụng Flavor's ApplicationId

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" 
    } 

Khi tôi có ID ứng dụng tôi có thể làm một cái gì đó như thế này:

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

Tôi có chính xác để nói rằng trong quá trình xây dựng gradle "applicationId" cuối cùng trở thành "tên gói" sau khi ứng dụng đã được biên soạn chưa? Nếu vậy cách tốt nhất để có được một trong hai "ID ứng dụng" hoặc "tên gói" để tôi có thể thực hiện một số hương vị phụ thuộc logic trong các tập tin java của tôi là gì?

Trả lời

20

Tôi sẽ sử dụng các biến cấu hình xây dựng trong hương vị sản phẩm của bạn. Một cái gì đó dọc theo dòng:

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" 
    } 
} 

Sau đó, sau khi một tòa nhà, bạn có thể sử dụng:

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

Bạn có thể phải làm một đồng bộ hóa/xây dựng trên gradle sau khi bạn thêm thuộc tính trước khi bạn có thể biên dịch và nhập khẩu lớp BuildConfig mà Gradle tạo ra thay cho bạn.

10

Tôi đã tìm thấy giải pháp tốt nhất để nhận tất cả các giá trị như APPLICATION_ID, BUILD_TYPE, FLAVOR, VERSION_CODE và VERSION_NAME.

Chỉ cần viết: Log.d ("Id ứng dụng:", BuildConfig.APPLICATION_ID); trong mã của bạn. Nó sẽ cung cấp APPLICATION_ID cho hương vị của bạn.

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 = ""; 
} 

Để biết thêm chi tiết bạn có thể tham khảo link này: http://blog.brainattica.com/how-to-work-with-flavours-on-android/

+0

giải pháp tốt nhất, nên được chấp nhận –

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