Android 工程图片资源命名禁忌

Android工程中,res\drawable\ 文件夹下所有的图片资源文件命名,不允许:

1. 大写字母

从Eclipse的这个报错可以知道资源文件的命名规则。

<code style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; color: inherit; background-color: transparent; border: 0px;"><span class="typ" style="color: rgb(43, 145, 175);">Invalid</span><span class="pln" style="color: rgb(0, 0, 0);"> file name</span><span class="pun" style="color: rgb(0, 0, 0);">:</span><span class="pln" style="color: rgb(0, 0, 0);"> must contain only </span><span class="pun" style="color: rgb(0, 0, 0);">[</span><span class="pln" style="color: rgb(0, 0, 0);">a</span><span class="pun" style="color: rgb(0, 0, 0);">-</span><span class="pln" style="color: rgb(0, 0, 0);">z0</span><span class="pun" style="color: rgb(0, 0, 0);">-</span><span class="lit" style="color: rgb(128, 0, 0);">9</span><span class="pln" style="color: rgb(0, 0, 0);">_</span><span class="pun" style="color: rgb(0, 0, 0);">.]</span></code>

参考Android Issue 31

2. "default.png"

不能生成 R.java,报错:

<code style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; color: inherit; background-color: transparent; border: 0px;"><span class="pln" style="color: rgb(0, 0, 0);">res\drawable\default</span><span class="pun" style="color: rgb(0, 0, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">png</span><span class="pun" style="color: rgb(0, 0, 0);">:</span><span class="lit" style="color: rgb(128, 0, 0);">0</span><span class="pun" style="color: rgb(0, 0, 0);">:</span><span class="pln" style="color: rgb(0, 0, 0);"> error</span><span class="pun" style="color: rgb(0, 0, 0);">:</span><span class="pln" style="color: rgb(0, 0, 0);"> invalid symbol</span><span class="pun" style="color: rgb(0, 0, 0);">:</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="str" style="color: rgb(128, 0, 0);">'default'</span></code>

出现这个错是因为类似defaultcontinue等是Java的保留符号,而Android项目中资源文件(譬如drawable中的图片和strings.xml等)不能使用Java保留符号的原因是它们会被翻译成Java代码(R.java),使Dalvik VM可以解释。

例如strings.xml中的

<code style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; color: inherit; background-color: transparent; border: 0px;"><span class="tag" style="color: rgb(128, 0, 0);"><string</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="atn" style="color: rgb(255, 0, 0);">name</span><span class="pun" style="color: rgb(0, 0, 0);">=</span><span class="atv" style="color: rgb(0, 0, 255);">"continue"</span><span class="tag" style="color: rgb(128, 0, 0);">></span><span class="pln" style="color: rgb(0, 0, 0);">Continue</span><span class="tag" style="color: rgb(128, 0, 0);"></string></span></code>

可被翻译成

<code style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; color: inherit; background-color: transparent; border: 0px;"><span class="kwd" style="color: rgb(0, 0, 139);">public</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 139);">final</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 139);">class</span><span class="pln" style="color: rgb(0, 0, 0);"> R </span><span class="pun" style="color: rgb(0, 0, 0);">{</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="kwd" style="color: rgb(0, 0, 139);">public</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 139);">static</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 139);">final</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 139);">class</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 139);">string</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(0, 0, 0);">{</span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="kwd" style="color: rgb(0, 0, 139);">public</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 139);">static</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 139);">final</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 139);">int</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 139);">continue</span><span class="pun" style="color: rgb(0, 0, 0);">=</span><span class="lit" style="color: rgb(128, 0, 0);">0x7f040000</span><span class="pun" style="color: rgb(0, 0, 0);">;</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="pun" style="color: rgb(0, 0, 0);">}</span><span class="pln" style="color: rgb(0, 0, 0);">
</span><span class="pun" style="color: rgb(0, 0, 0);">}</span></code>

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

3. 以下划线("_")开头

不能生成 R.java,报错Type是 "Android AAPT Problem"。

<code style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; color: inherit; background-color: transparent; border: 0px;"><span class="pun" style="color: rgb(0, 0, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">skipping </span><span class="pun" style="color: rgb(0, 0, 0);">(</span><span class="kwd" style="color: rgb(0, 0, 139);">null</span><span class="pun" style="color: rgb(0, 0, 0);">)</span><span class="pln" style="color: rgb(0, 0, 0);"> file </span><span class="pun" style="color: rgb(0, 0, 0);">...)</span></code>

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 文件内报错:

<code style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; color: inherit; background-color: transparent; border: 0px;"><span class="typ" style="color: rgb(43, 145, 175);">Underscores</span><span class="pln" style="color: rgb(0, 0, 0);"> can only be used </span><span class="kwd" style="color: rgb(0, 0, 139);">with</span><span class="pln" style="color: rgb(0, 0, 0);"> source level </span><span class="lit" style="color: rgb(128, 0, 0);">1.7</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 139);">or</span><span class="pln" style="color: rgb(0, 0, 0);"> greater</span></code>

这里涉及到两种情况。

  1. Java标识符不能以数字开头,第一个字符应该是字母。

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

以数字开头的报错如下:

<code style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; color: inherit; background-color: transparent; border: 0px;"><span class="typ" style="color: rgb(43, 145, 175);">Syntax</span><span class="pln" style="color: rgb(0, 0, 0);"> error on token </span><span class="str" style="color: rgb(128, 0, 0);">"0xxx"</span><span class="pun" style="color: rgb(0, 0, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 139);">delete</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 139);">this</span><span class="pln" style="color: rgb(0, 0, 0);"> token</span></code>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值