1

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 检查。

我是否正确使用私有属性?还是现在是框架的问题?

谢谢,恒

4

0 回答 0