今天由於某種原因,接到一個任務,需要合并兩個原先是以兩個APK包方式發行的版本,由於他們功能互補,因此希望把這兩個工程合成一個工程。仔細整理了下思路,決定將一個比較接近底層服務的apk包做成一個jar的方式進行整合!
原來以為要自己手動匯出jar,然後再引用,後來發現eclipse本身已經內建了這個功能,只要我們在功能屬性中直接進行引用即可。Project->Properties->Android,右下角有個Library選項,我們只需要Add我們要包含的工程即可,這裡當然IDE只會提示那些作為Library的工程的名稱,因此我們還要對另一個工程做點小小的工作.就是將其設定成Library.具體做法也是剛才那個路徑Project->Properties->Android,但是這次我們要在Is Library的地方打勾,那麼這個工程就會被認為是要作為library來提供的了! 好了,基本的組合架構已經完成了,下面要進行內容的整合,由於兩個項目本來就是獨立的APK,因此都會包含有各自的資源檔和一些工程相關的檔案,這裡我們只需要對Manifest.xml中的內容進行移植即可,裡面的一些程式相關的組件聲明,我們需要將其整合到我們的目標工程裡,具體做法當然只能是copy,modify了。這個我相信你懂的:)最後作為Library裡manifest檔案裡看到的manifest就會只剩這個框框了: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.avtest"> <application/> </manifest>就這樣我們的工程就完成了:) 這期間的資源整合我看了下,發現是以名稱的方式進行整合的,比如兩個工程都在Drawable目錄下有個叫做icon.png的圖片,那麼它的做法是,發現這種情況以目標工程的為主,直接忽略掉Library裡的那個資源檔。因此我們在開發Library的時候對這些資源的命名最好有一套自己的規則,以防止重名!最後碰到一個小問題是,我發現我在給最終的apk包做簽名的時候,很多.xml檔案會報not well-formed (invalid token)的錯誤,這個問題也困擾了一段時間,雖然知道應該是檔案格式的問題,但是當我把兩個工程的字元編碼都設定成UTF-8後還是不行,最後才知道,原來還要在Window->preference->workspace->text file encodeing裡進行設定。終於大功告成了!