在4.1以前,在系统framewor中添加资源文件
通过Eclipse的一般应,我们可以联想到是否就是简单的把字符串放在res的各个文件夹里面。先来试试看,编译,系统立即报错。
它提示你利用make update-api这个命令来更新public.xml文件或者把这个声明称hide类型。这怎么办呢?
方法有二:
方法1:正常添加完资源后,执行make update-api函数。系统更新res/values/public.xml文件。
方法2:正常添加完资源后,手动更改/res/values/public.xml文件。打开public.xml文件。发现结构如下:
1.
2.
4.
5.
6.
7.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
29.
30.
31.
32.
33.
可以自己动手添加,但比较麻烦,容易引起id冲突,不好检查,不推荐。
但这并没有结束,google在4.1之后对这部分重新做了整理修改。
来看下做法吧
4.1及以后做法
在Androird JellyBean 4.1.0的framework里面添加一个res,把xml写好以后编译时候报错如下的错误
int ticker = com.android.internal.R.string.xxxxxxxxxx;
^
frameworks/base/services/java/com/android/server/StatusBarManagerService.java:143: cannot find symbol
symbol : variable xxxxxxxxxx
location: class com.android.internal.R.drawable
1,在public.xml 里添加一项<public ***/>
eg.
然后make update-api,这时在api/current.txt中生成
field public static final int sound_mute = 17039385; // 0x1040019
然后将
这就完成了。也就添加了一个public的属性,但出于安全考虑,建议用下面方式。
2,解决办法很简单,在MakeJavaSymbols.sed里面有:
# Run this on the errors output by javac of missing resource symbols,
# to generate the set of
# the symbol for them.
#
# For example: make framework 2>&1 | sed -n -f MakeJavaSymbols.sed | sort -u
编译方法 在 jb下, make framework 2>&1 | sed -n -f frameworks/base/core/res/MakeJavaSymbols.sed | sort -u
eg.
hanhy@ubuntu11:~/ice2-901/trunk/jb$ make framework 2>&1 | sed -n -f frameworks/base/core/res/MakeJavaSymbols.sed | sort -u
编译会产生
把这个copy到publlic.xml。再重新编译一次就搞定了。
public.xml也提到
4.2里把private部分的单独分离出来了,在symbols.xml里
看起来所有private的internal res都必须在这里声明一下。JellyBean以前貌似没有这么麻烦。好在他提供了一个sed,免得全部手写。