2012-05-04 15 views
45

Tengo un proyecto de Android con varios objetivos de compilación (usando hormiga). Para fines de prueba, todos los objetivos de compilación tienen diferentes nombres de paquete (por lo que mi nombre de paquete es com.mycompany.myapp para la compilación de lanzamiento y com.mycompany.myapp.test para compilación de prueba).Declaración de espacio de nombres Xml: nombre de paquete de sustitución automática

Esto funciona bien en su mayor parte, excepto cuando se trata de espacios de nombres xml personalizados en archivos de diseño. Así que este :

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:custom="http://schemas.android.com/apk/res/com.mycompany.myapp" /> 

dejará de funcionar tan pronto como el nombre del paquete se reemplaza con com.mycompany.myapp.test.
Debido a eso, tengo que reemplazar el valor com.mycompany.myapp cada vez durante el preconstruido. Y puesto que todos estos archivos deben estar en VCS, y no deben entrar en conflicto cada vez que una persona cambia de configuración y los combina, tuve que mover archivos de diseño en la carpeta de configuración específica, en la que se vería como:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:custom="http://schemas.android.com/apk/res/@[email protected]" /> 

Ahora bien, este los archivos se almacenan en vcs, y @ CONFIG.PACKAGENAME @ se reemplaza durante el preconstruido y luego el archivo se copia de ./config/file.xml a ./res/layout/file.xml.

Esto es extremadamente inconveniente y realmente no escala bien (no puedo imaginar mencionar cada uno de los 50 archivos en el guión de compilación).

Entonces mi pregunta es: ¿hay alguna forma de utilizar automáticamente el nombre del paquete actual en la declaración del espacio de nombres? ¿O al menos los archivos de diseño de Modife (o los archivos de compilación?) Para que no tenga que reemplazar com.mycompany.myapp cada vez que cambio el nombre del paquete.

Respuesta

115

Resulta que hay un postfijo para eso: res-auto.

Así que todo lo que necesita hacer es escribir

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:custom="http://schemas.android.com/apk/res-auto" /> 

Esto utilizará automáticamente el nombre del paquete actual.

+1

Referencia: http://developer.android.com/tools/sdk/eclipse-adt.html (sección ADT 17.0.0). – Pang

+0

"Se agregó soporte para vistas personalizadas con atributos personalizados en las bibliotecas. Los diseños que usan atributos personalizados deben usar el URI del espacio de nombres http://schemas.android.com/apk/res-auto en lugar del URI que incluye el nombre del paquete de la aplicación. se reemplaza con la aplicación específica en el momento de la compilación ". – flup

+2

¿Funcionará incluso si mi proyecto utiliza una biblioteca que contiene vistas personalizadas? –

Cuestiones relacionadas