如果您有一個包含JAR文件和AAR文件作爲依賴關係的項目(請參閱下面的註釋),那麼您可以將Android特定的JAR作爲依賴於Android API中的類的依賴項,儘管JAR文件無法包含您已知的Android資源。僅僅因爲它依賴於Android類並不意味着它需要被打包爲AAR。
在這裏我正在談論什麼可能是一個單模塊項目,其中包括一些JAR和AAR依賴項。一個JAR文件只是一個類文件(也許非Android資源和其他文件)的集合,並且沒有依賴關係,所以沒有什麼可以打破的。當開始構建時,構建器會將所有東西捆綁在一起並打包,而不檢查JAR是否對其他類具有無法解析的依賴關係 - 您將在運行時發現類加載器異常。
如果您在IDE中的多模塊項目中討論庫模塊,那麼這是另一回事。如果您有一個模塊A可以編譯爲純JAR(它在構建文件中使用apply plugin: 'java'
語句),那麼它不依賴於編譯爲AAR的Android模塊(apply plugin: 'android-library'
)。這可能永遠不會被修復,或者至少不會在可預見的未來:這是因爲Android模塊有一個更復雜的源文件夾概念,並且Gradle中的Java插件無法理解Android的源代碼集。
反之亦然 - Android模塊可以依賴普通的Java模塊。
注
由於侷限在搖籃建設者尚未解決,您不能訪問本地奧爾斯在你在你的構建文件的JAR同樣的方式(通過經compile files(...)
語句引用它們);你必須欺騙Gradle認爲他們在某種Maven倉庫中(也許把它們放在一個實際的 Maven倉庫中,它可以是本地的)。如果需要,請參閱Adding local .aar files to my gradle build以獲得解決方法。
JAR如何「依賴」任何東西?它只是一個類的容器。 –
嗯是的,也許我應該措詞它 - 「可以打包成JAR的Android庫項目是否依賴於另一個使用資源的Android庫項目(因此打包爲AAR)並仍然打包爲JAR?「我懷疑答案是否定的,但我只想確認。 – Matthew