2013-04-11 68 views
1

我想添加一個外部jar庫到我的Android項目。它編譯並下載到我的設備正常,但我得到了以下的logcat:外部庫jar不完整

04-11 08:17:16.849: E/AndroidRuntime(16053): FATAL EXCEPTION: main 
04-11 08:17:16.849: E/AndroidRuntime(16053): java.lang.NoClassDefFoundError: org.puredata.android.service.R$raw 
04-11 08:17:16.849: E/AndroidRuntime(16053): at org.puredata.android.service.PdService.onCreate(PdService.java:184) 
04-11 08:17:16.849: E/AndroidRuntime(16053): at android.app.ActivityThread.handleCreateService(ActivityThread.java:1951) 
04-11 08:17:16.849: E/AndroidRuntime(16053): at android.app.ActivityThread.access$2500(ActivityThread.java:117) 
04-11 08:17:16.849: E/AndroidRuntime(16053): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:985) 
04-11 08:17:16.849: E/AndroidRuntime(16053): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-11 08:17:16.849: E/AndroidRuntime(16053): at android.os.Looper.loop(Looper.java:130) 

這個問題似乎是R類不包括在庫中編輯。 Through this question我來到here其中這混亂的文字規定

重要變化:我們已經改變了庫項目產生 和包r類:

  • R類沒有在jar輸出包裝的圖書館項目了。
  • 庫項目不會爲其依賴的庫項目生成R類。只有主應用程序項目與他們自己一起生成Library R類。

    這個 意味着庫項目不能從他們依賴的另一個 庫項目導入R類。這不是必需的,因爲他們的 自己的R類包括所有必要的資源。需要注意的是應用 項目從引用的庫 仍然可以導入將R類項目,但同樣,這是沒有必要爲自己的研發類包括 所有資源

所以,我有點卡住。我如何/能否強制圖書館列入其所需的資源?如果沒有,我怎樣才能在一個我想提供的庫中使用R類,而無需分享我的項目代碼?

+1

Android庫不是JAR。它們包含資源,因此它們必須作爲源代碼鏈接 - 請參閱Aleks提供的答案來查看文檔。 (常規庫JAR可用於Android項目,但它們不包含資源。) – 2013-04-11 13:40:40

回答

4

Android庫項目與普通庫不同。對於API級別14之前的Android版本,您無法將它們編譯爲獨立的jar文件幷包含到您的項目中。相反,您需要將它們作爲庫項目加入您自己的Android項目中。這意味着你需要擁有庫項目的完整源代碼。沒有它,你不能把它用作圖書館項目。

當您將它作爲庫項目包含到您自己的Android項目中並編譯您的項目時,構建工具將組合來自庫項目和您自己項目的資源定義(R類)並創建一個R類。然後,您將可以訪問您自己的項目和圖書館項目中的資源。

從API級別14開始,庫項目可以編譯爲獨立的jar文件,您可以在Google的開發人員文檔站點上找到有關如何執行此操作的信息。請通過Android Library Projects文檔瞭解更多信息。

+0

謝謝!這實際上是一個解決方法,我試圖申請,所以我可以編譯一個不同的項目...我想我必須處理那個問題。 – DigCamara 2013-04-11 14:45:18