2016-11-30 155 views
3

因爲我需要對Smack庫進行一些更改,所以我想將Smack作爲庫添加到我的Android Studio項目中。我已經下載從Smack Github repository ZIP文件,並做以下步驟 - 因爲我發現,而尋找解決方案將庫(Smack)添加到Android Studio項目

(1)在我的項目的根文件夾創建一個新的文件夾libs和複製的提取,並更名爲文件夾/Smack換成libs。所以它現在的結構如下:

root/libs/Smack/ 

(2)我修改了settings.gradle在根文件夾

include ':app' 
include ':libs:Smack' 

(3)通過File -> Project Structure -> Modules app -> Dependencies,我已經添加:libs:Smack作爲模塊依賴

(4)我已將以下行添加到root/app/build.gradle

compile project(':libs:Smack') 

根據我在網上找到的大多數消息來源,這應該是它。但是,我得到了一個錯誤Gradle project sync failed。更具體地說,我得到:

/path-to-root/libs/Smack/build.gradle 
Error:(42, 0) Project with path ':smack-integration-test' could not be found in project ':libs:Smack'. 

當我看着的文件和行它說project(':smack-integration-test')。不知何故,這無法找到。但是,有一個文件夾libs/Smack/smack-integration-test。它看起來很簡單,但我似乎錯過了一些關鍵的東西。

編輯: Android Studio中實際上支持導入搖籃項目:File -> New -> New Module打開,我選擇Import Gradle Project在那裏我有選擇的,在這裏,咂了源目錄的對話窗口。這樣做使得在settings.gradle中包含所有正確的陳述。

但是,沒有我得到的錯誤:

Error:(386, 0) Could not get unknown property 'clirr' for project ':smack-integration-test' of type org.gradle.api.Project. 

因爲我不是足夠的搖籃熟悉,我不知道這可能意味着什麼,以及我的谷歌搜索也沒有推進我。

回答

1

我不會以這種方式添加的項目,你可以把它單獨的項目進行項目文件夾結構,你會修改它,建立它。最簡單的方法是構建jar文件(S)將它複製到你的項目,包括爲gradle這個:

對於罐子,在項目中創建libs文件夾和複製文件存在,gradle這個包括像這樣的作品:

compile fileTree(dir: 'libs', include: ['*.jar']) // for all of the jars in the libs folder 
compile files('libs/xyz.jar') // for a specific file 

特別是對於啪項目,你可以用一個

gradle assemble 
在它

做的根文件夾

的輸出中的jar(S)的各F特異性老,每個例子爲Android我看到:

smack-android\build\libs\

smack-android-extensions\build\libs\

+0

我看着它。但是從Gradle項目創建JAR文件看起來並不簡單。我可能不得不這樣做,我只是希望能夠快速解決問題,即使它很髒,因爲它僅用於測試目的。 – Christian

+0

我用Smack庫在本地做了一個測試,它非常簡單,如果你在它的根目錄下運行gradle命令,它會構建所有的子項目。從那裏你可以從構建文件夾中選擇與你相關的jar(s) – petrumo

+0

我已經接受了答案,因爲以這種方式取得了進展。我能夠創建各種jar文件並將其導入到我的項目中。但是,用各自的'compile files('libs/... jar')'行代替'compile'org.igniterealtime.smack:smack-android:4.1.0''行會在我的源代碼中拋出錯誤。我假設有不同的版本。 – Christian

0

不是你的問題的解決方案,但一個甚至可能是更好的解決辦法可能是以下幾點:

jitpack.io爲您提供了GitHub的庫添加到您的項目作爲搖籃的依賴關係,從而使您可以省略的過程手動添加jar。 如何實現這一點最好由JitPack自己描述。 總之: 的JitPack庫添加到您的build.gradle:

repositories { 
     ... 
    maven { url 'https://jitpack.io' } 
    } 

您現在可以添加GitHub的回購作爲相關性:

dependencies { 
     compile 'com.github.igniterealtime:Smack:-SNAPSHOT' 
    } 

刷新您的項目後,你應該能夠使用預期的API。

+0

我將能夠修改Smack的源代碼?到目前爲止,我通過在'build.gradle'中添加諸如'compile'org.igniterealtime.smack:smack-android:4.1.0''作爲依賴項來包含Smack。這工作得很好,但我無法修改源代碼。 – Christian

+0

否 - Smack將作爲jar添加到項目中 – Lukas

+0

無論如何,編輯API的源代碼似乎並不是一個好的做法 - 我個人而言,我只想跟Kotlin一起使用,並使用所需的函數擴展API;) – Lukas

1

我不確定我會推薦創建兩個項目中的多模塊構建。這可能無法按預期工作。您可能需要將smack settings.gradle中的大部分/所有模塊添加到您自己的settings.gradle。如果你真的想這樣做,我建議你使用prezi-pride從命令行管理這個。

我不是一個Android用戶所以不知道哪個版本(S)搖籃的Android插件可與。如果android支持Gradle 3.1+,那麼你可以使用新的composite build support。這是迄今爲止最乾淨的解決方案,我推薦這種方法

另一種解決方案是分別在你的開發建設項目做

compile fileTree(dir: '../smack/project-1/build/lib', include: '*.jar') 
compile fileTree(dir: '../smack/project-2/build/lib', include: '*.jar') 
// etc 

另一種解決方案是publish the smack artifacts to maven local並在您的項目從那裏引用它們。這很可能是第二個最好的解決方案,如果您不能使用複合材料建造

+0

我已經將所有模塊添加到我的settings.gradle中,比如'include':libs:Smack:smack-integration-test'',並且還添加了所有模塊依賴項(參見我的問題中的(3))。沒有變化,同樣的錯誤。 – Christian

+0

正如我所說...它可能無法正常工作。嘗試(1)複合構建,(2)mavenLocal()或(3)prezi-pride –

+0

我有點解決了我最初的問題,但偶然發現了下一個問題。自動導入的確將所有包含在你的建議中的'settings.gradle'中,只是格式與我的嘗試不同。 – Christian

相關問題