2016-02-05 86 views
0

由於我的應用程序很大,我不得不使用MultiDex爲我的應用程序拆分以前的棒棒糖設備。 在我的Nexus 4(ICS 4.3)上調試我的應用時,出現以下錯誤。Android MultiDex ClassNotFoundException

爲什麼我的課程沒有找到?

defaultConfig { 
    applicationId "de.itout.bring.handsoffme" 
    minSdkVersion 17 
    targetSdkVersion 23 
    versionCode 6 
    versionName "1.2" 
    multiDexEnabled true 
} 
buildTypes { 
    release { 
     //signingConfig signingConfigs.debug 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     signingConfig signingConfigs.release 
    } 
    debug { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
} 
dexOptions { 
     //javaMaxHeapSize "512m" 
     //preDexLibraries = false 
     javaMaxHeapSize "4g" 
     incremental true 
    } 

dependencies { 
    compile project(':emoji') 
    provided fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:multidex:1.0.1' 
    compile 'com.twitter.sdk.android:twitter:1.12.0' 
    //compile 'com.google.android.gms:play-services-analytics:8.3.0' 
    compile 'com.crashlytics.sdk.android:crashlytics:2.5.5' 
    compile 'com.google.android.gms:play-services:8.3.0' 
    compile 'com.android.support:appcompat-v7:23.1.1' 
    compile 'com.android.support:support-v4:23.1.1' 
    compile 'com.android.support:design:23.1.1' 
    compile 'com.android.support:cardview-v7:23.1.1' 
    compile 'com.android.support:recyclerview-v7:23.1.1' 
    compile 'com.github.satyan:sugar:1.4' 
    compile 'com.loopj.android:android-async-http:1.4.9' 
    compile 'com.path:android-priority-jobqueue:1.1.2' 
    compile 'com.anjlab.android.iab.v3:library:1.0.30' 
    compile 'com.squareup.picasso:picasso:2.5.2' 
    compile 'com.facebook.android:facebook-android-sdk:4.9.0' 
} 

public class MyApplikation extends SugarApp { 
    @Override 
     protected void attachBaseContext(Context base) { 
      super.attachBaseContext(base); 
      //MultiDex.install(getApplicationContext()); 
      //MultiDex.install(getBaseContext()); 
      MultiDex.install(this); 

     } 

(編輯)

<application 
     android:name=".MyApplikation" 
     android:allowBackup="true" 
     android:icon="@mipmap/my_icon" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme" 
     tools:replace="android:icon" > 

Proguard的儒les.pro

-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-dontpreverify 
-dontoptimize 
-verbose 

FATAL EXCEPTION: main 
    java.lang.RuntimeException: Unable to instantiate application com.android.tools.fd.runtime.BootstrapApplication: java.lang.ClassNotFoundException: Didn't find class "com.android.tools.fd.runtime.BootstrapApplication" on path: DexPathList[[zip file "/data/app/de.itout.bring.handsoffme-2.apk"],nativeLibraryDirectories=[/data/app-lib/de.itout.bring.handsoffme-2, /vendor/lib, /system/lib]] 
    at android.app.LoadedApk.makeApplication(LoadedApk.java:509) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4417) 
    at android.app.ActivityThread.access$1300(ActivityThread.java:141) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:5103) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:525) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
    at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.ClassNotFoundException: Didn't find class "com.android.tools.fd.runtime.BootstrapApplication" on path: DexPathList[[zip file "/data/app/de.itout.bring.handsoffme-2.apk"],nativeLibraryDirectories=[/data/app-lib/de.itout.bring.handsoffme-2, /vendor/lib, /system/lib]] 
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:501) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:461) 
    at android.app.Instrumentation.newApplication(Instrumentation.java:975) 
    at android.app.LoadedApk.makeApplication(LoadedApk.java:504) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4417)  
    at android.app.ActivityThread.access$1300(ActivityThread.java:141)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)  
    at android.os.Handler.dispatchMessage(Handler.java:99)  
    at android.os.Looper.loop(Looper.java:137)  
    at android.app.ActivityThread.main(ActivityThread.java:5103) 
+0

prolly因爲'MyApplikation'不作爲應用類您的應用程序... – Selvin

+0

你有沒有引用您的AndroidManifest'MyApplikation'? – razzledazzle

+0

請向我們展示您的'proguard-rules.pro'文件。這可能是因爲proguard只是簡單地把它們(或者某些東西)吃掉,當你應該保留它們的類名而不是碰它們時。 – Shark

回答

0

@razzledazzle:非常感謝。這些提示非常有幫助。

之後,我有下一個問題。在我的apk文件丟失類分別爲classdefinitions。一些sugarmodels班失蹤(不是全部)。小工具classyshark和sugarlog幫助我! 所以我比較類,找到了解決方案!

對於所有具有multiDex問題的Sugar-ORM用戶。我把「忽略」 - 在我所有的糖類中的調試變量的註釋,現在他們在dex文件中。 我不知道如何或爲何,但它的作品...

@Ignore 
public boolean multiDex; 

也許有更好的解決辦法,但我不知道......可能忽略的註釋的RetentionPolicy做的伎倆。


接下來可能的糖Orm問題可能是proguardtool。保持模型的類名是很重要的。

-keep class com.package.example.models.* {*;} 

這些規則保留了proguard的完整類。我希望它有幫助。

快樂編碼...

0

爲了避免給MultiDex可言,我建議你使用谷歌個人播放服務模塊根據您的具體要求所概述here

minifyEnabled設置爲true並對您的ProGuard條目進行調整。

使用Instant Run現在也存在問題。已經在這個link中報道過。