2011-11-08 21 views
2

這一個讓我難住。我顯然錯過了一些東西,但我無法弄清楚什麼。我的(非Android)庫內部正在使用的庫未包含在classes.dex

我有一個庫(不是Android庫 - 只是一個普通的Java庫項目),它反過來使用其他庫。因此,設置爲:

myApi.jar 

    | 
    +-- com/myapi/ ... (.class files here). 
    | 
    +-- libs/ 
     | 
     +-- lib1.jar 
     +-- lib2.jar 

現在,當我包括在Android項目的libs目錄項目myApi.jar,如MyAndroidProject/libs,只有com.myapi. ...類越來越列入classes.dex文件。來自lib1.jar和lib2.jar的類不包含在classes中.dex

明顯的解決方法是從myApi.jar文件中刪除lib1.jar和lib2.jar;而是將它們放入MyAndroidProject/libs。但是,這意味着myApi的用戶現在必須知道在構建路徑上還有其他JAR文件。這是我想要避免的。

那麼,有什麼特別的我需要做的,以包括庫文件JAR在classes.dex文件中內部使用的JAR文件嗎?

+0

爲什麼這會得到一個downvote?完美有效和明確的問題與細節恕我直言。 – 2011-11-08 12:41:08

+0

我注意到了downvote.I不介意,只要down-voter也解釋原因! – curioustechizen

回答

1

但是,這意味着myApi的用戶現在必須知道在構建路徑上放置了額外的JAR文件。這是我想要避免的。

這裏,Android的行爲與普通的Java的 - 如果myApi.jar均支持Swing應用程序,你將需要要麼所有的JAR文件分發的所有JAR文件或合併成一個。與Android相同的東西。歡迎您將依賴JAR中的所有類摺疊爲自己的類,或者重複使用JAR的項目也將您的依賴添加爲它們自己的依賴關係。

請注意,合併JAR內容可能會對技術或授權產生影響,因此請確保您確實想要這樣做。

+0

通過將所有類「摺疊」到我的JAR中,是否將類從相關JAR複製到我自己的JAR的根中? – curioustechizen

+1

@ techie.curious:是的。基本上,組合的JAR將包含所有JAR的組合內容。例如,JTwitter曾經這樣做過,它將自己的代碼與'org.json' JAR結合起來,大概是爲了方便起見。您可能遇到重複的技術問題(例如'MANIFEST.MF')。請注意,如果我們真的很幸運,一旦我們可以將真正的Android庫項目打包爲JAR(也許是R16工具),也許它會爲我們做這種依賴JAR合併。就個人而言,現在我只是單獨分發依賴關係,因爲這在傳統Java開發中非常典型。 – CommonsWare

+0

再次感謝@CommonsWare。我將繼續提出您的建議 - 分發(或指向)依賴庫JAR。在任何情況下,依賴項都是標準的(SimpleXML和Gson),所以希望可以減少開發人員使用API​​的麻煩。 – curioustechizen

相關問題