2010-04-22 85 views
3

我正在爲Android應用程序開發一個不使用本機代碼(JNI)的庫。我已經嘗試在我的Android項目中將庫作爲外部jar提供,但是此方法不包括apk中的庫內容,因此當在模擬器或設備中運行時拋出class not found錯誤。我也嘗試創建庫作爲一個Android項目本身,這確實有效,但只適用於公共靜態屬性(而不是方法)。隨着庫和應用程序都在單獨的apk中,我可以看到虛擬機注意到對庫的引用,並且可以讀取一些屬性,但是當試圖在庫中實例化一個類時,我得到的類沒有找到,即使我可以讀取從它的公共靜態屬性(非常沮喪!!)。不是基於JNI的Android共享庫

我意識到Davlik字節代碼是不一樣的Java字節代碼,但我無法找到,即使有關如何解決一下,似乎是在Android的一個非常簡單的問題,良好的信息。我正在尋找舊的PlatformLibrary的東西,但我不相信這將工作,因爲樣品已從Android站點刪除:(

所以,如果你可以幫我,如果我在這之前找到答案發生了,我會分享它。

萬歲的Android!

+0

繼承人鏈接到PlatformLibrary http://android.git.kernel.org/?p=platform/development.git;a=tree;f=samples/PlatformLibrary;hb=cupcake – 2010-04-22 18:19:04

回答

4

我試圖suppling圖書館作爲 在我的Android項目 外部罐子,但這種方法不包括在APK的 庫內容和因此 在r時拋出class not found錯誤在仿真器或設備中的。

將JAR放入您的libs/目錄中,它會自動包含在APK中。

這個sample project來自我的一本書,用這種方式顯示使用BeanShell JAR。此外,所有的GitHub的回購累計my GitHub page開始「cwac-」旨在建立JAR文件的項目被列入經libs/目錄的Android項目。

+0

我剛剛發現,這是按項目完成它的一種方法,但它不允許使用文本到語音庫所使用的相同類型的共享。 – 2010-04-22 20:55:59

+0

然後通過單獨的APK嘗試遠程服務。或通過單獨的APK提供內容提供商。或通過單獨的APK廣播「內容」。或者修改固件並用自己的庫建立自己的設備。該'PlatformLibrary'是修改操作系統,通過C/C++和JNI,而這恰恰是你的問題的主題說的話你不想要的。 – CommonsWare 2010-04-22 21:47:32

+0

是,PlatformLibrary不適合我們在這種情況下工作,我想和意圖可能是我們必須要走的路。 – 2010-04-22 23:15:24