Как решить ошибку: этот атрибут должен быть локализован. (в "тексте" со значением "TOP_LEFT" )

Я компилирую исходный код Android, используя следующий файл Android.mk:

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

но это даст ошибку:

main.xml: 19: error: Ошибка: этот атрибут должен быть локализован. (в "тексте" со значением "TOP_LEFT" ).

mail.xml выглядит следующим образом:

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

Ответ 1

Вы можете использовать

LOCAL_MODULE_TAGS := tests

в Android.mk, чтобы исключить проверку локализации.

Другой способ - отключить проверку локализации в системе сборки. Прокомментируйте строку 81 в build/core/package.mk

#LOCAL_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) -z

Ответ 2

Лучшей практикой для Android-приложений является определение всего нединамического контента в файлах ресурсов. Это позволяет, например, определять различные файлы ресурсов для разных языков. Как правило, это всего лишь рекомендация, и Android SDK не жалуется, если вы скорректируете значения в вашем макете xml. Однако для системы создания исходных текстов Android требуется, чтобы все строки были определены в ресурсе "значения". Вероятно, это предназначено для защиты системных сборщиков от случайного оставления содержимого в системном образе, который не будет отображаться на выбранном пользователем языке.

Что вам нужно сделать, это переместить эти строковые значения из макета и определить их в res/values/. Обычное место для строковых значений находится в res/values/strings.xml, но для фактического файла можно назвать все, что угодно, если оно находится в этом каталоге.

Например, в res/values ​​/string.xml:

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

И в макете main.xml обратитесь к контенту по имени:

    android:text="@string/topLeftContent"

Подробнее о том, как и почему, см. в документации Google по Локализации в Android.