[轉]eclipse導入V7包出現錯誤解決辦法


android下v4    v7   v21等包是android系統的擴展支持包,就想windows的系統補丁一個道理。

        android的擴展包主要是用來兼容低版本的,比如android3.0以后出現了actionbar,如果要使用actionbar,那么手機系統必須在3.0以上才能使用,這樣將會導致很多用戶不能安裝apk從而損失用戶;(有人會想,為什么不直接將新出來的東西全部打包到sdk中而是提供各種支持包?我是這樣理解的,比如:如果將原生actionbar直接打包到低版本的sdk包中,而低版本手機里面卻沒有相關的代碼,這樣即使在開發的時候能在兼容低版本,但運行在低版本手機上時,應用去系統中找actionbar,發現沒有就會報錯,所以這種做法是不能實現的)

        google開發人員將高版本出來的新東西做了很多向下兼容的支持包,這就是v4、v7...等包的作用,實現的原理就是模仿高版本的新內容,使用低版本去實現(比如v7包中actionbar,其實就是自定義了一個title欄,然后上面有title、logo、back鍵等等,給這些控件賦值或者設置屬性都是模仿原生actionbar的屬性名稱,具體請關注我下一篇博客---使用actionbarsherlock替換原生actionbar)

 

 

        然而,當我使用v7包的時候卻不是那么順暢,在這里總結一下使用的步驟、遇到的錯誤以及解決的辦法:

 

1、導入v7包:

Eclipse——>Import--->Existing Android Code Into Workspase--->

D:\IDE\ANDROID64\sdk\extras\android\support\v7\appcompat;(導入成功后,在工作空間里就會有這樣一個項目,打開看看里面的內容,發現src目錄下是空的,為什么沒有代碼呢?原來v7包將java源代碼打成了jar包,在項目libs目錄下;整個工程的結構就是引用了v7-appcompat.jar,然后一個res目錄;其實這個res目錄才是重點,如果沒有res目錄,v7包的使用就不會這么麻煩,直接將v7-appcompat.jar拷貝到項目中就行了,但是這個jar包中是沒有資源目錄的,這就是為什么v7支持包需要一庫工程的形式供開發者使用。)

                                  

2、接下來會發現v7工程報了錯誤:

                              

        res目錄下有很多values目錄,這是android為了兼容和適配不同版本系統而細分了很多個values目錄,

values-v21就是Android5.0系統加載的資源目錄(根據values后面的后綴,可區分不同版本、不同分辨率、不同語言等從而兼容不同版本、適配不同屏幕大小和不同國家語言),有人會嘗試把這些“多余”的values包刪除掉,就不報錯了,但是發現刪除這個后又有了新的錯誤,永無止境,況且即使你把所有的錯誤都刪除,估計這個v7包也沒什么用了,所以這種解決辦法是不可行的。

         剛剛上面說到了values-v21是Android5.0加載資源的目錄,但是我發現我的編譯版本是4.0,這就是為什么報錯,因為編譯版本是4.0,在應用編譯打安裝包時,她不認為這個應用會安裝到5.0上,因為target是4.0,所以它不會為5.0做任何事情,也就更不會將values-21打包進去,既然不會打包進去,存在就沒什么價值,所以認為Android4.0應用中不應該存在這個values-21,所以就報錯了;解決辦法就是講編譯版本提高到5.0以上:

解決辦法:只要將編譯版本提高到5.0就行

(右擊-->Properties--->Project Build Target--->勾選5.0———>clean庫工程)

 

3、我們的工程應用庫工程后,還是報錯,同樣的道理,因為我們的工程將v7庫工程引用進來后,我么你的資源目錄里面就包括了v7的資源目錄,里面照樣也會有values-v21等,我已也要將我們的工程編譯版本提高到5.0,然后clean

4、完成上述操作后,發現工程沒有錯誤了,但是一運行,又報錯:

                                             

         

        它說在support-v7包的ActionBar中有多個dex文件,但遇到這種錯誤,一般都是重復引入jar包造成的;

        再看看工程的build path:

                                       

果然發現引入了兩個v4和v7包,這是為什么?

原來在我們自己的工程libs下有一個v4包和一個v7包,而v7庫工程里面也有,我的工程又引用了v7庫工程,

這樣將v7庫工程下的v4和v7包也引入了,所以導致工程中重復了:

 

 

         找到了原因,問題就迎刃而解了,打開工程的build path,Remove掉我們工程中的兩個支持包就行

(使用v7庫工程中引入的支持包):

                                          

 

運行項目,大功告成


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM