What is the use of the res/values/public.xml file on Android?
来源:互联网 发布:php 一句话木马 菜刀 编辑:程序博客网 时间:2024/05/18 20:46
http://stackoverflow.com/questions/9348614/what-is-the-use-of-the-res-values-public-xml-file-on-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:
- string resources
- style resources
- more resources
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?
2 Answers
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:
<?xml version="1.0" encoding="utf-8"?><resources> <string name="string1">String 1</string> <string name="string3">String 3</string></resources>
The Android Asset Packaging Tool (aapt) might assign the following resource IDs for these resources when the app is compiled:
public final class R { // ... public static final class string { public static final int string1=0x7f040000; public static final int string3=0x7f040001; }}
Now, change the set of string resources to
<?xml version="1.0" encoding="utf-8"?><resources> <string name="string1">String 1</string> <string name="string2">String 2</string> <string name="string3">String 3</string></resources>
and you'll notice that the resource ID for @string/string3
has changed:
public final class R { // ... public static final class string { public static final int string1=0x7f040000; public static final int string2=0x7f040001; public static final int string3=0x7f040002; // New ID! Was 0x7f040001 }}
To prevent this, you can use res/values/public.xml:
<?xml version="1.0" encoding="utf-8"?><resources> <public type="string" name="string3" id="0x7f040001" /></resources>
which will result in the resource IDs being assigned as follows:
public final class R { // ... public static final class string { public static final int string1=0x7f040000; public static final int string2=0x7f040002; public static final int string3=0x7f040001; // Resource ID from public.xml }}
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?
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
This file defines the base public resources exported by the platform, which must always exist
and has the caveat:
IMPORTANT NOTE FOR ANYONE MODIFYING THIS FILE READ THIS BEFORE YOU MAKE ANY CHANGES
This file defines the binary compatibility for resources. As such, you must be very careful when making changes here, or you will completely break backwards compatibility with old applications
It has entries such as
<public type="attr" name="smallScreens" id="0x01010284" /><public type="attr" name="normalScreens" id="0x01010285" /><public type="attr" name="largeScreens" id="0x01010286" />
in it - all system resurce ids, so anyone changing entries will break their code, insomuch as it won't run on a standard device.
- What is the use of the res/values/public.xml file on Android?
- What is the use of "?
- what is the use of truncate command
- create file color.xml at res/values and then you can use android:backgroud"@color/what you like"
- What is the cause of long acne on the nose?
- What is the use of having destructor as private?
- What is blocker on the road of learning English?
- What is the Android
- What is the meaning of xmlns:tools in Android XML layout?
- To see what is in the MAT-file prior to loading it, use whos -file
- What is the purpose of the USB?
- what is the purpose of using translatable in Android strings?
- what is the location of the gcc program on your machine
- linux安装问题:what is the location of the gcc program on your machine
- 安装vmware-tools出现"what is the location of the "ifconfig"program on your machine?"
- 安装vmware-tools出现"what is the location of the "ifconfig"program on your machine?"
- Why the Ban on P-Values? And What Now?
- What is the SQLDump file for?
- linux最新分区方案
- FPGA使用IP时心得
- win8 metro HttpClient下载文件-带进度条
- 【lint】Android Lint工具学习
- win7 点击安全弹出无响应的解决办法
- What is the use of the res/values/public.xml file on Android?
- collection
- 入职体验--linux学习体会
- Linux 使用CDT编辑器编辑C/C++语言时出现的问题和解决方案
- 如何修改音乐的匹配字数
- 【Lua】自定义OOP类的声明和定义
- unity-使用NGUI 两个Button实现左右切换功能
- 生活中十四项万能心理定律
- 判断某个service服务是否正在运行