Androidライブラリプロジェクトリソースをさまざまなパッケージ名でエクスポートしますか?

StackOverflow https://stackoverflow.com/questions/6806694

  •  25-10-2019
  •  | 
  •  

質問

ここでAndroidツールでバグに出くわしているのか、これが設計によるものなのかはわかりません。問題はこれです。ウィジェットをエクスポートするAndroidライブラリプロジェクトがあります。そのウィジェットの一部として、スタイル可能な属性はR.Styleableでエクスポートされます:

ライブラリプロジェクト(package = com.example.mylib):

<declare-styleable name="com.example.MyWidget">
    <attr name="someAttr" format="integer" />
</declare-styleable>

アプリプロジェクト(package = com.example.myapp):

<LinearLayout xmnls:mylib="http://schemas.android.com/apk/res/com.example.mylib">
  <com.example.MyWidget android:id="..." mylib:someAttr="1" />
</LinearLayout>

問題は、です someAttr 属性は、ライブラリとアプリケーションが同じパッケージ識別子を使用するたびに、Android/ADTにのみ表示されるようです!この場合、彼らはそうではなく、ADTは次のエラーで失敗します。

パッケージ「com.example.mylib」に属性「someattr」の属性のリソース識別子は見つかりません

私が言ったように、アプリのパッケージ名を「com.example.mylib」に変更することでこれを修正できますが、もちろんこれは私が望むものではありません!私は何かが足りませんか?

役に立ちましたか?

解決

これは既知のバグです #9656. 。この問題に関する2つの投稿を書きました。 ここここ. 。これが起こる理由と、この問題を修正するためにAAPTをパッチする方法を説明しました。

とりあえず、AAPTを再構築したくない場合は、ライブラリからアプリケーションにそれらのカスタム属性を使用するすべてのカスタム属性とレイアウトを移動する必要があります。

他のヒント

まだ答えを探しているかもしれない人のために:ADT 17以来、あなたは使用する必要があります http://schemas.android.com/apk/res-auto ライブラリプロジェクトのカスタム属性の名前空間として、魅力として機能します。

xmnls:mylib="http://schemas.android.com/apk/res-auto"
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top