Android分包MultiDex:NoClassDefFoundError引發的血案
阿新 • • 發佈:2019-02-14
一件thing
holl,hello, helo,咳咳。是的大家又見到了我,沒錯。最近我特麼真的高產似母豬,沒辦法專案問題真的多。專案是一個關於融合跑腿,滴滴打車類似功能的APP。所以引入的第三方包很多。
一個Bug
此時就出現了一個巨大的Bug:
java.lang.NoClassDefFoundError: rx.subscriptions.CompositeSubscription
at rx.internal.schedulers.CachedThreadScheduler$CachedWorkerPool.<init>(CachedThreadScheduler.java :60)
at rx.internal.schedulers.CachedThreadScheduler.<clinit>(CachedThreadScheduler.java:42)
at rx.plugins.RxJavaSchedulersHook.createIoScheduler(RxJavaSchedulersHook.java:90)
at rx.plugins.RxJavaSchedulersHook.createIoScheduler(RxJavaSchedulersHook.java:76)
at rx.schedulers.Schedulers .<init>(Schedulers.java:90)
at rx.schedulers.Schedulers.getInstance(Schedulers.java:66)
at rx.schedulers.Schedulers.io(Schedulers.java:160)
一種cause
由Android Studio的錯誤提醒:java.lang.NoClassDefFoundError , 可以得知是由於分包出現的錯誤,dex/field/class這三個檔案的個數在android裡面都是有限制的,為65535個。而現在由於我在開始的時候就如下面所示進行了設定,於是便沒有65535出現,只有上面所示的錯誤了。
defaultConfig {
applicationId "cn.jiayou.dsf.delivery"
minSdkVersion 16
targetSdkVersion 22
versionCode 1
versionName "1.0"
multiDexEnabled = true //表示可以進行分包, 用於啟用MultiDex
}
一個method
在defaultConfig中新增multiDexEnabled = true
匯入分包support庫compile ‘com.android.support:multidex:1.0.1’
用MultiDexApplication替代Application,或者在你application的attachBaseContext()方法中呼叫MultiDex.install()。
OVER,這樣子就解決了!
程式碼_1:
multiDexEnabled = true //表示可以進行分包, 用於啟用MultiDex
程式碼_2:
compile 'com.android.support:multidex:1.0.1' //支援包用於5.0以下系統
程式碼_3:
public class MyApp extends Application{
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
@Override
public void onCreate() {
super.onCreate();
mContext = this;