我已經開發了幾個Android應用程序,並創建了一個我經常在多個應用程序中使用的類的代碼庫。此代碼全部位於Subversion(svn)存儲庫中,每個應用程序位於其自己的存儲庫中。然後每個應用程序都有svn:所需軟件包的外部引用(例如,com.company.android.views)。除非需要爲自定義屬性導入R類,否則這很有用。跨Android應用程序使用的自定義視圖和屬性
定製視圖具有像這樣的導入:
import com.company.apps.myapp.R
,以便它可以具有這樣的代碼:
attributes.getBoolean(R.styleable.WebImageView_autoload, autoload)
即自定義屬性在res /值/ attrs.xml定義:
<declare-styleable name="WebImageView">
<attr name="autoload" format="boolean" />
...others
</declare-styleable>
這很好,但問題出現在我有第二個應用程序使用相同的視圖。現在我更新導入到import com.company.apps.anotherapp.R
,這樣它就可以與「anotherapp」一起工作,並用「myapp」打破它。當一次處理多個應用程序時,這成爲一個問題。
我的臨時解決方案是檢查適用類的更新,然後將svn:externals鎖定到該特定修訂。每個應用程序最終都被鎖定到了一個不同的修訂版本,而這個版本很快就會變得雜亂無章,但這似乎比將各個類直接複製到應用程序的回購更好。
唯一的其他解決方案,我一直在使用反射,像想到這一點:
Class class = Class.forName(context.getPackageName() + ".R");
Field[] fields = class.getDeclaredFields();
然後遍歷領域,指派我關心到變量在整個類使用的人。這似乎相當笨拙,特別是當我們可以談論幾個需要這樣做的課程時。
我該如何解決這個問題?有沒有辦法動態導入com.company.apps。*。R或以某種方式生成不依賴於特定應用程序的不同R類?還是有其他一些明顯的(或不是很明顯的)解決方案,我完全錯過了?
嗨,你有沒有做任何特殊的自定義屬性在你的圖書館項目工作?當我嘗試它時,只有在庫和最終應用程序使用相同的名稱空間時才能成功編譯。如果我想要2個應用程序使用相同的庫(例如:免費和付費版本),這種方法效果不佳。 – Gromix 2011-02-24 11:32:35