1

我正在尝试将外部 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 类。通过这个问题,我到达这个令人困惑的文本状态的地方

重要更改:我们更改了库项目生成和打包 R 类的方式:

  • R 类不再打包在 Library Projects 的 jar 输出中。
  • 图书馆项目不会为他们所依赖的图书馆项目生成 R 类。只有主应用程序项目会生成库 R 类以及它们自己的类。

    这意味着库项目无法从它们所依赖的另一个库项目中导入 R 类。这无论如何都不是必需的,因为它们自己的 R 类包含所有必要的资源。请注意,应用程序项目仍然可以从引用的库项目中导入 R 类,但同样,这不是必需的,因为它们自己的 R 类包含所有资源

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

4

1 回答 1

4

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

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

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

于 2013-04-11T13:37:53.293 回答