Android平台framework层的开发(收集,ZT)

framework的开发比应用层就要烦的多啦。做应用在eclipse中就足够了,用android系统中的控件等工具,或者是自己写个类来实现特定的功能。而framework层的开发,需要往源码中添加代码、xml、图片、id等等数据,这个id可是费了我好大的劲才搞定的。在项目开始的一个半月里,我探索、尝试了很多,现在把我的经验分享出来。网上关于framework层的开发信息很少,多是靠自己。

最有效的方式就是分析android的源码,看google是怎样实现一个类的,以及类的层次。我现在看的主要是widget和app中的代码,其他的还没涉及。像View,ViewGroup,Activity,ActivityThread都是非常重要的类,也是代码量很大的类,我只是大概地过了下,还没有仔细分析过。

values中几个文件的作用:

attrs.xml中定义的是类的属性,属性是为了能在xml文件中被引用到,换句话说就是指定类中变量(也就是属性的实际作用者)的值。这些属性会在类的构造函数中用到。看过一两个源码就会明白,构造函数中的TypedArray其实就是属性的数组,数组的成员会被赋给类里的成员,完成从xml的初始化。类的构造函数一般有三个,一个是Class(context),这个用于在代码中创建一个类,所以只包含一个上下文;Class(context,attrs)和Class(context,attrs,defStyle)用于从xml创建类的情况。

styles.xml中是各个控件的“样式”,样式由一个个属性所组成。我们在编辑xml文件的时候,不同的类所能设置的属性有共同的,也有不同的,都是由样式来控制的。具体可以去看styles.xml这个文件的内容。添加自定义的styles时,注意看看文件前面的注意事项,这个文件不要添加,有专门的文件去添加新的style,而且不能添加在文件中间,必须是在最后。下面的themes也是同理。

themes.xml其实也是样式,只是适用的范围大一点,这个我是参考网上别人的看法,自己还没研究过。

ids.xml是公共的id,也就是对应用层可见的id,id是为了获得xml中的对象而需要的参数,也就是Object=findViewById(R.id.id_name)中的id_name。这些值可以在代码中用android.R.id引用到

public.xml描述的是为attr、id、drawable所指定的一个32的id值,这个值在current.xml文件中会被用到。

当我们对public.xml做了改动后,执行makeupdate-api命令,相应的current.xml就会添加这些改动。因为这些值按类型被放在不同的段上,类型相同的必须连续存放,不指定id值的话系统会自动计算出下一个值。

添加id(Object=findViewById(R.id.id_name)中的id_name)的方法:1)在ids.xml中添加公共id项,在public.xml中也添加相应的id项。这种办法没有兼容性,会与后面的版本产生冲突。

2)在ids.xml中添加公共id项,每一项前面加一行的注释,这样就不用在public.xml中添加相应的项了。源码中是/**@hide*/的形式,这样current中就不会有相应的段了。

3)在自己写的xml中,使用android:id="@+id/id_name"的形式,就和在eclipse中一样,搜一下会发现android源码中也有这么用的,这样ids.xml和public.xml都不用改,兼容性我还不确定。

添加其它需要应用层用到的公共资源,都需要在public.xml中进行相应的类型添加。比着葫芦画着瓢就成。只是在定义数值的时候,一定要是public.xml已存在的类型最大值加一,不能占用已有的数值,以免造成不兼容的情况。

上面这些希望能对大家有所帮助吧。

http://tech.it168.com/a2010/1108/1122/000001122996.shtml

相关推荐