天天看點

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

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

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

一 使用Build Path中的Order and Export頁籤

1.将執行個體Android項目(project源碼)import到Eclipse中,這時由于第三方jar包路徑和原作者的存放路徑不一緻,項目會提示紅叉叉,不能進行編譯;

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

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

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

```

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

```點選“OK”

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

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

結果:

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

到logcat中查錯呗:

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

4.重新配置Build Path:

繼續Build Path→Configure Build Path→Order and Export,将裡面的3rd.jar勾選,點選OK

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

再run一次:

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

别急Project→clean一下目前項目,再run一次就得到正确結果了。

Success!

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

二 建立自己的 Source Folder

1.Build Path→New Source Folder→給第三方jar的檔案夾起個名字,例如3rd.jar→将所有的第三方jar包全部複制黏貼到這個包下面:

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

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

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

3.這個時候,僅僅是将這個建立的Folder添加到Build Path中去,複制過來的3rd.jar還是沒有添加進去的,這時,選中3rd jar檔案下面的所有第三方jar包,右鍵→Add to Build Path:

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

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

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

為了差別之前的,我在這裡clean一下。

結果:成功,success!

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

總結:

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

什麼是Build Path?其實在這裡(Android Project最後建構成apk檔案)顧名思義,就是最後apk檔案建構的資源在該項目中存放的路徑。結合這裡的實際情況,在正确的Order and Export頁籤裡面,預設勾選了3個路徑:src、gen和我們自定義的3rd jar,這就表示,我們的3rd jar包将會直接構成最後的apk檔案(部分還是全部?)。

我們結合Order and Export頁籤的注釋來看下:建構class檔案路徑的順序和導出條目,導出的條目對依賴的項目有效。

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

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

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

當目前項目建構好(Build)apk檔案(project)後,我們用模拟器去運作。請注意這時候環境開始發生了微妙的變化,現在目前的運作環境是Android SDK的dalvikvm(而不是為Eclipse配置的本機JRE環境,那是一般的Java項目的運作環境,我們現在是Android Project)。對于dalvikvm來說,apk是它的一個project;同理,在Eclipse開發過程中,目前項目明顯是它的一個project(Android Project),額外引用的3rd.jar包也是它的一個project。在項目的開發階段,我們自己的目前項目依賴了3rd.jar,在項目建構成apk檔案(project)的時候,如果我們不将3rd.jar這個工程設為Exported(讓依賴目前Android Project的apk 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 project和Android project一起建構(打包)成apk project,然後部署(安裝)在dalvikvm中運作,其實也是相當于在dalvikvm運作環境中直接添加了一個3rd.jar。

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

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

繼續閱讀