方法數(shù)超過65535引出的問題
隨著Android開發(fā)過程中,各類第三方庫的加入,導致整個項目的方法數(shù)在不知不覺中就超過了65535。隨便看幾個常用的庫
-
Android Support的方法數(shù)
-
OKhttp的方法數(shù)
方法數(shù)超過65535的解決方案
當方法數(shù)超過65535時,項目一運行錯誤日志就一下映入了眼前

怎么是EventBus的問題,找不到EventBus?不可能啊。。。EventBus都用了這么久了,從來沒出現(xiàn)過這個問題?。。。?/p>
Task it easy!
我們先來看一下整個項目的總方法數(shù),居然剛剛超過了65535,那很有可能就是65535的鍋了,EventBus默默松了一口氣。
也許會有觀眾老爺問,那怎么統(tǒng)計整個項目的方法數(shù)呢?那這里就順帶講一下吧。
這里用到了一個叫做dexcount-gradle-plugin的插件,在app/build.gradle中添加
buildscript {
repositories {
mavenCentral() // or jcenter()
}
dependencies {
classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.8.1'
}
}
// make sure this line comes *after* you apply the Android plugin
apply plugin: 'com.getkeepsafe.dexcount'
編譯過后,你就會看到

你想要的信息都在里面了~不只有方法總數(shù),還包括變量的總數(shù)和類的總數(shù),總之十分強大。
言歸正傳,現(xiàn)在來看下如何解決這個問題呢。。。很簡單,將build.gradle中的multiDexEnabled設為true就行了啊,但是這個辦法有一個局限性,在5.0以下的設備仍然會報NoClassDefFoundError的錯誤,所以如果你的項目minSdkVersion在21及以上,那這個辦法OK(Google的5.0以后才引入了該屬性)。但是我們不能拋棄5.0以下的用戶啊,那用下面這種方法就可以完美解決了。
- 在app/build.gradle中導入依賴
compile 'com.android.support:multidex:1.0.1'
- 重新覆寫Application中的方法
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(context);
Multidex.install(this);
}}
- 最后再將build.gradle中的multiDexEnabled設為true就行了。
很簡單吧?在5.0以下的手機上跑一跑,完美運行~ 關于分包的原理,將在下一篇文章中進行分析。

