標籤:android io ar 使用 java for sp 檔案 on
利用jar -cvf *.jar * 和直接islibrary 然後產生的jar包比較
jar -cvf *.jar * 會打包資源 即R.java、BuildConfing.java和MainActivity.java
is library只會把包MainActivity.java
百度:(但是還是覺得沒有解決我的疑惑)
在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就正常了
利用jar -cvf *.jar * 和直接islibrary 然後產生的jar包比較(Android中jar包封裝及調用)