Google は M にこの新しい CTS ケースを追加しました。これはcts/tests/tests/content/src/android/content/res/cts/PrivateAttributeTest.java です。
このテスト ケースのコメントによると、フレームワーク/ベース/コア/res/res/values/public.xmlにベンダー カスタム属性 (type=attr, id=0x0101*) を追加しないことを強制します。
/**
* 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 に組み込まれているプライベート属性メカニズムを使用する必要があるようです。基本的には、独自の ID 範囲を持つ attr のエイリアスです。
1 つの注意点を除いて、動作します。
aapt ( framework/base/tools/aapt/Resource.cpp::writeLayoutClasses ) が次のように private 属性のコメントに無効なリンクを追加するため、javadoc の doclint チェックは private 属性によって中断されます。
public.xmlに「foo」という名前のプライベート属性を追加するとします。
<public type="attrprivate" name="foo" id="0x01110000"/>
ビューのスタイル可能です:
<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 シンボルがないため無効です。
プライベート属性を正しく使用していますか? それとも今のところフレームワークの問題ですか?
ありがとう、ヘン