2017-02-24 79 views
0

第三LIB我有一個問題
java.lang.NoClassDefFoundError:失敗分辨率:Lorg /阿帕奇/公/郎/ StringUtils的」;
當我試圖運行一個Android應用程序,在我自己的Android庫上聲明。
Fllowing是我的步驟:
創建一個android項目,然後在其中構建一個名爲「sptvlib」的新模塊。
這個模塊依賴於一個名爲「共同琅」第三方LIB這是一個字符串utils的lib.please看到「sptvlib」 gradle這個文件:爲什麼lib模塊不能包括在Android Studio中

dependencies { 
    ... 
    compile 'org.apache.directory.studio:org.apache.commons.lang:2.6' 
    ... 
} 

建造整個項目後,我得到了模塊sptvlib.aar文件,並將其複製到另一個android應用程序項目的「libs」目錄中。

repositories { 
    flatDir { 
     dirs 'libs' 
    } 
} 
dependencies { 
... 
    compile(name: 'sptvlib', ext: 'aar') 
... 
} 

我成功地建立了這個應用程序,但是當它運行時,logcat的表現 「java.lang.NoClassDefFoundError」 的錯誤。 我必須重新添加「commons.lang」聲明到應用程序項目gradle,然後它運行正常...我們已經添加了第三方庫到我的模塊使用「編譯」。爲什麼在我自己的模塊上失效的應用程序仍然無法在運行時找到它?

回答

0

我假設你在你的主應用程序項目中使用了commons.lang的一些函數。

由於您使用的是sptvlib庫的已編譯彙編代碼,因此您可以在主應用程序項目中使用sptvlib的已編譯公開函數。

但是你不能直接在你的主應用程序項目中訪問commons.lang的庫函數。 這是因爲您沒有將sptvlib代碼作爲模塊添加到您的應用程序項目中。你只使用sptvlib的編譯版本。

+0

因此,我建立的「sptvlib.aar」不是一個像「rxjava」和「改造」等真正的庫...如果一些其他應用程序使用「sptvlib」的功能「commons.lang」庫並運行正常,我們需要在每個應用程序項目中創建一個新模塊,並在其中複製「sptvlib」代碼,或者我錯了?如果有一些其他應用程序使用依賴於「commons.lang」庫的「sptvlib」的功能應該完美地工作,那麼您可以通過一些示例來幫助我?如何創建一個「真實」庫?謝謝^ _^ –

+0

。但是你不能直接在應用程序中使用「commons.lang」的功能。 – nnn

+0

我的應用程序不直接使用第三個庫的功能,只調用依賴於第三個庫的sptvlib的一些方法... –