最近工作中,在移植输入法去新的分支的时候,发现输入法在弹出过程会强死,这是因为调用framework层的一个layout时查找不到;于是找到这个资源,在framework层中添加了这个资源,但是发现编译后输入法仍然找不到这个资源。通过网络搜索,找到了原因。在系统的framework/base/core/res/res中添加字串等资源,需要在framework/base/core/res/res/values/symbols.xml中同步添加资源字串,否则编译会出错。
比如在strings.xml中添加字串:
<string name="close_adb_title">Turn off ADB Debug</string>
那么就需要在symbols.xml中添加:
`<java-symbol type="string" name="close_adb_title" />`
layout也同理。 在framework层中,symbols.xml 和 public.xml的作用是一样的。到4.2才分成两个文件的,public.xml定义的资源进入android.R.java symbols.xml(共有资源),symbols.xml定义的资源进入com.android.internal.R.java(私有资源),并不是严格定义。在一个xml文件里也可以通过不同的标签来控制资源是公共的还是私有的。记得在使用的时候,R.还是internal.R.需要分清楚,看你加的资源在哪个包里