He buscado en Google, pero no podía encontrar cualquier de los resultados relevantes.

También comprobé la oficial de Android docs y esta página (para todos los recursos disponibles) era todo lo que podía encontrar. El enlaces relevantes (a la res/values/ directorio) que he encontrado en esta página fueron:

Estas páginas no se dice nada acerca de la res/values/public.xml archivo.

Aquí está una ejemplo he encontrado por este tipo de archivo.

Pequeño fragmento

<?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>

Como se puede ver en la type atributo, contiene bastante todos los tipos de recursos que normalmente se pone en directorios separados bajo el res directorio de…


¿Por qué alguien querría mal uso de los directorios que Android proporciona y utiliza un único archivo para almacenar todos los valores? Alguien puede dar más información acerca de esto?

InformationsquelleAutor Igor Popov | 2012-02-19

3 Comentarios

  1. 85

    El archivo res/values/public.xml se utiliza para asignar recursos fijos Identificadores para Android recursos.

    Considerar este conjunto de recursos de cadena en 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>

    Android Asset Packaging Tool (aapt) puede asignar los siguientes Identificadores de recursos para estos recursos cuando la aplicación se compila:

    public final class R {
        //...
        public static final class string {
            public static final int string1=0x7f040000;
            public static final int string3=0x7f040001;
        }
    }

    Ahora, cambiar el conjunto de recursos de cadena para

    <?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>

    y te darás cuenta de que el IDENTIFICADOR de recursos para @string/string3 ha cambiado:

    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
        }
    }

    Para evitar esto, se puede utilizar res/values/public.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <public type="string" name="string3" id="0x7f040001" />
    </resources>

    que se traducirá en los Identificadores de recursos se asignan de la siguiente manera:

    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
        }
    }

    Aplicaciones rara vez tienen ningún uso para res/values/public.xml desde los Identificadores de recursos asignados a los recursos no importa. Cuando se cambia, toda la aplicación se reconstruyeron todos modos por lo que cualquier referencia en código Java a los recursos por parte de ID de recurso será actualizado.

    El usuario más significativo de res/values/public.xml es la de la plataforma Android en sí. Las aplicaciones basadas en contra de las versiones antiguas de Android supone que ciertos recursos tienen un cierto IDENTIFICADOR de recurso. Por ejemplo, el Android de recursos @android:/estilo del Tema siempre debe tener el ID de recurso 0x01030005 para la plataforma es compatible con las aplicaciones integradas en contra de las versiones anteriores de la plataforma.

    Si te interesa saber más detalles sobre cómo los Identificadores de recursos que se asignan, por favor refiérase a esta respuesta: ¿Cómo funciona la asignación entre android recursos y los recursos de ID de trabajo?

    • Es posible definir pública de los Identificadores de recursos en mi propio proyecto, he intentado pero no pudo? @IgorPopov
    • Es posible utilizar las public.xml en sus propios proyectos para solucionar los identificadores de recursos hasta el año 2015. En 2015 Google ha roto (como de costumbre) esta funcionalidad en gradle y se negó a solucionarlo. Aquí está el enlace correspondiente: enlace
  2. 8

    https://developer.android.com/studio/projects/android-library.html#PrivateResources

    public.xml es útil para los proyectos de la biblioteca en general. Si se incluye un public.xml se supone que el resto de sus recursos están destinados a ser privado.

    Aunque los recursos privados todavía será utilizable por otros proyectos, la desfibradora advierten sobre el uso de ellos, y que no estarán incluidos en AndroidStudio del autocompletado.

    He aquí una idea para autogenerating public.xml
    https://gist.github.com/HannahMitt/99922d4183bdb03356fd339413ba6303

  3. 3

    No es un archivo sólo para el uso de los autores de el sistema operativo de código para definir una asignación entre nombres simbólicos y de los recursos del sistema de ids?

    Usted encontrará en su SDK en YOUR_SDK_LOCATION\plataformas\android-??\datos\res\values.

    Se dirige

    Este archivo define la base de los recursos públicos exportados por la plataforma,
    que siempre debe existir

    y tiene la advertencia:

    NOTA IMPORTANTE PARA CUALQUIER PERSONA QUE MODIFICAR ESTE ARCHIVO LEA ESTO ANTES DE
    HACER CAMBIOS

    Este archivo define la compatibilidad binaria de los recursos. Como tal,
    usted debe ser muy cuidadoso a la hora de hacer cambios aquí, o se le
    completamente romper la compatibilidad hacia atrás con las aplicaciones antiguas

    Tiene entradas como

    <public type="attr" name="smallScreens" id="0x01010284" />
    <public type="attr" name="normalScreens" id="0x01010285" />
    <public type="attr" name="largeScreens" id="0x01010286" />

    en todo el sistema de resurce ids, por lo que cualquiera de cambiar las entradas de romper su código, en tanto en cuanto no se ejecutará en un dispositivo estándar.

    • Yo no sabía sobre el archivo está parte de la SDK de Android… de todos Modos, el ejemplo que he encontrado que no cambian los valores existentes, sino que simplemente crea otro, en forma personalizada… así que no creo que la restricción que se ha publicado se aplica en este caso.
    • Supongo que debe ser para el uso de personas que quieren desarrollar personalizado OS ROMs. Si ha añadido un nuevo sistema de recursos nombre/id, entonces usted podría compilar el código de la aplicación y el código ROM de hacer uso de ella. La aplicación sólo se ejecuta en su ROM personalizada teléfono a pesar de.
    • No, he encontrado esto en una normal de la aplicación, no es una ROM personalizada.

Dejar respuesta

Please enter your comment!
Please enter your name here