這篇文章的主題是:
- 依賴是什么
- eclipse中的依賴
- AS中的依賴(有一篇詳細的文章講得非常好,這里就不再寫了http://blog.csdn.net/yy1300326388/article/details/46422939)
另外相關的話題有↓,可以自行查看:
- 安卓的support包的歷史
- AS中grandle具體的內容
- 怎么做一個給別人用的Jar包和lib庫
(另外,貼圖有點麻煩,所以這里圖片只放了一張,如果有博友覺得本文有幫助而且希望補充圖片,可以留言)
依賴是什么
依賴這個東西在安卓開發中是非常有用的,它讓我們可以肆無忌憚地成為一位調包俠
安卓開發中不可能讓你從頭開始寫一個個基礎的功能,我們往往會調用系統提供的方法,使用系統提供的工具,來實現我們的需求,往往我們只需要在JAVA文件的開頭Import一些類就OK了,這種情況其實就是一種依賴,我們寫的代碼依賴系統提供的一些工具包
而這是最簡單的情況,因為這是系統提供的包,我們除了import外,什么都不用干
但當你需要使用一些其他的包,不論是系統提供的附加包還是第三方包,你就需要做更多的事情了
這些事情我們統稱依賴,IDE中對依賴的實現我們稱為依賴機制
Eclipse中的依賴機制
1.工程文件夾
我們來看一個安卓工程(eclipse對於不同的工程,細節會有區別,我們這里特指安卓工程)

我目前遇到過的全部的安卓項目中會出現的依賴的形式就是這5種,或者確切地說是這4種
- Android6.0
- 這是在你新建項目的時候默認直接支持的包,里邊就只有一個叫android的jar包
- 它根據版本號的不同,只支持對當前版本號的安卓系統的APP的開發,如果我們不需要兼容性,那我們開發軟件可以不用v4,用這個包里的內容也可以,但是為了兼容性,就會用到v4已經其他的
- 這個包里的東西我點開看,有這些:Android包、Java包、Javax包、Dalvik虛擬機包、org包
- 它修改最直接的方式是在圖1中使用1和2指定,還有默認的設置方式是你一開始設置的目標taget版本
- 一般說來它不太會出問題,而且一般都設置到最新
- Android Private Libraries / Libs
- Android Private Libraries本身的意思是Android項目私有的庫,而它其實就是libs目錄里面的jar包的映射
- 添加jar包到libs里面,系統自動把jar加載到android private libraries中,你把libs中的jar包移除 Private Libraries中也就沒有了
- 而私有是什么意思我也不太懂,如果是相對下面的Android Dependency,那確實是有點公私區別的意思
- 這是最常見最普通的我們引入外部庫的方式,操作也最方便,下面會詳細說
- Android Dependency
- 這也是一種引入外部庫的歸宿(外部庫存放的位置)
- 相比上面那個,這個家伙有三個特點
- Android Private Libraries引用的是包只能給自己使用,dependencies是引用的公用的庫,它可以同時被其他的項目引用
- 使用dependencies 的操作更復雜,下面會說
- Android Private Libraries引用的是jar包,dependencies是引用的libraries
- Referenced Libraries
- 這好像也是一種引用jar包的方式,我雖然操作過,但我只是按照有的教程的說法做的,而且最后這種方式好像都沒有用,於是我嘗試之后又刪掉了,這種的跟前面的有什么區別我也不知道,不過好像這是舊的使用jar包的方式,是使用libs包之前的方式
- 詳細的情況下面會說
2.操作方式
推薦而且常用的操作
一個android項目通常由代碼和資源文件組成。如果把代碼和資源文件打成Jar包供其他工程使用,則Jar包中的資源文件將無法被打包到最終的APK文件中,致使程序無法正常運行(直接引用Jar報的話,jar包中的style之類的應該不會自動在R類中生成,所以View中如果使用了資源就會報錯)
於是就有了這兩種方式,一種是引入不帶資源文件的jar包,另一個是引入帶資源的Library
- 引入Jar包
- 這是最簡單的一種方式,當一個庫被打包成了jar包之后,你可以非常方便的使用:直接把這個jar包用鼠標拖入項目的libs文件夾中,點擊copy to,於是項目會進入libs文件夾,而且同時,系統自動把jar加載到android private libraries中,然后你就可以在代碼中Import相關庫了
- Private Libraries 就是libs里面的jar包的映射!你把libs中的jar包移除 Private Libraries中也就沒有了(移除步驟就是這樣,非常簡單)
- 大部分成熟的第三方庫都是這個形式,比如我用過的ksoap,mpandroid,以及安卓官方提供的support v4
- 引入帶資源的Library
- 有些特殊的情況下,這個包是帶資源的,居然說類似這個形式的包就可以使用這種方式引入(如下圖,libs中其實有個Jar包,然后res就是資源),比如support design,我們會使用另一種稍顯復雜的方式來引入
- 引入步驟:
- 在eclipse中new一個安卓項目,方式使用
,找到要引入的包,這里的例子就是design包,copy to,這個步驟不會有問題
- 引入之后我們彈出這個項目的圖1,選擇3,把它本身作為Library,選了這個之后,這個項目就可以被其他項目引用,並且這個項目本身不能被運行
- 然后在我們要引用這個項目的實際工程項目中彈出圖1,點擊5,就能看到剛剛設置為library的項目,選擇之后就會在4中看到我們已經引用了這個項目
- 然后在Android Dependency 中就會看到一個以這個項目名稱命名的一個jar包,它是帶資源的
- 在eclipse中new一個安卓項目,方式使用
- 移除步驟:直接在圖1中使用remove就OK了
- 需要這么使用的包不太多,我目前用過的必須要以這種方式引入的有support v7,support design
- 包圖:
一般以上步驟完之后需要clean項目
上面兩種方式的舊版本
- 引用Jar包【等價於上面第一種】
- 進入圖2,點擊3,選擇目標jar包
- 進入圖3,勾選2,點擊3
- 引用library
- 進入圖2,點擊2
- 選擇“User library”,點擊“下一步”
- 點擊“User librarys”按鈕在出現的界面中點擊“New..”按鈕,在彈出的界面中隨便起一個名字,點擊“確定”
- 點擊“Add jars”按鈕選擇第三方jar包,
- 點擊“確定”完成操作
然后還有一種方式是右鍵build path
- build path
- 你把jar包拖入Libs之后,當你右鍵的時候如圖4,在build path中能看到add to build path,當你點擊之后,你的項目下會自動新建Referenced Libraries 文件夾,這個Libs包會出現在下面,但這個時候你還沒有真正引用到它,你需要進入圖3,在1的2中打鈎,甚至有的人說你需要使用3把這個包放Up到最上面
- 移除方式:右鍵這個包,delete是灰的,但在圖4中的build path中能看到remove,點擊它就OK了;或是進入圖2,選擇包,並remove
- 上面5個工程文件夾中,右鍵的build path中能看到add to build path只有Libs
3.操作中可能出現的意外處理
- 一般你感覺正確操作完就出現問題,第一件要做的事就是clean和refresh項目,如果問題還在,簡單檢查后也不知道問題出在哪兒,那就重啟eclipse
- libs中的Jar包無法刪除
- 直接關閉eclipse(關閉項目沒有用)
- 手動到Lib文件夾下,刪除
- 打開eclipse,右鍵refresh項目
- jar包好像無所謂,但是引入帶資源文件的Library時,如果這個Library本身也依賴其他的jar包或者library,這時候可能會發生錯誤,有兩個解決方式可以試試
- 把被多次引用的jar包替換成同一個版本的(復制替換)
- 保留最底層的引用,上層同樣的包要引用的話干脆刪掉
- (還有說法是:如果所開發的類與Android原生的類沖突,可以通過project->properties->java build path-> order and export (up / down)切換jar 編譯時使用的優先級)
如果最后還是有問題無法解決,那請換用AS大法,親測同樣的代碼,在eclipse中報錯,在AS中完美運行,就為這點換的AS!
圖:

- 圖1
- 彈出方式:右鍵項目名稱,選擇properties,然后彈出
- 它跟圖2、圖3其實是一個對話框,可以使用同樣方式彈出

- 圖2
- 彈出方式:如圖4,選擇下面的configure bulid path
- 也可以如圖1一樣的方式
- 3和4其實差不多,只是可選擇的范圍不同而已。add jars 可選范圍是你的Project目錄,add external jars可選范圍是任何目錄。
- Add variables :通過類似於環境變量的方式指定一個引用jar的路徑
- Add libraries :將一些已經存在的庫文件添加到引用路徑
- Add (External) class folder :添加項目中類所在的文件夾

- 圖3
- 如圖1圖2方式

- 圖4