gpt4 book ai didi

java - 从库 jar 中引用 android 资源

转载 作者:行者123 更新时间:2023-11-30 09:20:07 25 4
gpt4 key购买 nike

我有一个 Android 库项目 (A),它被多个 Android 应用程序项目使用。放置在 libs 中的库 jar图书馆项目的文件夹指的是com.lib.R该项目中的资源文件(比如图像)。

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

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

如果从 src/ 访问这些资源Lib A 的文件夹或 src/ Project B 的文件夹, 它们正确解析为 int值并可以使用,但我不想这样做并将代码保留在 libs 中文件夹。

我的问题 - 为什么会发生这种情况,我该如何解决?一种解决方法是使用 resource.getIdentifier() 以编程方式获取资源 ID。 ,但这会很快成为一种痛苦。有没有办法我仍然可以使用 com.lib.R来自 libs 下的库 jar无需使用辅助方法手动解决它?

这是一个可以帮助您解决问题的插图。

从图书馆获取资源

Resource access from library

最佳答案

and how I can improve on it

我假设您的目标是能够以源代码形式分发 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:让 A 依赖 LD,获取资源以及 L 代码的已编译 JAR

第 4 步:分发源代码时,还要分发 LD

我希望通过为 some_lib 的代码创建一个正式的库项目,并在该库项目中声明它需要的资源,您将能够编译一个可以工作的 JAR对于 B.

现在,这比我尝试过的要复杂,所以这完全有可能导致与您遇到的结果相同的结果。如果是这种情况,那么你就不走运了,至少在你切换到基于 Gradle 的构建系统之前是这样,在这种情况下,L/LD 变成了一个 AAR 文件,并且有望工作。

关于java - 从库 jar 中引用 android 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17580585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com