2011-12-09 15 views
11

Estoy compilando fuente de Android usando Android.mk siguiente archivo:Cómo resolver el error: este atributo debe estar localizado. (En el 'texto' con 'TOP_LEFT' valor)

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 

LOCAL_MODULE_TAGS := optional 

LOCAL_STATIC_JAVA_LIBRARIES := libarity 

LOCAL_SRC_FILES := $(call all-java-files-under, src) 

LOCAL_PACKAGE_NAME := TouchPanelTest 

include $(BUILD_PACKAGE) 
################################################## 
include $(CLEAR_VARS) 


# Use the folloing include to make our test apk. 
include $(call all-makefiles-under,$(LOCAL_PATH)) 

pero dará error:

main.xml:19: error: Error: This attribute must be localized. (at 'text' with value 'TOP_LEFT').

mail.xml es tan de la siguiente manera:

<RelativeLayout 
    android:id="@+id/top_left" 
    android:layout_width="30dp" 
    android:layout_height="30dp" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:background="#000" 
    android:orientation="vertical" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="TOP_LEFT" /> 
</RelativeLayout> 

<RelativeLayout 
    android:id="@+id/top_right" 
    android:layout_width="30dp" 
    android:layout_height="30dp" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" 
    android:background="#000" 
    android:orientation="vertical" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="TOP_RIGHT" /> 
</RelativeLayout> 

<RelativeLayout 
    android:id="@+id/bottom_left" 
    android:layout_width="30dp" 
    android:layout_height="30dp" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:background="#000" 
    android:orientation="vertical" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="BOTTOM_LEFT" /> 
</RelativeLayout> 

Respuesta

8

La mejor práctica para las aplicaciones de Android es definir todo el contenido no dinámico en los archivos de recursos. Esto le permite definir diferentes archivos de recursos para diferentes idiomas, por ejemplo. Normalmente, esto es solo una recomendación y el Android SDK no se queja si codifica valores en su diseño xml. Sin embargo, el sistema de compilación fuente de Android requiere que todas las cadenas se definan en un recurso de "valores". Esto probablemente esté destinado a evitar que los creadores de sistemas dejen accidentalmente contenido en una imagen del sistema que no se muestre en el idioma elegido por el usuario.

Lo que debe hacer es mover esos valores de cadena fuera del diseño y definirlos en res/values/ en su lugar. El lugar habitual para los valores de cadena está en res/values/strings.xml, pero el archivo real se puede nombrar como prefiera, siempre que esté en ese directorio.

Por ejemplo, en res/valores/string.xml:

<string name="topLeftContent">TOP_LEFT</string> 

Y en su diseño main.xml, consulte el contenido por nombre:

android:text="@string/topLeftContent" 

Para más detalles sobre el cómo y por qué de esto, consulte la documentación de Google en Localization in Android.

+0

Sí, este es un error muy sutil a captar. Sin gradle, nos ocuparemos de estos errores. –

14

Puede utilizar

LOCAL_MODULE_TAGS := tests 

en el Android.mk que omite la comprobación de la localización.

Otra forma es deshabilitar la verificación de localización en el sistema de compilación. Comente la línea 81 en build/core/package.mk

#LOCAL_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) -z 
+0

¿Cómo se ve ** package.mk **? –

Cuestiones relacionadas