對於模塊的build.gradle
文件是否有合理簡單的方法來指示應排除來自依賴項的某些文件?我特別希望從AAR中排除某些資源。如何從AAR依賴中排除特定資源?
LeakCanary是一個有趣的庫,用於幫助追蹤內存泄漏。但是,它有一個無法證明的要求,即compileSdkVersion
爲21或更高。雖然大多數項目不應該有這個問題,但圖書館不需要一個好的理由就需要某個compileSdkVersion
。作爲一般政策的一部分,開發團隊可能會凍結他們的compileSdkVersion
,以便僅將這些設置作爲其應用程序的主要版本更新的一部分進行更改。
在這種情況下,對於至少LeakCanary的V1.3.1,唯一的原因compileSdkVersion
是必需的,AFAICT,是因爲AAR具有res/values-v21/
目錄,包含從Theme.Material
繼承的主題定義。這個主題被診斷活動使用。最終用戶從未看到該活動,只有debug
版本的開發人員才能看到。坦率地說,主題式的活動看起來並不重要。迫使21個compileSdkVersion
只是爲了讓診斷活動有一定的主題,恕我直言,愚蠢。
如果作爲compile
指令的一部分,我們可以說:「嘿,請從此AAR跳過res/values-v21/
,m'kay?」。由於-v21
主題僅僅提供了在其他地方定義的主題的替代定義,因此放棄-v21
主題不會破壞構建或在運行時中斷事件,而只會給我們提供主題性診斷活動。
我無法看到this answer如何與依賴關係一起使用。我也不確定if it is complete, and it certainly does not appear to be supported。它也沒有真正的資格作爲「簡單」—我不希望有人嘗試在build.gradle
文件中嘗試刪除此文件,以阻止像LeakCanary這樣的診斷庫中的單個文件。
那麼,有沒有比這更簡單的工作,現在用於Gradle的Android插件的最新版本?
我認爲,對於LeakCanary解決辦法(https://github.com/square/leakcanary)將分叉它並編譯適當的'compileSdkVersion'自己的版本。我不確定它是否可以作爲問題的答案。 –
@KonstantinLoginov:LeakCanary似乎有相當數量的相互關聯的移動部件,這就是爲什麼我懷疑叉子會很容易。我做了足夠的探索,以確定唯一的Android 5.0+功能是「Theme.Material」,這就是讓我提出這個問題的原因。當我在LeakCanary的背景下構思問題時,這個問題超越了這個圖書館。 – CommonsWare
這將是很好,如果谷歌目前的gradle插件源是公開的。 DSL源代碼的標籤[1]落後於發佈標籤[2]。 [1] https://android.googlesource.com/platform/tools/gradle/+refs [2] https://jcenter.bintray.com/com/android/tools/build/gradle/ – JBirdVegas