请参阅库jar中的android资源

时间:2013-07-10 20:48:55

标签: java android android-library

我有一个Android库项目(A),由几个Android应用程序项目使用。放置在库项目的libs文件夹内的库jar引用此项目中的com.lib.R资源文件(比如图像)。

当应用程序项目(B)使用此库时,它可能会调用一些触发libs文件夹中的jar文件的代码来引用com.lib.R引用的资源。遗憾的是,任何访问这些资源的尝试都会导致以下错误。

java.lang.NoClassDefFoundError: com.lib.R$layout

如果从src/的{​​{1}}文件夹或Lib A的{​​{1}}文件夹访问这些资源,则他们会正确解析为src/值,并且可以使用,但我不想这样做,并将代码保存在Project B文件夹中。

我的问题 - 为什么会发生这种情况,如何解决?一个解决方法是使用int以编程方式获取资源ID,但这可能会非常快。有没有办法我仍然可以使用libs下的库jar中的resource.getIdentifier(),而无需使用辅助方法手动解析它?

以下是帮助您解决问题的说明。

来自图书馆的资源访问

Resource access from library

1 个答案:

答案 0 :(得分:2)

  

以及如何改进它

我将假设您的目标是能够以源代码形式分发A和B,而不是some_lib.jar的内容(“这样做的原因是为了避免暴露java文件结束用户“)。在那种情况下:

步骤1:创建另一个库项目(L),其中包含来自some_lib.jar的源代码及其引用的所有资源(将这些资源移出A和L)

步骤2:在the recipe that I just wrote about earlier today

之后创建一个分发库项目(LD)

步骤3:依赖LD,获取资源以及已编译的LAR代码

步骤#4:分发源时,也要分发LD

我希望通过为some_lib代码创建一个正式的库项目,并通过在该库项目中声明所需的资源,您将能够编译一个适用于B的JAR。

现在,这比我尝试的要复杂得多,因此完全有可能会产生与您遇到的相同的结果。如果是这种情况,那么你运气不好,至少在你切换到基于Gradle的构建系统之前,在这种情况下L / LD成为AAR文件,并且希望能够正常工作。