外部库jar不完整

时间:2013-04-11 13:32:43

标签: android shared-libraries android-resources

我正在尝试将外部jar库添加到我的Android项目中。它正确编译并下载到我的设备,但我得到以下logcat:

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 class不再打包在Library Projects的jar输出中。
  • Library Project不为它们所依赖的库项目生成R类。只有主应用程序项目与它们自己一起生成Library R类。
      

    此   表示库项目无法从另一个中导入R类   他们依赖的图书馆项目。无论如何,这不是必要的   自己的R类包括所有必要的资源。请注意该应用   项目仍然可以从引用的库中导入R类   项目,但同样,这是不需要的,因为他们自己的R类包括   所有资源

所以,我有点卡住了。我如何/可以强制库包含其所需的资源?如果没有,我如何在我想要提供的库中使用R类而不共享我的项目代码?

1 个答案:

答案 0 :(得分:4)

Android库项目与普通库不同。对于API级别14之前的Android版本,您无法将它们编译为独立的jar文件并包含在您的项目中。相反,您需要将它们作为库项目包含在您自己的Android项目中。这意味着您需要拥有库项目的完整源代码。没有它,你就不能将它用作图书馆项目。

当您将它作为库项目包含到您自己的Android项目中并编译您的项目时,构建工具将组合库项目和您自己的项目中的资源定义(R类)并创建一个R类。然后,您将可以访问自己的项目和库项目中的资源。

从API级别14开始,库项目可以编译到独立的jar中,您可以在google开发人员的文档站点上找到有关如何执行此操作的信息。阅读Android Library Projects文档以获取更多信息。