2016-05-11 36 views
9

Dears, 我在很多博客文章中看到,multidex應用程序的啓動比普通應用程序慢。 我的應用程序使用了很多超過64k方法的庫,所以我使用multidex。但是,當我在發佈版本中使用proguard的,最終的APK小於64K方法只能在Android調試版本中啓用multidex嗎?

所以我的問題是:我可以啓用Android的調試版本multidex只所以我沒有運行時錯誤?並在發佈版本中禁用多個dex,因爲我不需要它?

如果是,如何?

如果沒有,Android是否足夠聰明,用來加快啓動,因爲它應該認識到,應用不超過64K,即使是多DEX的應用程序?

回答

11

是的,你可以。當你宣佈你buildTypes包括multidex僅調試:

buildTypes { 
    release { 
     multiDexEnabled false 
    } 
    debug { 
     multiDexEnabled true 
    } 
} 
+0

不知道,但這個似乎我測試 –

+0

工作但你還是要(有條件的基礎上,BuildConfig.DEBUG'的'的值)調用'MultiDex.install(本)'代碼,對不對? –

+1

@KonradMorawski對於Android 5及更高版本不是必需的我相信 – Boy

6

反而使multidex僅爲調試的,你可以改變你分鐘SDK版本,以21只爲調試所以gradle這個能加快與ART德興:

android { 
    productFlavors { 
     // Define separate dev and prod product flavors. 
     dev { 
      // dev utilizes minSDKVersion = 21 to allow the Android gradle plugin 
      // to pre-dex each module and produce an APK that can be tested on 
      // Android Lollipop without time consuming dex merging processes. 
      minSdkVersion 21 
     } 
     prod { 
      // The actual minSdkVersion for the application. 
      minSdkVersion 14 
     } 
    } 
      ... 
    buildTypes { 
     release { 
      runProguard true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 
               'proguard-rules.pro' 
     } 
    } 
} 
dependencies { 
    compile 'com.android.support:multidex:1.0.0' 
} 

http://developer.android.com/tools/building/multidex.html

0

建議不需要再方法由於Android工作室成爲「不夠聰明」。 事實上,現在給你一個警告,當您使用的minSdkVersion 21(舊的方式),以加快構建時間與DEX:

您不再需要一個開發模式,使 開發過程中多德興,這可以打破API版本檢查少......

在過去,我們的文檔建議創建一個開發產品 味,有21的minSdkVersion,爲了使multidexing 加快發展過程中顯著的基礎之上。該解決方案 不再需要,它有一些嚴重的缺點,例如 中斷API訪問檢查(因爲真正的minSdkVersion不是 已知更長)。在最新版本的IDE和Gradle插件 中,IDE自動通過連接設備 的API級別用於部署,如果該設備是至少21 API,然後 multidexing自動開啓,這意味着你會得到同樣 速度效益爲開發產品的風味,但不打折扣。