2013-07-12 62 views
3

我正在開發一個android庫,並希望導出一個JAR文件,我可以分發給其他人在其應用程序中使用它。我不想分發源代碼,因爲它包含發佈到我的Web服務器的詳細信息。爲Android庫分發創建JAR

我已經嘗試使用在bin目錄中創建的JAR文件,並將jar文件複製到我的項目中,並在我的項目中引用它並勾選導出按鈕。

當我嘗試運行引用已複製的庫的項目時,我的應用程序會拋出一個異常NoClassDefFoundError。我做了一些谷歌搜索,我發現的一切都表明你必須提供源代碼,並讓用戶導入到他們的IDE中,然後將該項目引用到他們的應用程序中,我不想這樣做。它必須是可能的,因爲其他公司可以爲可以包含的庫提供JAR文件。

感謝您的幫助。

回答

6

我不想分發源代碼,因爲它包含發佈到我的Web服務器的詳細信息。

請記住,任何想從JAR中獲取數據的人。

它必須是可能的,因爲其他公司可以爲可以包含的庫提供JAR文件。

AFAIK,這個配方仍然有效:

  1. 創建一個Android庫項目,用你的源代碼,資源,這樣,得到它的工作

  2. 編譯Java源(例如通過Ant)並將其變成JAR文件

  3. 創建您的原始Android庫項目的副本,以用作分發Android庫項目

  4. 將步驟#2中編譯的JAR放入步驟#3的分佈庫項目的libs/中。

  5. 刪除分配庫項目的src/一切(但保留現在空src/目錄裏有)

  6. 分發配送庫項目(如ZIP它)

這有效地爲您提供了Play Services SDK - 一個沒有源代碼的庫項目,而是一個在libs/中的JAR,以及資源等。

我會明天重新配置這個配方,並會嘗試記住更新這個答案,如果我發現它需要調整當前的作物。

而新的基於Gradle的構建系統支持分發庫的AAR包等,儘管我還沒有玩過這個。


UPDATE

這個配方的作品,只要庫項目本身不具備在另一個JAR或庫項目的依賴。在這些情況下,構建過程中的東西似乎會變得混亂 - 一切都可以編譯,但依賴關係中的類引用無法在運行時解析。

+0

回答聲音更有希望然後我的。我也會嘗試。 – Ercan

+0

@CommonsWare很抱歉因爲延遲迴到你身邊,變得非常忙於其他事情。如果沒有其他依賴關係,它會按照您的說法工作,但是我的庫確實需要其他不起作用的庫。儘管感謝您的幫助。非常感謝 – Boardy

0

您是否嘗試將jar文件放在libs文件夾中?如果您導出的是Android庫文件夾,請確保它沒有/res文件夾。正如你所知道的,你不能從jar中引用你的res文件夾,因此你必須使用庫項目來引用你的res文件夾(drawable,xml等等)。另一方面,你不能使你的代碼安全(part你說關於發佈到你的web服務)通過使用它作爲jar,因爲它很容易通過逆向工程檢索。你最好使用一些編碼(比如base64或bouncycastle提供的任何算法)

+0

啊,它有一個/ res文件夾,因爲它引用了string.xml文件 – Boardy