像 android.R 一样创建带有自定义命名空间的 Android 资源库?

5
我正在开发一个Android项目(使用Android Studio和Gradle),并将一些逻辑和小部件拆分到子库项目中。
我发现R.string.xxx或其他R引用是合并的,但如果我的库模块与应用程序模块具有相同的名称,则无法获取我的库资源值。(我使用[libpacakgename].R.string.appname,但资源仍然是应用程序模块的,而不是库的。)
是否有一种像Android资源一样使用资源的方法:android.R.string.xxx,或者在xml中像myapp:string/xxx这样,在其中“myapp”成为我的自定义命名空间或类名。
顺便说一句,我还发现有时attr id可能会冲突,导致编译失败。

有没有一种使用资源的方法,例如Android资源:android.R.string.xxx,或在xml中像myapp:string/xxx这样,其中“myapp”成为我的自定义命名空间或类名 - 据我所知没有。库是一种组织工具,但是库中的所有内容都会合并到主应用程序中。应用程序需要能够覆盖库中的资源,因为库的值可能不适用于应用程序的情况。您可以使用前缀和public.xml来帮助避免意外覆盖,但仅此而已。 - CommonsWare
@CommonsWare 我知道这是一个旧评论,但我仍想表达我的观点。想象一下将Java包作为组织工具,但最终所有内容都被合并到一个全局包中。我发现这在Android上非常令人沮丧。如果Android可以保留其命名空间,它也应该能够对库执行此操作,除了这是一个刻意的设计决策之外。至少从我看来是这样的,也许我漏掉了什么。 - Franko Leon Tokalić
更糟糕的是,关键部分的文档无处可寻。例如,在'app'命名空间声明中的'res-auto'可能代表'自动解析',并且它会解析清单中指定的包名称。(至少我认为是这样的。) - Franko Leon Tokalić
“style”属性为什么是唯一没有命名空间的属性?这是因为它只是一个简单的替换机制,可以内联指定在样式中的所有属性吗?而且为什么在样式中省略命名空间意味着使用“app”命名空间,但对于Android属性,您需要指定“android”命名空间?这真是一团糟。我花了很长时间才找到这个问题。无论我搜索什么,我都只能得到“只需输入这个,它就可以工作”的资源。发泄完毕。 - Franko Leon Tokalić
1个回答

1
这可能通过修改内部gradle任务实现,但这不是预期的情况。
一种简单的解决方案是使用例如(包)名称为前缀来标识库资源。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接