1. 程式人生 > >Android Studio中support版本錯誤問題的處理

Android Studio中support版本錯誤問題的處理

問題現象

說實話,我真不知道Google是怎麼想的,或者如這裡所說的確是個BUG,也不知道為什麼拖這麼長時間沒有解決掉,或者是我的RPWT。

這問題的表現就是,在專案的build.gradle檔案裡,如果用傳統的自動依賴處理方式:

compile 'com.android.support:appcompat-v7:+'

編譯時系統就會去依賴最新版的support:21.0.0-rc1 。理論上這本不應該有問題,但是不知道是不是Google腦子被槍打了,本來作為相容需要而出來的support包,居然在這個版本變成不相容了,21.0.0-rc1這個版本的support包裡只有幾個Android L用到的東西,所以必須使用L版本的build tool,而且build出來的程式只能在Android L下執行……

都不支援舊版了,那還support個P啊。

而且目前我碰到的情況是:在Mac平臺下沒有問題,最高只support到20.0,但是在Linux下就會support到21.0.0-rc1,不明覺厲。

初步解決方案

目前可以找到的初步解決方案就是修改build.gradle,手工指定support的版本為19或20。如:

compile 'com.android.support:appcompat-v7:19.+'

這樣就可以在低版本的build tool上編譯,而且可以支援低版本的Android了。

但是這個方案有一個問題:

如果你的專案自動依賴了第三方庫,而第三方庫又使用了前面的build.gradle選項,導致依賴最新support時,又會杯具。

第三方庫問題的解決方案

一個能立即想到的辦法就是把自動依賴的第三方庫改為本地依賴,然後把第三方庫程式碼放到本地,編譯到你的專案裡去,這樣麻煩不說,更新也不方便,還要維護一個自己用的第三方庫分支。

更好的解決方案是在你的專案裡指定第三方庫也使用你的依賴配置。如SO上這個帖裡的評論所說,在SO的這個帖裡也有說到:

    compile ('xxxx:xxxx:+') {
        exclude group: 'com.android.support', module:'appcompat-v7'
    }

這樣便可以了。

如果還不行,再試試這個終極大殺器:

到SDK的“extras/android/m2repository/com/android/support”路徑下找到相關的support庫目錄,修改其中的 maven-metadata.xml 檔案,把 21.0.0-rc1 相關的內容刪除,這樣總可以了吧。