res / values / public.xml文件用于为Android资源分配固定的资源ID。
在res / values / strings.xml中考虑以下字符串资源集:
String 1
String 3
编译应用程序时,Android资产打包工具(aapt)可能会为这些资源分配以下资源ID:
public final class R {
// ...
public static final class string {
public static final int string1=0x7f040000;
public static final int string3=0x7f040001;
}
}
现在,将字符串资源集更改为
String 1
String 2
String 3
并且您会注意到@android:style/Theme的资源ID已更改:
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
}
}
为了防止这种情况,可以使用res / values / public.xml:
这将导致如下分配资源ID:
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
}
}
应用程序很少使用res / values / public.xml,因为分配给资源的资源ID无关紧要。 当它们更改时,无论如何都将重建整个应用程序,因此将更新Java代码中通过资源ID对资源的任何引用。
res / values / public.xml的最重要用户是Android平台本身。 针对旧版本Android构建的应用程序假定某些资源具有某个资源ID。 例如,Android资源@android:style/Theme必须始终具有资源ID 0x01030005,平台才能向后兼容针对旧版本平台构建的应用。
如果您对有关如何分配资源ID的更多详细信息感到好奇,请参考以下答案:android资源和资源ID之间的映射如何工作?