Android方法數(shù)超過65535后的分包及其原理(一)

方法數(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以下的手機上跑一跑,完美運行~ 關于分包的原理,將在下一篇文章中進行分析。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,100評論 25 709
  • 以下參考自官方文檔配置方法數(shù)超過 64K 的應用 隨著 Android 平臺的持續(xù)成長,Android 應用的大小...
    Mars_M閱讀 1,636評論 3 6
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評論 19 139
  • 寫就是了,成不成家又能咋地? 我非常非常羨慕一些當作家的人。 他們就靠著敲字,就能敲出來房子車子票子。這真是名利雙...
    卜玉霞天地閱讀 460評論 4 0
  • 這是一只有名字的黃鼠狼,叫黃陂子。當父母給它起這個名字的時候,它的兄弟姐妹都不服氣,說這是人類對我們的統(tǒng)稱,怎么能...
    種樹老頭閱讀 1,244評論 0 1

友情鏈接更多精彩內(nèi)容