13

В моей последней версии некоторые из моих пользователей (менее 0,2%) получают сбой, потому что android.support.v7.app.AppCompatDelegateImplV23 не может быть найден. Я не могу воспроизвести проблему, я получаю только сообщения о крахлитиках. Я использовал apktool для извлечения файлов из своего apk, и я вижу там AppCompatDelegateImplV23.smali. Любая идея, что может произойти?Fatal Exception: java.lang.NoClassDefFoundError: android.support.v7.app.AppCompatDelegateImplV23

Это моя компиляция линия на Gradle:

compile 'com.android.support:appcompat-v7:23+' 

Это исключение:

Fatal Exception: java.lang.NoClassDefFoundError: android.support.v7.app.AppCompatDelegateImplV23 
     at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:133) 
     at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:117) 
     at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:456) 
     at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:59) 
     at MyActivityClass.onCreate(MyActivityClass.java:353) 
     at android.app.Activity.performCreate(Activity.java:6248) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1125) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2437) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2544) 
     at android.app.ActivityThread.access$900(ActivityThread.java:150) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1394) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:168) 
     at android.app.ActivityThread.main(ActivityThread.java:5845) 
     at java.lang.reflect.Method.invoke(Method.java) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687) 
     at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:117) 

EDIT: Это мой главный Gradle файл:

buildscript { 
    repositories { 
     maven { url 'https://maven.fabric.io/public' } 
     jcenter() // version plugin support 

    } 

    dependencies { 
     classpath 'io.fabric.tools:gradle:1.+' 
     classpath 'com.android.tools.build:gradle:1.3.1' 

    } 
    allprojects { 
     repositories { 
      jcenter() 
     } 
    } 
} 
apply plugin: 'com.android.application' 
apply plugin: 'io.fabric' 
apply plugin: 'com.google.gms.google-services' 


repositories { 
    maven { url 'https://maven.fabric.io/public' } 
} 


android { 
    signingConfigs { 
     config { 
...... 
     } 
    } 
    compileSdkVersion 23 
    buildToolsVersion "23.0.1" 
    useLibrary 'org.apache.http.legacy' 

    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 
     } 
    } 
    defaultConfig { 
     applicationId "mypackage" 
     minSdkVersion 14 
     targetSdkVersion 23 
     versionCode some number 
     versionName "some version number" 
     multiDexEnabled true 
     signingConfig signingConfigs.config 

    } 


    buildTypes { 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
      signingConfig signingConfigs.config 
      applicationVariants.all { variant -> 
       variant.outputs.each { output -> 
        output.outputFile = new File(output.outputFile.parent,"myapk.apk") 

       } 
      } 
     } 
     debug { 
      signingConfig signingConfigs.config 
     } 

    } 
    repositories { 
     mavenCentral() 
     mavenLocal() 
    } 
    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_7 
     targetCompatibility JavaVersion.VERSION_1_7 

    } 
    packagingOptions { 
     exclude 'AndroidManifest.xml' 
     exclude 'META-INF/beans.xml' 
     exclude 'META-INF/LICENSE.txt' 
     exclude 'META-INF/NOTICE.txt' 
     exclude 'META-INF/LICENSE' 
     exclude 'META-INF/NOTICE' 
     exclude 'META-INF/DEPENDENCIES' 
    } 
    productFlavors { 
    } 
    dexOptions { 
    // preDexLibraries = false 
     jumboMode = true 
     javaMaxHeapSize "2g" 
     //doesn't seem to be supported with multidex 
     // incremental true 

    } 
    lintOptions{ 
     disable 'MissingTranslation' 
     disable 'ExtraTranslation' 
    } 
} 

dependencies { 

    compile fileTree(dir: 'libs', include: ['*.jar']) 
    //multidex 
    compile 'com.android.support:multidex:1.0.0' 
    //support libs 
    compile 'com.android.support:support-v4:23+' 
    compile 'com.android.support:appcompat-v7:23+' 
    compile 'com.android.support:cardview-v7:23+' 
    compile 'com.android.support:design:23+' 

    //app invites 
    compile 'com.google.android.gms:play-services-appinvite:8+' 

    compile 'com.google.android.gms:play-services-analytics:8+' 
    //chromecast 
    compile 'com.google.android.gms:play-services-cast:8+' 
    compile 'com.android.support:mediarouter-v7:23+' 

    //plus button 
    compile 'com.google.android.gms:play-services-plus:8+' 
    compile('com.crashlytics.sdk.android:crashlytics:[email protected]') { 
     transitive = true; 
    } 


    compile 'com.github.navasmdc:MaterialDesign:[email protected]' 


    //material lib needs it 
    compile 'com.nineoldandroids:library:2.4.+' 


    compile 'com.facebook.stetho:stetho:1+' 
    compile 'com.facebook.stetho:stetho-okhttp:1+' 



    //debugCompile 'com.squareup.leakcanary:leakcanary-android:1+' 
    debugCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1+' 
    releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1+' 

    compile 'com.makeramen:dragsortadapter:1.3+' 

    compile 'com.github.amlcurran.showcaseview:library:5.0.0' 


} 

EDIT: просто имел новый отчет, но для другой версии того же класса

Fatal Exception: java.lang.NoClassDefFoundError: android.support.v7.app.AppCompatDelegateImplV14 
     at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:135) 
     at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:117) 
     at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:456) 
     at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:59) 
     at MyActivity.onCreate(MyActivity.java:353) 
     at android.app.Activity.performCreate(Activity.java:5008) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2044) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2105) 
     at android.app.ActivityThread.access$600(ActivityThread.java:133) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1211) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:4795) 
     at java.lang.reflect.Method.invokeNative(Method.java) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556) 
     at dalvik.system.NativeStart.main(NativeStart.java) 

EDIT: Я только что прошел через много докладов, некоторые из них для AppCompatDelegateImplV23 и некоторые из них для AppCompatDelegateImplV14, некоторые участвуют Экспоузд, но большинство этого не делают. Единственное, что является общим для всех из них, это то, что все они предназначены для укоренившихся телефонов.

+0

Опубликовать ваш build.gradle –

+0

См. [Это] (http://stackoverflow.com/questions/31384935/getting-exception-java-lang-noclassdeffounderror-android-support-v7-app-appco) может вам помочь. – pRaNaY

+0

@GabrieleMariotti добавил файл градиента. – casolorz

ответ

3

Прежде всего, мы должны понять, почему java.lang.NoClassDefFoundError ошибка:

Таким образом, ответ в том, что когда есть файл класса, что ваш код зависит и он присутствует во время компиляции но не во время выполнения. Посмотрите на различия в времени сборки и пути времени выполнения.

Итак, есть несколько вариантов, с тем, что вы можете удалить эту ошибку:

1) Сделать preDexLibraries истина:

dexOptions { 
     preDexLibraries = true 
     jumboMode = true 
     javaMaxHeapSize "2g" 
     //doesn't seem to be supported with multi dex 
     // incremental true 
    } 

2) Там может быть проблема с пошаговой сборки система. Поэтому постарайтесь, чтобы попытаться удалить папку сборки из проекта и Перестроить проект ИЛИ Right click on your project -> "Open module settings" -> Dependencies tab -> check if Export is checked for your library

3) Вам нужно сделать больше, чем просто предоставить поддержку MultiDex.

  • multiDexEnabled = верно в вашем defaultConfig блоке
  • Включить компилировать 'com.android.support:multidex:1.0.0' в ваших зависимости
  • Попросите класс Application расширить MultiDexApplication, а не только применение. В качестве альтернативы вы можете вызвать MultiDex.install() в приложении attachBaseContext() приложения

Для получения дополнительной информации вы можете проверить приведенную ниже ссылку, которая предоставила более глубокое понимание multi dex.

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

4) Или, наконец, вы можете добавить банку файлы V7 в LIBS вашего проекта папку, а затем добавить его вашу систему сборки.

5) попробовать также удаление файлов фляги, а также он по-прежнему включает в себя com.android.support:support-v4:23+ в Gradle есть хранилище, где он загружает баночки delcared как компиляции «компиляции 'com.android.support:appcompat-v7:23+'

Надеюсь, это может дать вам некоторое представление о вашей ошибке.

+2

Если класс не упакован внутри apk, то исключение должно происходить для ** всех ** пользователей, а не только для 0,2% пользователей. –

+0

Я думаю, что вы не правильно прочитали мой ответ. Для вас, пожалуйста, поймите смысл этого предложения: «NoClassDefFoundError появится, если класс присутствовал во время компиляции, но недоступен в java classpath во время выполнения» – KishuDroid

+1

Конечно, я прочитал ваш ответ, и я хорошо знаю о «NoClassDefFoundError». Вспомните, что сказал @mntgoat: ** Я использовал apktool для извлечения файлов из своего apk, и я вижу там AppCompatDelegateImplV23.smali. ** Это означает, что класс упакован внутри apk. Напомним также, что Android использует «DexClassLoader», который пытается загрузить классы из загруженного apk. Таким образом, проблема не может возникнуть на любом ** совместимом Android-устройстве **. Вот почему проблема происходит только на нескольких устройствах пользователя. –

1

Я предполагаю, что проблема связана с установленной каркасом. В нижней части трассировки стека вы можете обнаружить, что зигота была запущена инфраструктурой xposed.

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687) 
    at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:117) 

Это означает, что пользователь использует специальный ролик Android с установленной инфраструктурой xposed. Структура обычно используется для изменения поведения кода Android (и любого приложения, конечно) путем ввода нового кода во время выполнения.

Вы можете проверить, как он работает по адресу: https://github.com/rovo89/XposedBridge/tree/art/app/src/main/java/de/robv/android/xposed

Поскольку поведение кода может быть изменено в разной степени в зависимости от того, что модов устанавливаются через Экспоузд рамки, я не могу точно определить причину вашего исключения. Однако, если все трассировки стека начинаются с XposedBrigde.main(), я могу сказать, что ваша проблема связана с открытой каркасом или модами, установленными через фреймворк.

+0

Я нашел несколько других отчетов, которые не связаны с XPosed, однако я думаю, что вы, возможно, вплотную подошли к этой проблеме. Каждый отдельный отчет, который я видел, включает в себя встроенный телефон. – casolorz

Смежные вопросы