我正在尝试将外部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类 他们依赖的图书馆项目。无论如何,这不是必要的 自己的R类包括所有必要的资源。请注意该应用 项目仍然可以从引用的库中导入R类 项目,但同样,这是不需要的,因为他们自己的R类包括 所有资源
所以,我有点卡住了。我如何/可以强制库包含其所需的资源?如果没有,我如何在我想要提供的库中使用R类而不共享我的项目代码?
答案 0 :(得分:4)
Android库项目与普通库不同。对于API级别14之前的Android版本,您无法将它们编译为独立的jar文件并包含在您的项目中。相反,您需要将它们作为库项目包含在您自己的Android项目中。这意味着您需要拥有库项目的完整源代码。没有它,你就不能将它用作图书馆项目。
当您将它作为库项目包含到您自己的Android项目中并编译您的项目时,构建工具将组合库项目和您自己的项目中的资源定义(R类)并创建一个R类。然后,您将可以访问自己的项目和库项目中的资源。
从API级别14开始,库项目可以编译到独立的jar中,您可以在google开发人员的文档站点上找到有关如何执行此操作的信息。阅读Android Library Projects文档以获取更多信息。