Android 上的 res/values/public.xml 文件有什么用?
我在谷歌上搜索过,但找不到任何相关结果。
我还检查了官方Android文档和此页面(所有可用资源)是我能找到的全部。我在此页面上找到的相关链接(指向res/values/
目录)是:
这些页面不会告诉任何有关 res/values/public.xml
文件的信息。
这是我为此类文件找到的示例 。
小片段
<?xml version="1.0" encoding="utf-8"?>
<resources>
<public type="attr" name="commentTextColor" id="0xAA010007" />
<public type="drawable" name="add_icon_bl" id="0xAA020000" />
<public type="layout" name="act_date_picker" id="0xAA030001" />
<public type="anim" name="activity_slide_from_bottom" id="0xAA040000" />
<public type="xml" name="pref_menu" id="0xAA050000" />
<public type="raw" name="alert_bell_animation_bl" id="0xAA060000" />
<public type="array" name="taskRepeat" id="0xAA070000" />
<public type="color" name="theme_main_color_bl" id="0xAA080000" />
<public type="string" name="no_internet" id="0xAA0a0001" />
<public type="id" name="page1" id="0xAA0d0015" />
</resources>
正如您从 type
属性中看到的,它几乎包含您通常放置在单独的资源类型中的几乎所有标准资源类型 res
目录下的目录...
为什么要滥用 Android 提供的目录并使用单个文件来存储所有值在?有人可以提供更多相关信息吗?
I've searched on Google, but couldn't find any relevant results.
I also checked the official Android docs and this page (for all the available resources) was all I could find. The relevant links (to the res/values/
directory) I found on this page were:
These pages don't tell anything about the res/values/public.xml
file.
Here is an example I found for this type of file.
Small snippet
<?xml version="1.0" encoding="utf-8"?>
<resources>
<public type="attr" name="commentTextColor" id="0xAA010007" />
<public type="drawable" name="add_icon_bl" id="0xAA020000" />
<public type="layout" name="act_date_picker" id="0xAA030001" />
<public type="anim" name="activity_slide_from_bottom" id="0xAA040000" />
<public type="xml" name="pref_menu" id="0xAA050000" />
<public type="raw" name="alert_bell_animation_bl" id="0xAA060000" />
<public type="array" name="taskRepeat" id="0xAA070000" />
<public type="color" name="theme_main_color_bl" id="0xAA080000" />
<public type="string" name="no_internet" id="0xAA0a0001" />
<public type="id" name="page1" id="0xAA0d0015" />
</resources>
As you can see from the type
attribute, it contains pretty much all the standard resource types that you normally put in separate directories under the res
directory...
Why would one want to misuse the directories that Android provides and use a single file to store all the values in? Can someone give more information about this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
文件 res/values/public.xml 用于为 Android 资源分配固定资源 ID。
考虑 res/values/strings.xml 中的这些字符串资源集:
Android 资源打包工具 (aapt) 可能会在编译应用程序时为这些资源分配以下资源 ID:
现在,更改该集的字符串资源
,您会注意到
@string/string3
的资源 ID 已更改:为了防止这种情况,您可以使用 res/values/public.xml:
这将导致资源 ID 被分配如下
: res/values/public.xml 很少有任何用途,因为分配给资源的资源 ID 并不重要。当它们发生变化时,整个应用程序都会重新构建,因此 Java 代码中通过资源 ID 对资源的任何引用都会更新。
res/values/public.xml 最重要的用户是 Android 平台本身。针对旧版本 Android 构建的应用程序假定某些资源具有特定的资源 ID。例如,Android 资源
@android:style/Theme
必须始终具有资源 ID 0x01030005,以便平台向后兼容针对旧版本平台构建的应用程序。
如果您对如何分配资源 ID 的更多详细信息感到好奇,请参阅此答案:android资源和资源ID之间的映射是如何工作的?
The file res/values/public.xml is used to assign fixed resource IDs to Android resources.
Consider these set of string resources in res/values/strings.xml:
The Android Asset Packaging Tool (aapt) might assign the following resource IDs for these resources when the app is compiled:
Now, change the set of string resources to
and you'll notice that the resource ID for
@string/string3
has changed:To prevent this, you can use res/values/public.xml:
which will result in the resource IDs being assigned as follows:
Applications rarely have any use for res/values/public.xml since the resource IDs assigned to resources does not matter. When they change, the entire application is rebuilt anyway so any references in Java code to resources by resource ID will be updated.
The most significant user of res/values/public.xml is the Android platform itself. Applications built against old versions of Android assumes that certain resource have a certain resource ID. For example, the Android resource
@android:style/Theme
must always have the resource ID 0x01030005 for the platform to be backwards compatible with apps built against old versions of the platform.If you are curious about more details on how resource IDs are assigned, please refer to this answer: How does the mapping between android resources and resources ID work?
https://developer.android.com/studio/projects/android-library .html#PrivateResources
public.xml 对于一般的库项目很有用。如果您包含 public.xml,则假定您的其余资源是私有的。
尽管私有资源仍然可以被其他项目使用,但 linter 会在使用它们时发出警告,并且它们不会包含在 AndroidStudio 的自动补全中。
这是自动生成 public.xml 的要点
https://gist.github.com/HannahMitt/99922d4183bdb03356fd339413ba6303
https://developer.android.com/studio/projects/android-library.html#PrivateResources
public.xml is useful for library projects in general. If you include a public.xml, it's assumed that the rest of your resources are meant to be private.
Although private resources will still be usable by other projects, the linter will warn about using them, and they won't be included in AndroidStudio's autocompletion.
Here's a gist for autogenerating public.xml
https://gist.github.com/HannahMitt/99922d4183bdb03356fd339413ba6303
难道它不是一个仅供操作系统代码的使用作者定义符号名称和系统资源 ID 之间的映射的文件吗?
您可以在 SDK 中的 YOUR_SDK_LOCATION\platforms\android-??\data\res\values 中找到它。
已经到头了
并有警告:
它具有诸如
- 所有系统资源 ID 之类的条目,因此任何更改条目的人都会破坏他们的代码,因为它不会在标准设备上运行。
Is it not a file just for the use authors of the OS code to define a mapping between symbolic names and system resource ids?
You'll find it in your SDK at YOUR_SDK_LOCATION\platforms\android-??\data\res\values.
It's headed
and has the caveat:
It has entries such as
in it - all system resurce ids, so anyone changing entries will break their code, insomuch as it won't run on a standard device.