打破Android應用65K方法數魔咒

     最近在做一個excel解析的小demo,爲了解析2007以上版本的excel,將poi的一些jar都放入lib中,結束運行報方法數超過65536。

   Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536

這才讓我意識到原來我們的程序中,方法數已經超過了65536。在之前,已經知道了android系統的java虛擬機dalvik在執行java程序時,使用原生類型short來索引dex文件中的方法,因此方法數就唄限制在65536了。之前我一直以爲,這個數量已經很大了,不會達到上限,結果今天就達到了。

不過這個東西呢,我們也是很容易的進行解決的,因爲,就在去年不久前,google官方提供了多dex的支持庫,因此,我們可以很簡單的解決這個問題。

開發工具升級

將android sdks build tools 和android support library要升級到最新的,這個使用android sdks manager很容易就完成了。

配置build.gradle

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies{
compile 'com.android.support:multidex:1.0.0’ //dependencies
}

讓應用支持多dex

androidManifest.xml中application中聲明android.support.multidex.MultiDexApplication;

或自己定義一個Application類,繼承自MultiDexApplication;

或者自己定義的Application類,在attachBaseContext()方法中,添加MultiDex.install(this);

其他

通過上面的方法即可輕鬆完成多dex,不過在低版本的android系統(低於android4.0)可能會有bug出現,還要多進行測試。

究其原因,其實我們的app,自己寫的代碼現在其實不是很多,代碼中使用了大量的第三方sdk,以及其他的一些功能集成。

下面,就要想辦法,減少第三方的功能庫了。這裏跟大家分享一下解決方案。

參考資料: http://developer.android.com/tools/building/multidex.html

原文地址:http://blog.isming.me/2015/05/01/android-multi-dex/,轉載請註明出處。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章