2015年1月30日 星期五

使用 Google Play-Service 而造成 Unable to execute dex

Google Play-Service Library 算是撰寫 App 必用的幾個 Library 之一,但很麻煩的一點是它很大,很多東西不一定會用到,以我的專案為例,目前就 Google Analytics、GCM、Google Cast 這三個而已,而一個 Java dex 檔案中受限於 65536 個 methods,身邊不少開發者朋友因為使用了 Play Service 而發生爆 method 的狀況。

根據聊天時收集到的情報,之前最常見的解決方法是拆成多個 dex,再來是公司本身和 Google 為 partner 關係,可以獲得少部份必需的 source code 使用即可。這個狀況在新版的 play-services:6.5.87 有另一個官方提供的新解法,詳細情況可以參考:Google Play services and DEX method limits

大致上我們先前使用 play-services library 時有兩種方式,直接使用 .jar 檔案或在 build-gradle 撰寫 com.google.android.gms:play-services:6.5.87 從 mavenCentral 或 jcenter 取用,而在新版的 6.5.87 時,可以加上 -base 或 -cast 取用部份的 API 來使用,如果專案還沒有改用 Gradle,也可以趁這個機會做轉移,以我的專案為例會這樣子寫

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile 'com.android.support:support-v4:20.0.0'
    compile 'com.android.support:appcompat-v7:20.0.0'
    compile 'com.android.support:mediarouter-v7:20.0.0'
    compile 'com.google.android.gms:play-services-base:6.5.87'
    compile 'com.google.android.gms:play-services-cast:6.5.87'
    compile project(':facebook')
}



沒有留言:

張貼留言