Vì vậy, đây là một chút thú vị, tôi không chắc chắn làm thế nào chính xác để thiết lập nó trong studio android. Tôi có một số mô-đun có một số thành phần có thể sử dụng lại mà tôi sử dụng trong các ứng dụng khác nhau, tuy nhiên sẽ tốt hơn nếu bạn chèn các chủ đề nhất định vào các thành phần có thể sử dụng lại bằng cách sử dụng các hương vị. Thay vì tạo ra một hương vị mới cho mọi thành phần cho mọi ứng dụng tôi viết, tôi đã nghĩ đến việc có 1 mô-đun Theme, có thể có một hương vị cho mỗi ứng dụng tôi viết, có các lược đồ màu ... v.v. Đây là loại làm thế nào tôi muốn nó thiết lập:Mô-đun chủ đề Android với hương vị
App1: dependencies reusable lib1 reusable lib3 reusable lib4 theme - App1 flavor App2: dependencies reusable lib1 reusable lib2 reusable lib4 theme - App2 flavor
Bây giờ tôi muốn nếu libs tái sử dụng chỉ có thể phụ thuộc vào chủ đề mà không cần phải biết được hương vị để xây dựng, và các proj ứng dụng chính trong đó là sự phụ thuộc vào chủ đề có thể tham khảo hương vị cho ứng dụng đó (sử dụng câu trả lời này https://stackoverflow.com/a/24316133/1316346). Lý do cho điều này là mỗi mô-đun tái sử dụng không thể có một ứng dụng duy nhất trong phụ thuộc build.gradle của nó hoặc nó sẽ phá vỡ các ứng dụng khác tham chiếu đến chúng. Nó cũng tẻ nhạt để phải làm cho một hương vị của mỗi mô-đun tái sử dụng cho mỗi ứng dụng tôi viết. Có cách nào để đạt được một cái gì đó như thế này? Đây là những gì tôi đã cố gắng:
App1 build.gradle:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:22.1.1'
compile project(path: ':Theme', configuration: 'app1Release')
compile project(':Lib1')
compile project(':Lib2')
compile project(':Lib4')
}
App2 build.gradle:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:22.1.1'
compile project(path: ':Theme', configuration: 'app2Release')
compile project(':Lib1')
compile project(':Lib3')
compile project(':Lib4')
}
Lib1 build.gradle:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:22.1.1'
compile project(path: ':Theme')
}
Vấn đề ở đây là ngay sau khi Lib1 cố gắng truy cập bất kỳ thứ gì trong chủ đề, nó sẽ là một lỗi. Trong thực tế nó thậm chí không xây dựng chủ đề đầu tiên, nó sẽ cố gắng để xây dựng Lib1 trước khi Theme mặc dù Lib1 có một phụ thuộc (một cái gì đó kỳ lạ với hương vị). Nếu tôi thay đổi Lib1 thành:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:22.1.1'
compile project(path: ':Theme', configuration: 'app1Release')
}
Nó sẽ hoạt động cho ứng dụng1, nhưng tôi phải liên tục thay đổi nó trước khi tạo mỗi ứng dụng hoặc thực hiện nhiều hương vị cho mỗi lib mà tôi muốn tránh. Có ai từng đạt được thứ gì như thế này không?
tl; dr Can một tài liệu tham khảo mô-đun một hương vị của mô-đun khác dựa trên các hương vị được xây dựng bởi các ứng dụng tham khảo các mô-đun cùng
Tại sao bạn không sử dụng các chủ đề thực tế trong ứng dụng của mình? Bạn cần loại giá trị nào để chuyển vào các mô-đun của mình? Nếu bạn sử dụng các thuộc tính chủ đề như '? ColorPrimary' trong mô-đun của mình, bạn có thể sử dụng chủ đề thuần túy mà không có hương vị, bạn cũng có thể tạo các giá trị tùy chỉnh để bao gồm trong chủ đề của mình –