我在Android开发中有时需要在内部资源中添加属性或者其它资源,这些资源可以是私有的仅供内部使用,也可以是公有的即开放给其他App使用。如何添加呢?听笔者娓娓道来:
1 如果你的修改是为了提供给第三方API调用者使用
1. 在相应的资源文件中添加该属性:
例如添加boolean类型的资源 则需要在在/frameworks/base/core/res/res/values/config.xml添加
<bool name="isExample">true</bool>
2. 添加共有资源则需要在/frameworks/base/core/res/res/values/public.xml中注册:
<public type="bool" name="isExample" id="XXXX" />
注意: id号码在文件中必须唯一,通常在public.xml中找到同类型的最后一个id值 + 1,一定要保证唯一性。
3 更新SDK api, frameworks/base/api/current.xml
执行: make update-api (记得回到项目根目录下执行,不能在framework/base目录下执行)
2 如果你的修改只是为了给自己此次调用,别不需要放开给api第三者调用
如你要添加一个String类型的字段 则在/frameworks/base/core/res/res/values/strings.xml文件中定义即可
<string name="time_picker_hour_label" msgid="xxxxxxxx">"小时"</string>
3.把添加的资源在/frameworks/base/core/res/res/values/symbols.xml中注册即可:
<java-symbol type="bool" name="isExample" />
如果你的字段只是自己,但非要在pulick.xml文件中声明就要以下方式:
<!-- @hide @SystemApi -->
<public type="attr" name="requiredSystemPropertyName" id="0x01010565" />
<!-- @hide @SystemApi -->
4. 编译framework-res.apk :
在/frameworks/base/core/res下执行mm -B
5. 在out/target/common/R/com/android/internal/R.java 中搜寻mybool检查是否该资源被成功编译。
如果是在java文件中重新定义了类方法 或是类属性
1 在需要在增加的方法 或 属性 上方 添加 @hide到注释,这个注释我们并不陌生,这样修改在上层就不可以调用,不符合我们要求
必须这样:/**@hide*/
2 或是通过更新javadoc文档
make update-api