Android中jar包封裝及調用
在android開發過程當中,咱們常常會有這種需求,本身開發一個類庫jar包,提供給別人調用。
即把項目A封裝成jar包,供項目B調用,而在項目B中調用項目A的activity的時候問題就出現了:找不到資源文件(異常:ERROR/AndroidRuntime(3341):Caused by: android.content.res.Resources$NotFoundException: Stringresource ID #0x7f060007)。問題是,只能共享src文件夾下的代碼,而不能共享res資源文件,夠鬱悶!
建立一個Androidproject, 用eclipse的export導出,去掉AndroidManifest.xml,res 什麼的,這樣只共享了代碼,而此代碼中所調用的res資源文件卻不能正常使用,不然會拋出res.Resources$NotFoundException異常。
那麼如何解決呢?
1.若是隻用共享代碼,而共享的代碼中不涉及到res資源文件的調用的話,直接在Eclipse中導出jar包,在所須要的項目中引用便可。
2.若是共享代碼,並且共享的代碼中涉及到res資源文件的調用,網上通用的方法是把res資源文件放到assets文件夾中,再在src代碼中加載處理,而後再用eclipse導出jar包,引用便可(
res資源雖然能夠打進jar包,但當其餘項目調用jar包時jar包中引用ID 指向的是當前項目的資源,關於如何讓jar包中的資源引用只想jar包中的res文件暫無解決方案。個人問題已解決,解決方案:把圖片資源放入assets包中一併打入jar包,佈局就只能用代碼了。jar包中代碼能夠成功引用jar包內的assets文件。
另:JNI層不可被打包入jar包,只能同jar包一同提供給第三方並放入工程目錄下的libs包中
)。
3.若是共享代碼,並且涉及到res資源文件的調用,並且不想把res資源文件放到assets文件夾中的,直接生成jar包會出現的問題:
1).當在別的項目中引用此jar包時,在項目名上出現小紅叉,而且在console控制檯上直接自動提示:Errorgenerating final archive: Found duplicate file for APK:res/drawable-hdpi/icon.png,一般的解決方法時,在能編譯經過的此項目中直接去掉提示的資源文件,再生成jar包。
2).把公共的icon等資源文件刪除,生成jar包以後,此時在項目中引用,console控制檯上無自動報錯現象。若是jar包中的activity調用了res資源文件夾中的文件,在當前項目中調用jar包中的acticity時,問題就出現了,activity所引用的res資源,若是引用的是Strings.xml文件中的值,則拋出異常ERROR/AndroidRuntime(3341):Caused by: android.content.res.Resources$NotFoundException:Stringresource ID#0x7f060007。若是引用的是layout文件夾中的文件,能找到layout中的xml,例如layout中ee.xml,能夠找到R.layout.ee,可是在ee.xml中定義的控件id卻引用不到,拋出異常ERROR/AndroidRuntime(13703):Caused by:java.lang.NullPointerException。若是在當前項目中調用不涉及jar包中的res的調用,一切OK。
4.若是共享代碼,並且共享的代碼中涉及到res資源文件的調用,若是封裝成jar包,這種方法是達不到要求的(調用jar中封裝的activity,還得保證jar包中activity正常調用jar中所封裝的res資源,上面說了,jar包中的res資源部分調用爲空),那麼如何能知足需求呢?
把要生成jar包的項目作一下處理,在jar包項目的properties窗口中選擇android的選項卡的isLibaray,點擊apply按鈕或者ok按鈕(此時,jar包項目再點擊右鍵選擇runas → AndroidApplication就能正常運行了)。在要引用jar包的項目中,右擊項目名稱,打開properties框口,選擇android的選項卡的isLibaray右側的Add按鈕,添加jar包項目。這樣jar包項目中的activity就能正常引用到jar包項目中的res資源了。項目調用jar包項目的activity就正常了。
http://www.eoeandroid.com/forum.php?mod=viewthread&tid=164411