Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建具有自定义名称空间(如android.R)的android资源库?_Java_Android_Android Resources_Android Library - Fatal编程技术网

Java 创建具有自定义名称空间(如android.R)的android资源库?

Java 创建具有自定义名称空间(如android.R)的android资源库?,java,android,android-resources,android-library,Java,Android,Android Resources,Android Library,我正在从事一个Android项目(使用AndroidStudio,Gradle),我将一些逻辑和小部件拆分为子库项目 我发现R.string.xxx或其他R引用被合并,但如果库与应用程序模块同名,我无法获取库的资源值。(我使用了[libpacakgename].R.string.appname,但资源仍然是应用程序模块的,而不是库的。) 是否有一种方法可以使用类似Android资源的资源:Android.R.string.xxx,或者使用类似于myapp:string/xxx的xml,其中“my

我正在从事一个Android项目(使用AndroidStudio,Gradle),我将一些逻辑和小部件拆分为子库项目

我发现
R.string.xxx
或其他
R
引用被合并,但如果库与应用程序模块同名,我无法获取库的资源值。(我使用了
[libpacakgename].R.string.appname
,但资源仍然是应用程序模块的,而不是库的。)


是否有一种方法可以使用类似Android资源的资源:
Android.R.string.xxx
,或者使用类似于
myapp:string/xxx
的xml,其中“myapp”成为我的自定义命名空间或类名


顺便说一句,我还发现有时attr id会发生冲突,导致编译失败。

这可能是通过修改内部gradle任务实现的,但这不是预期的情况


一个简单的解决方案是在库资源标识符前面加上前缀,例如(包)名称。

“有没有一种方法可以使用像Android resource:Android.R.string.xxx这样的资源,或者使用像myapp:string/xxx这样的xml,“myapp”成为我的自定义命名空间或类名”——我不知道。库是一种组织工具,但库中的所有内容都会合并到主应用程序中。应用程序需要能够覆盖库中的资源,因为库的值可能不适合应用程序的场景。您可以使用前缀和
public.xml
来帮助避免意外重写,但仅此而已。@commonware我知道这是一个旧注释,但我还是想表达我的意见。想象一下,将Java包作为一种组织工具,但无论如何,所有东西都会合并到一个全局包中。我觉得这在Android上非常令人沮丧。如果安卓能够保留其名称空间,那么它也没有理由不能为库保留名称空间,除非这是一个深思熟虑的设计决策。至少我是这么看的,也许我遗漏了什么。更糟糕的是,关于这件事的关键部分的文件找不到。例如,“app”命名空间声明中的“res auto”可能代表“resolve automatically”,它解析清单中指定的包名。(至少,我认为是这样。)“style”属性是唯一没有名称空间的属性,这是怎么回事?是不是因为它只是一个简单的替换机制,只内联样式中指定的所有属性?为什么在样式中省略名称空间意味着使用“app”名称空间,而您需要为android属性指定“android”名称空间?只是一团糟。找到这个问题也花了我很多时间。不管我用谷歌搜索什么,我得到的都是“只要输入这个,它就行”之类的资源。大声喊叫。