2013-11-01 23 views
12

Tôi đang cố hợp nhất ứng dụng miễn phí và ứng dụng trả phí của mình. ProductFlavors của hệ thống xây dựng mới của Android dường như hoàn toàn phù hợp với vấn đề của tôi.Trình cắm Android Gradle tạo ra các tệp R cho các hương vị sản phẩm khác nhau?

Tôi có hương vị freeApp hoạt động tuyệt vời, tuy nhiên khi tôi xây dựng hương vị trả tiền, tệp R đang được tạo trong cấu trúc gói được định nghĩa trong freeApp.

Dưới đây là một đoạn trích từ tập tin bằng cách gradle.build:

productFlavors { 
freeApp { 
    versionCode 201308020 
    versionName "2.0.13_free" 
    packageName "com.flyingspheres.android" 
} 
paidApp { 
    versionCode 201305110 
    versionName "2.0.10_paid" 
    packageName "com.flyingspheres.android.inventory" 
} 

Tôi luôn tin tưởng vị trí các tập tin R được định nghĩa bởi tên gói trong biểu hiện. Tôi đã xác minh rằng tệp kê khai đang tạo chính xác.

Vấn đề là tệp R cho cả hai hương vị nằm ở cùng một vị trí. Gradle yêu cầu một tệp kê khai tồn tại bên trong cây nguồn chính, vì vậy bất kỳ phiên bản tệp kê khai nào tôi đặt trong cây nguồn chính là nơi tệp R.java sẽ được tạo tại.

Giả sử rằng tôi nhận được các tệp R để tạo ở đúng vị trí cho mỗi hương vị; các báo cáo nhập khẩu cho tệp R phải được quản lý sao cho mỗi hương vị tham chiếu đến tệp R chính xác?

Đây là một ảnh chụp màn hình của cấu trúc dự án của tôi:

enter image description here

Mỗi tập tin AndroidManifest.xml là một biểu hiện đầy đủ và hoàn chỉnh - theo tài liệu manifest trong cây chính nên hoàn toàn ghi đè lên các sản phẩm phiên bản hương vị. Mặc dù, điều đó rõ ràng là không xảy ra, bởi vì hoạt động sẽ được khởi chạy và các nhà cung cấp nội dung không bị ghi đè.

Mọi thông tin chi tiết về những gì tôi đang làm sai sẽ được đánh giá cao nhất. Điều này phải là một tình huống rất phổ biến mà bất cứ ai ghi đè lên packageName sẽ chạy vào. Tôi đã cố gắng tìm ra nó trong khoảng một tuần nay và dường như không thể đạt được điều đó một mình.

Cảm ơn,

-Aaron

Trả lời

10

Dưới Plugin gradle android của 0.7.3, được tạo ra R.java tập tin là chỉ làm cho tên src/main 's gói. Nó chứa tất cả các tài nguyên cho các hương vị khác nhau, nó chỉ đặt chúng vào một tệp được tạo ra R.java. Tôi đã nghe điều này từ an IO talk.

Tên gói của bạn trong số src/main/AndroidManifest.xml là gì? Tôi đoán là nó com.flyingspheres.android

Hãy thử nhập khẩuR trong lớp học của bạn mà cần phải truy cập tài nguyên programatically sử dụng tên gói src/main của bạn.

Ví dụ:

import com.flyingspheres.android.R; 
+3

Đây là câu trả lời đúng. Nên được chấp nhận. – osayilgan

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