Android工程圖片資源命名禁忌

大頭發表於2013-07-23

Android工程中,res\drawable\ 資料夾下所有的圖片資原始檔命名,不允許:

1. 大寫字母

從Eclipse的這個報錯可以知道資原始檔的命名規則。

Invalid file name: must contain only [a-z0-9_.]

參考Android Issue 31

2. "default.png"

不能生成 R.java,報錯:

res\drawable\default.png:0: error: invalid symbol: 'default'

出現這個錯是因為類似defaultcontinue等是Java的保留符號,而Android專案中資原始檔(譬如drawable中的圖片和strings.xml等)不能使用Java保留符號的原因是它們會被翻譯成Java程式碼(R.java),使Dalvik VM可以解釋。

例如strings.xml中的

<string name="continue">Continue</string>

可被翻譯成

public final class R {
    public static final class string {
        public static final int continue=0x7f040000;
    }
}

Java的Keyword清單:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html

3. 以下劃線("_")開頭

不能生成 R.java,報錯Type是 "Android AAPT Problem"。

(skipping (null) file ...)

2009年提交的Android Issue 5343指出“Files in the assets folder starting with an underscore are omitted by the build script”,“Folders starting with an underscore are omitted without warning.”。更多資訊都在5343這個issue detail裡。

看上去,res/drawable裡以下劃線開頭的檔案也被aapt報錯了。類似的還有人提到res/raw裡的python指令碼檔案__init__.py

4. 以數字加下劃線("[0-9]_")開頭

常見於圖片資源。可以生成 R.java,但是 R.java 檔案內報錯:

Underscores can only be used with source level 1.7 or greater

這裡涉及到兩種情況。

  1. Java識別符號不能以數字開頭,第一個字元應該是字母。

  2. 下劃線。Java 7中引入了一個新特性“Underscores in Numeric Literals”。譬如1_000就是1000。

以數字開頭的報錯如下:

Syntax error on token "0xxx", delete this token

相關文章