2011-07-24 33 views
2

我不確定我是否遇到Android工具中的錯誤,或者這是否是有意設計的。問題是這樣的:我有一個Android庫項目,導出一個小部件。作爲該插件的一部分,設置樣式屬性導出在R.styleable:導出不同包名下的Android庫項目資源?

庫項目(包= com.example.mylib):

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

應用項目(包= 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失敗,出現以下錯誤:

No resource identifier found for attribute 'someAttr' in package 'com.example.mylib'

就像我說的,我可以通過改變應用程序的包名「com.example.mylib」解決這個問題,但當然這不是我想要的!我錯過了什麼嗎?

回答

1

這是一個已知的bug #9656。我寫了兩篇關於這個問題的文章:herehere。我已經解釋了爲什麼會發生這種情況,以及如何修補這個問題,如果你確實真的需要這個問題的話。

現在,如果您不想重建aapt,則需要將所有自定義屬性和佈局從庫中移至應用程序。

+0

噢,我的,好吧,現在我想讓我的生命回到那兩個小時,我浪費了試圖圍繞這一點。謝謝! – Matthias

+0

其實我有一個問題:當我將lib項目中的attrs.xml複製到應用程序項目中時,那麼資源ID將在運行時不匹配,應用程序將崩潰。當我移動它時,lib項目將不再編譯。那麼我怎樣才能通過複製樣式化的聲明來解決這個問題? – Matthias

+0

您需要將使用* custom xml attriubtes的所有內容移至應用程序,而不僅僅是自定義屬性聲明。換句話說,如果您有使用自定義屬性的自定義View X以及使用自定義視圖X的佈局L1,...,Ln,則需要將視圖X和所有Ls移至應用程序項目。 – inazaruk

0

對於任何可能被仍在尋找答案:因爲ADT 17,你必須使用http://schemas.android.com/apk/res-auto作爲命名空間自定義在庫項目屬性,可以作爲一個魅力:

xmnls:mylib="http://schemas.android.com/apk/res-auto"