Android 5.0在framework里添加自定义新类

最近因项目需要,在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把你的目录加进去.(未经亲自验证)

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值