如何修复Android上的dalvik.system.BaseDexClassLoader.findClass ClassNotFoundException?

问题描述 投票:2回答:2

我在Google Play控制台上收到了dalvik.system.BaseDexClassLoader.findClass ClassNotFoundException崩溃报告。崩溃几乎是三星Galaxy 7-9与OS 8 Oreo独有的,5%的用户。办公室里有一台带有Oreo的三星7,我在三星远程测试实验室尝试了所有设备,但我无法复制崩溃。崩溃发生在有或没有multidex的情况下,我已经清除了缓存,重建并禁用了Instant Run。直到我将targetSdkVersion更改为26时才出现此问题.Android Studio,gradle build。由于我无法复制崩溃,我减少了随机更改并上传到Playstore,然后在第二天检查崩溃报告。提前致谢!

Samsung Galaxy S9 (starqltesq), Android 8.0
Report 1

java.lang.RuntimeException: 
  at android.app.ActivityThread.handleReceiver (ActivityThread.java:3374)
  at android.app.ActivityThread.-wrap18 (Unknown Source)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1780)
  at android.os.Handler.dispatchMessage (Handler.java:105)
  at android.os.Looper.loop (Looper.java:164)
  at android.app.ActivityThread.main (ActivityThread.java:6938)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:327)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1374)
Caused by: java.lang.ClassNotFoundException: 
  at dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:93)
  at java.lang.ClassLoader.loadClass (ClassLoader.java:379)
  at java.lang.ClassLoader.loadClass (ClassLoader.java:312)
  at android.app.ActivityThread.handleReceiver (ActivityThread.java:3369)

编辑的应用程序构建.gradle:

android {
    compileSdkVersion 27
    buildToolsVersion '25.0.0'
    useLibrary 'org.apache.http.legacy'

    defaultConfig {
        minSdkVersion 17
        targetSdkVersion 26
        multiDexEnabled false
    }
    buildTypes {
        release {
            minifyEnabled false
            if (is_main_app) {
                signingConfig signingConfigs.releaseMain
            } else if (is_simutrader_app) {
                signingConfig signingConfigs.releaseSimutrader
            } else {
                signingConfig signingConfigs.releaseTsx
            }
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    dependencies {
    androidTestCompile 'junit:junit:4.12'
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile project(':volley')
    compile files('libs/gson-2.3.1.jar')
    compile 'io.branch.sdk.android:library:1.+'
    compile files('libs/mpandroidchartlibrary-2-0-9.jar')
    compile 'com.thebluealliance:spectrum:0.5.0'
    compile 'com.bignerdranch.android:recyclerview-multiselect:0.2'
    compile 'com.android.support:appcompat-v7:27.1.0'
    compile 'com.android.support:cardview-v7:27.1.0'
    compile 'com.android.support:design:27.1.0'
    compile 'com.android.support:support-v4:27.1.0'
    compile 'com.astuetz:pagerslidingtabstrip:1.0.1'
    compile 'com.astuetz:pagerslidingtabstrip:1.0.1'
    compile 'com.google.android.gms:play-services-gcm:11.+'
    compile 'com.google.android.gms:play-services-analytics:11.+'

    compile 'com.google.firebase:firebase-core:11.+'

    compile 'com.urbanairship.android:urbanairship-sdk:8.7.+'
    // compile 'com.android.support:multidex:1.0.3'

}

apply plugin: 'com.google.gms.google-services'
android classnotfoundexception android-8.0-oreo
2个回答
1
投票

您可以按照android开发人员页面的说明进行操作:https://developer.android.com/studio/build/multidex.html

使用此代码编辑app.gradle文件,

defaultConfig {
...
minSdkVersion // your version
targetSdkVersion // your version 
...

// Enabling multidex support.
 multiDexEnabled true
}

dependencies {
  compile 'com.android.support:multidex:1.0.1'
}

我认为这会有所帮助。


0
投票

我有解决方案。我在构建中添加了NewRelic并获得了:

CRASH TYPE SUMMARY
LOCATION
BaseDexClassLoader.java line 93 in dalvik.system.BaseDexClassLoader.findClass()
EXCEPTION
java.lang.ClassNotFoundException
MESSAGE
Didn't find class "com.urbanairship.push.GCMPushReceiver" on path: DexPathList[[zip file "/data/app/com.****.android-tUaBU1BXe0VaMGy9WlkUGA==/base.apk"],nativeLibraryDirectories=[/data/app/com.*****.android-tUaBU1BXe0VaMGy9WlkUGA==/lib/arm64, /system/lib64, /system/vendor/lib64]]

这告诉我com.urbanairship.push.GCMPushReceiver是罪魁祸首。因此,跟踪库是一种有用的问题解决工具。谢谢你的回复!

附:作为一般观察,很多SO“你试过改变......插入随机设置......?这确保有效!”答复在很大程度上并不十分有用。

© www.soinside.com 2019 - 2024. All rights reserved.