Google 在 M 中添加了这个新的 CTS 案例,即cts/tests/tests/content/src/android/content/res/cts/PrivateAttributeTest.java
根据此测试用例的注释,它强制将 NO 供应商自定义属性 (type=attr, id=0x0101*) 添加到framework/base/core/res/res/values/public.xml :
/**
* Tests that private attributes are correctly placed in a separate type to
* prevent future releases from stomping over private attributes with new public ones.
*/
似乎供应商应该改用私有属性机制,该机制已经内置于 aapt 中。基本上它是 attr 的别名,有自己的 id 范围。
它有效,除了一个警告:
javadoc的doclint检查被私有属性破坏,因为aapt(framework/base/tools/aapt/Resource.cpp::writeLayoutClasses)向私有属性的注释添加了一个无效链接,如下所示:
假设我们在public.xml中添加了一个名为“foo”的私有属性:
<public type="attrprivate" name="foo" id="0x01110000"/>
这是 View 的样式:
<resources>
<declare-styleable name="View">
<attr name="foo" format="reference|float">
</declare-styleable>
</resources>
aapt 生成的R.java将是:
/*
blabla
<p>This corresponds to the global attribute
resource symbol {@link android.R.attr#foo}.
@attr name android:foo
*/
public static final int View_foo = 87;
但{@link android.R.attr#foo}无效,因为没有 android.R.attr.foo 符号,因此破坏了 javadoc 的doclint 检查。
我是否正确使用私有属性?还是现在是框架的问题?
谢谢,恒