最近因项目需要,在frameworks\base\core\java\android\preference里面新添加了一个继承TwoStatePreference的类XXXSwitchPreference,在编译的时候出现了以下问题:
******************************
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.txt by executing the following command:
make update-api
To submit the revised current.txt to the main Android repository,
you will need approval.
******************************
经过查证后得知:
Android SDK中有些JAVA类是开放的,有些是不开放的,API同样如此。这里所谓开放的类或API,只是javadoc的范畴,并不是java中public和private,也就是说,对于源码的编译无所谓,但是对android的上层应用有影响,因为非开放的类或API,android上层应用无法直接访问。
对于在原有的类中添加方法,google 给了两个解决方法:
1. 在你添加的API或者变量前面,增加 javadoc 注释@hide
。但是要注意的是,并不是简单写个@hide 或者 /*@hide*/
就可以了,这些都是错误的javadoc注释格式,标准的javadoc都是这样的 /** */
而且对于 format 变量 应该加上 { }
。应该写成 /** {@hide} */
2.想要在生成的javadoc里面出现这个方法或者变量,你必须执行:
make update-api
这样的话,系统自动将新增加的API添加到frameworks\base\api\current.txt中了,但是如果修改的是google没有开放出来的类,比如RIL,PhoneFactory,就不会出现这个问题。
而如果要加进新的类,
1、在原有的包下面加类,这个最简单,加完之后执行make update-api,在frameworks\base\api\current.txt中会自动增加一段代码,如下:
public class XXXSwitchPreference extends android.preference.TwoStatePreference {
ctor public XXXSwitchPreference(android.content.Context, android.util.AttributeSet, int, int);
ctor public XXXSwitchPreference(android.content.Context, android.util.AttributeSet, int);
ctor public XXXSwitchPreference(android.content.Context, android.util.AttributeSet);
ctor public XXXSwitchPreference(android.content.Context);
method public java.lang.CharSequence getSwitchTextOff();
method public java.lang.CharSequence getSwitchTextOn();
method public void setSwitchTextOff(java.lang.CharSequence);
method public void setSwitchTextOff(int);
method public void setSwitchTextOn(java.lang.CharSequence);
method public void setSwitchTextOn(int);
}
OK,我的问题就是这样解决的;
2、若加在framework/base下面,这时你make update-api是不会在frameworks\base\api\current.txt里生成你新增的API的。这时,需要修改android源码根目录下的build/core/pathmap.mk把你的目录加进去.(未经亲自验证)