这两天由于项目 需要,更改了Notification的源码 ,结果在Linux上make时出现例如下面提示:
Checking API : checkapi-current
(unknown): error 5: Added public field android .app .Notification.mContent
******************************
You have tried to change the API from what has been previously approved.
To make these errors go away, you have two choices:
1) You can add "@hide" javadoc comments to the methods, etc. listed in the
errors above.
2) You can update current.xml by executing the following command:
make update-api
To submit the revised current.xml to the main Android repository,
you will need approval.
******************************
之后查了下,发现原因是:
google对于所有的类和API,分为开放式和不开放式两种。所谓的开放式就是值javadoc所包含的,并不是java中有public和private,而是跟javadoc有关系,代码 没有关系。
而我这次的错误提示是因为在开放式的类中增加了一个变量,而又没隐藏,导致和原API的doc不一致造成的。
通过提示,有2个方法可以解决 该问题:
1、将新增加的变量或方法加上"@hide" 的注释,注意一点,加"@hide" 不是简简单单的/*@hide */就行了,标准的javadoc要这样 /** */ 而且对于 format 变量 应该加上 { },也就是/**{@hide}*/
2、如果想在生成的doc中增加该变量或方法的话,必须输入:
make update-api
这样的话,系统 自动 将新增加的API添加到current.xml中了。
不过我用的是第一种方法,第二种我没有试验过,关键编译 一次时间太长了。。。
希望通过本次说明,能让各位和我一样修改frameworks的兄弟有所帮助。
------------------------------------------------------------------------------------------
之前我都是改StatusBarService这个类了,所以make时没有这个问题。因为StatusBarService类是属于不开放的类,也就是 说在javadoc上是查不到关于该类公开的接口什么的。make时对于doc也没有影响。但是由于本次需要改Notification类,对doc产生 影响了,以至于make时会出现该提示。
-------------------------------------------------------------------------------------------
兄弟在做视频缩略图吧.这个类被@hide了.没有替代类吧...
我的方法是:改frameworks MediaMetadataRetriever.java中@hide标签去掉,在current.xml中添加 MediaMetadataRetriever到可用.重新编译frameworks,应用就可以调用到MediaMetadataRetriever这 个类了...