2011-12-09 11 views
11

(値 'TOP_LEFT' が 'テキスト' で)私は、次の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: Error: This attribute must be localized. (at 'text' with value '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> 

答えて

8

Androidアプリのベストプラクティスは、リソースファイル内のすべての非動的コンテンツを定義することです。これにより、例えば、異なる言語の異なるリソースファイルを定義することができます。通常、これは推奨に過ぎず、レイアウトXMLの値をハードコードする場合、Android SDKは文句を言わない。しかし、Android ソースビルドシステムでは、すべての文字列を "値"リソースで定義する必要があります。これはおそらくシステム構築者が誤ってユーザの選択した言語で表示されないシステムイメージにコンテンツを残さないようにするためです。

あなたがする必要があるのは、それらの文字列値をレイアウトから移動して、代わりにres/values/に定義することです。文字列値の通常の場所はres/values/strings.xmlですが、実際のファイルの名前は、そのディレクトリにある限り、好きな名前にすることができます。

例えば、RES /値/ string.xmlを中:

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

そして、あなたのmain.xmlレイアウトでは、名前でコンテンツを参照してください方法の詳細については

android:text="@string/topLeftContent" 

とこの理由は、Localization in Androidに関するGoogleのドキュメントをご覧ください。

+0

はい、これは非常に微妙なエラーをキャッチします。 gradleがなければ、これらのエラーに対処します。 –

14

あなたはローカライズチェックを省略するAndroid.mkに

LOCAL_MODULE_TAGS := tests 

を使用することができます。

もう1つの方法は、ビルドシステムでローカライズチェックを無効にすることです。行81をbuild/core/package.mkにコメント

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

** package.mk **の外観は何ですか? –

関連する問題