Android項目中如何正確的引入第三方jar包(工程)

Android項目中如何正確的引入第三方jar(工程)


最近在學習一個Android技術點時,需要在工程項目中引入第三方jar包,遇到的問題是在編譯的時候能通過,但是在實際運行的時候會出錯。後來經過調研發現,原來是在引入第三方jar包的時候出錯了,現在總結已經成功的兩種方式。


一 使用Build Path中的Order and Export選項卡

1.將實例Android項目(project源碼)importEclipse中,這時由於第三方jar包路徑和原作者的存放路徑不一致,項目會提示紅叉叉,不能進行編譯;


2.下載第三包jar3rd.jar保存到本地,然後通過Build PathConfigure Build PathLibrariesAdd external JARS,3rd.jar添加到項目的Build Path中去,這時該Android項目上的紅叉叉就會消失,項目能通過編譯;


```


```點擊“OK”


3.接着,我們到模擬器上Run下這個項目,模擬器啓動是在是太慢了,這個時候,我們可以喝點水,上個廁所,站起來走走。程序員,要對自己的身體好一點。我這次就不去廁所了,寫這篇文章呢。模擬器還崩潰了一次,悲劇,只得again......

結果:


logcat中查錯唄:


4.重新配置Build Path

繼續Build PathConfigure Build PathOrder and Export,將裏面的3rd.jar勾選,點擊OK



run一次:

還是報錯?!蝦米情況!!!

別急Projectclean一下當前項目,再run一次就得到正確結果了。

Success


思考:如果第三方jar包只有一個這樣做還好說,如果在項目中引入的jar包很多,這是可參考第二種方法。


二 創建自己的 Source Folder


1.Build PathNew Source Folder→給第三方jar的文件夾起個名字,例如3rd.jar→將所有的第三方jar包全部複製黏貼到這個包下面:

2.複製黏貼所有第三方jar包:

3.這個時候,僅僅是將這個新建的Folder添加到Build Path中去,複製過來的3rd.jar還是沒有添加進去的,這時,選中3rd jar文件下面的所有第三方jar包,右鍵→Add to Build Path


```我們看看這裏發生了什麼變化:

爲了區別之前的,我在這裏clean一下。

結果:成功,success

==================================================================================================================

總結:

其實這個問題的核心是:有沒有將第三方jar包添加至新apk文件的Build Path中去。

什麼是Build Path?其實在這裏(Android Project最後構建成apk文件)顧名思義,就是最後apk文件構建的資源在該項目中存放的路徑。結合這裏的實際情況,在正確的Order and Export選項卡里面,默認勾選了3個路徑:srcgen和我們自定義的3rd jar,這就表示,我們的3rd jar包將會直接構成最後的apk文件(部分還是全部?)。

我們結合Order and Export選項卡的註釋來看下:構建class文件路徑的順序和導出條目,導出的條目對依賴的項目有效。


我們電腦上的Eclipse IDE開發環境是配置了本地的JDK環境的(環境變量classpath),我們將已經爲Eclipse配置好的JDK環境當做第一方,我們爲第二方,那麼3rd.jar就是第三方了。(不知道正確與否,我是這麼理解的)

Eclipse上開發當前項目的時候,我們默認依賴的是本地JDK環境裏面的工程(這裏的工程就是一個個的jar文件),如果要引入第三方(工程)jar的話,必須要添加額外的jar文件(工程文件),保證能通過編譯,也就是當前項目沒有紅叉叉,允許你去run

噹噹前項目構建好(Buildapk文件(project)後,我們用模擬器去運行。請注意這時候環境開始發生了微妙的變化,現在當前的運行環境是Android SDKdalvikvm(而不是爲Eclipse配置的本機JRE環境,那是一般的Java項目的運行環境,我們現在是Android Project)。對於dalvikvm來說,apk是它的一個project;同理,在Eclipse開發過程中,當前項目明顯是它的一個projectAndroid Project),額外引用的3rd.jar包也是它的一個project。在項目的開發階段,我們自己的當前項目依賴了3rd.jar,在項目構建成apk文件(project)的時候,如果我們不將3rd.jar這個工程設爲Exported(讓依賴當前Android Projectapk project也能依賴3rd.jar)。在apk文件運行時,當apk運行到需要依賴3rd.jar流程的時候,dalvikvm環境無法訪問3rd.jar project中的class文件,自然就會報錯。


依賴關係分析:

在實際運行的時候:apk project依賴我們開發的Android Project,而Android Project又依賴3rd.jar project,相當於apk project間接依賴3rd.jar project,這種間接關係應該是不能自動傳遞的,需要進行手動設置,也就是在構建apk project的時候,把3rd.jar project設爲Exported,讓它可以被apk project間接依賴,當然apk project是直接依賴Android Project的。

第二種方法完全就是將3rd.jar projectAndroid project一起構建(打包)成apk project,然後部署(安裝)在dalvikvm中運行,其實也是相當於在dalvikvm運行環境中直接添加了一個3rd.jar

通過文件的大小分析,我們發現第一種export的方式比第二種直接構建的方式構建成的正常apk文件要小一些。具體是:第一種方法正常情況下apk文件大小306KB;第二種方法下正常情況下apk文件大小334KBapk異常情況時大小是295KB3rd.jar的大小是33.7KB。我也不知道具體原因,猜測是進行了“結合編譯”,也就是將Android Project3rd.jar project在編譯的時候結合起來,比如去掉相同的地方,從而構建成apk project;或者是“有效編譯”,也即是隻將3rd.jar中有效有用的部分整合到Android Project中去,然後構建成apk project。本人也只是菜鳥一隻,只能這樣猜想一下,憑目前的知識水平,還不知道到底是怎麼回事,也不知道如何去驗證,如有高手能賜教一二的話,不勝感激。當然由於本人的水平有限,本文中的語言和詞彙肯定有表述不當的地方,大家自己辨別了,這只是我的個人理解。建議大家無論什麼時候都不要盡心他人言,官方的文檔纔是你最堅實後盾。

我們假如官方文檔是100分,完美的;我們的原作者是一個技術大牛,能學到95分;然後在他的書或者文章中,由於翻譯寫作表述等因素限制,可能能將80分的內容表述清楚;然後我們讀者在閱讀學習的時候,由於個人的理解能力和方式差別,能得到60分就很不錯了。在這個過程中,如果僅僅只是隻是數量上的減少還可以接受,但是知識都是一環扣一環的,前面的理解不到位或者錯誤將會一直誤導後面的學習和理解。所以我還是建議大家儘量去看相對權威、準確、規範的官方文檔,別人的二手甚至N手資料只能當一個引導作用,切不可全信。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章