2013-12-23 85 views
8

我正在構建一個Android應用程序,它具有對自定義庫的依賴性,而Gradle僅在使用項目依賴項時只包含我的自定義庫,而不是我使用文件依賴項來包含庫的jar文件。我使用API​​ levee 19 SDK構建了我的應用程序和庫。爲什麼Gradle只包含來自我的庫的項目依賴關係

未能從build.gradledependencies部分:

dependencies { 
    compile 'com.android.support:appcompat-v7:+' 
    compile files('libs/MyLibrary.jar') 
} 

如果我使用上述dependencies部分,沒有在MyLibrary.jar類都包含在構建apk文件,如通過提取其classes.dex驗證,運行dexdump。我還驗證了所有的類都存在於我正在使用的jar文件中。

如果我用下面的dependencies部分,然後所有在MyLibrary的類都包含在APK文件:

dependencies { 
    compile 'com.android.support:appcompat-v7:+' 
    compile project(':MyLibrary') 
} 

我使用過Android Studio 0.4.0,搖籃1.9,我覺得Gradle插件0.7.1。

這是怎麼回事?我真的很想用API級別18 sdk來構建我的應用程序來測試兼容性,但除非我能夠將jar文件用於我的庫,否則我無法實現這一目標。

+1

你不應該有一個+的版本?編譯'com.android。支持:appcompat -v7:19+' – Benoit

+0

您是否試圖將jar文件本身包含在您的APK中,或只是從jar中的類? – superEb

+0

我只是試圖從jar中包含類。 – Greg

回答

3

好的,這是我的錯。我的庫的build.gradle被配置爲只包含jar文件中的源文件。以下是不正確 Gradle代碼,會給你和我一樣的問題。

task jar(type: Jar) { 
    from android.sourceSets.main.java 
} 

This answer顯示瞭如何修復jar文件的創建。這是醜陋的,但它似乎工作。

0

這有點長,但如果你沒有使用Android Studio 0.4.0並且你剛剛添加了jar文件,請嘗試清理你的項目並從頭開始重建。我們已經看到了這個bug:https://code.google.com/p/android/issues/detail?id=63366在沒有清理項目的情況下庫不包含在內,儘管這個bug指的是從Maven下載的依賴項,而不是本地的jar文件(這可能是或者可能不是重要的區別)。這在Android Studio 0.4.0中得到修復(更具體地說,在Gradle插件0.7.0中)。

+0

我已經在使用Android Studio 0.4.0了,我想我正在使用Gradle插件0.7.1。我如何檢查我正在使用哪個版本的Gradle插件?每次更改後,我也嘗試清潔和重建。 – Greg

+0

如果你使用的是android studio 0.4.0,那麼你至少使用了0.7.0的插件,並且不應該觸及這個特定的bug。所以這是別的,雖然我不完全知道什麼。 –

+0

我剛剛嘗試創建一個簡單的測試用例,但無法重現您的問題。我開始懷疑Android插件如何將來自多個dexed sourc.es的APK鏈接在一起(基於我見過的類似性質的其他問題報告),但是如果存在問題,這不是一個微不足道的問題一個找到 –

1

Jar任務不包括最終jar工件中的依賴項。

Gradle documentation對jar任務:

jar任務創建一個包含類文件和項目的 資源的JAR文件。

它假定您正在爲您的項目構建jar,所有依賴關係將在運行時提供。與war相反,所有依賴項通常都包含在最終的工件中。

如果您需要創建包含依賴關係的「fat jar」,請查看特定的插件,例如gradle-fatjar-plugin

+0

我沒有創建jar,我正在創建一個Android應用程序。該應用程序不包括我想要構建的jar中的類。 – Greg

+0

當您聲明對某個庫的依賴關係時,並不意味着該依賴關係將被展開幷包含在最終的工件中,除非您明確地這樣說。你可以看看你的項目的'build'目錄,看看到底在哪裏,試着用'--info'標誌運行'gradle'。 – kukido

+0

如何控制最終工件中包含的* *?所有其他的依賴項都包含了它們的所有類,如果我將此依賴項聲明爲「項目」依賴項而不是「文件」依賴項,則會包含它的類。 – Greg

相關問題