Aplikasi saya memiliki beberapa varian untuk beberapa pasar sistem penagihan dalam aplikasi.
Saya memiliki satu perpustakaan yang berbagi kode dasar untuk semua proyek saya. Jadi saya memutuskan untuk menambahkan sistem pembayaran tersebut ke perpustakaan ini sebagai cita rasa produk.
Pertanyaannya adalah bisakah perpustakaan android memiliki rasa produk?
Jika ya, bagaimana saya dapat memasukkan rasa yang berbeda dalam masing-masing rasa aplikasi?
Saya banyak mencari, dan saya tidak dapat menemukan apa pun tentang skenario ini. Satu-satunya hal yang dekat yang saya temukan adalah di http://tools.android.com/tech-docs/new-build-system/user-guide :
dependencies {
flavor1Compile project(path: ':lib1', configuration: 'flavor1Release')
flavor2Compile project(path: ':lib1', configuration: 'flavor2Release')
}
Saya mengubah konfigurasi ke hal yang berbeda tetapi tidak berhasil!
Saya menggunakan android studio 0.8.2.
3.4.2
versi terbaru dan gradle ke yang terbaru5.5.1
, masih gagal dengan waktu kompilasi, atau penautan sumber daya gagal dalam aapt, atau tidak dapat menemukan simbol yang ada di dalam perpustakaan modulJawaban:
Akhirnya saya menemukan cara melakukan ini, saya akan menjelaskannya di sini untuk orang lain yang menghadapi masalah yang sama:
Bagian kuncinya adalah menyetel publishNonDefault ke true di perpustakaan build.gradle, Kemudian Anda harus menentukan dependensi seperti yang disarankan oleh panduan pengguna.
Keseluruhan proyek akan menjadi seperti ini:
Library build.gradle:
proyek build.gradle:
Sekarang Anda dapat memilih ragam aplikasi dan panel Build Variants dan pustaka akan dipilih sesuai dengan itu dan semua build dan run akan dilakukan berdasarkan ragam yang dipilih.
Jika Anda memiliki beberapa modul aplikasi berdasarkan pustaka Android Studio akan mengeluh tentang konflik pemilihan varian, Tidak apa-apa, abaikan saja.
sumber
Ada satu masalah dengan jawaban Ali . Kami kehilangan satu dimensi yang sangat penting dalam varian build kami. Jika kita ingin memiliki semua opsi (dalam contoh saya di bawah 4 (2 x 2)) kita hanya perlu menambahkan konfigurasi khusus dalam file modul utama build.gradle agar dapat menggunakan semua multi-flavor multi-buildType in
Build Variants
. Kita juga harus menyetel publishNonDefault true di modul perpustakaan file build.gradle .Contoh solusi:
Lib build.gradle
App build.gradle
sumber
Error:java.lang.RuntimeException: Error: more than one library with package name
, terjadiPembaruan untuk Android Plugin 3.0.0 dan lebih tinggi
Menurut Dokumentasi Android resmi - Migrasikan konfigurasi ketergantungan untuk modul lokal ,
Jadi dalam jawaban Ali, ubah
untuk
Dan plugin akan menangani konfigurasi spesifik varian secara otomatis. Semoga dapat membantu orang lain dalam mengupgrade Android Studio Plugin ke 3.0.0 dan lebih tinggi.
sumber
Plugin Android saya adalah 3.4.0, dan saya merasa tidak memerlukan konfigurasi sekarang. Yang Anda butuhkan hanyalah memastikan flavorDimensions dan productFlavours dalam aplikasi berisi satu productFlavor dari flavorDimensions dan productFlavours yang sama di perpustakaan. Contoh:
Di mylibrary's build.gradle
build.gradle aplikasi:
Setelah sinkronisasi, Anda dapat mengganti semua opsi di Build Variants Window:
sumber
Agar ragam berfungsi pada pustaka AAR, Anda perlu mendefinisikan defaultPublishConfig di file build.gradle modul Android Library Anda.
Untuk informasi lebih lanjut, lihat: Publikasi Perpustakaan .
sumber
Saat ini tidak mungkin, meskipun jika saya ingat dengan benar itu adalah fitur yang ingin mereka tambahkan. (Edit 2: link , link2 )
Edit: Untuk saat ini saya menggunakan
defaultPublishConfig
opsi untuk mendeklarasikan varian library mana yang dipublikasikan:sumber
Saya tahu subjek ini telah ditutup, tetapi hanya pembaruan dengan gradle 3.0, lihat ini: https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html#variant_aware dan grep
matchingFallbacks
danmissingDimensionStrategy
. Sekarang jauh lebih mudah untuk mendeklarasikan dependensi antara ragam modul.... dan dalam kasus yang tepat dengan gradle3.0 ini, karena rasa memiliki nama yang sama, gradle akan memetakannya secara ajaib, tidak diperlukan konfigurasi.
sumber
Saya juga mengalami masalah menyusun modul untuk berbagai opsi.
Apa yang saya temukan:
Sepertinya kita tidak perlu menambahkan
publishNonDefault true
ke dalambuild.gradle
file lib , karena Gradle 3.0.1 .Setelah mendekompilasi kelas
BaseExtension
menemukan ini:Dan alih-alih:
Kita harus menggunakan:
Hanya yang penting, adalah menambahkan
configurations {...}
bagian kebuild.gradle
.Jadi, varian terakhir dari
build.gradle
file aplikasi adalah:Selain itu, Anda dapat menggunakan varian Filter untuk membatasi varian build.
Ps jangan lupa menyertakan modul di
settings.gradle
file, seperti:sumber