java.lang.NoClassDefFoundError: Fehlerhafte Auflösung von: Lcom / mapbox / android / telemetry / MapboxTelemetry;

Sep 29 2020

Ich lerne Mapbox und habe Mapbox mit Kotlin implementiert, gefolgt vom folgenden Mapbox-Tutorial

Aber wenn ich den Code ausführe, erhalte ich die folgende Ausnahme, wenn ich ein echtes Gerät ausführe

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/mapbox/android/telemetry/MapboxTelemetry;
     at com.mapbox.mapboxsdk.module.telemetry.TelemetryImpl.<init>(TelemetryImpl.java:30)
     at com.mapbox.mapboxsdk.ModuleProviderImpl.obtainTelemetry(ModuleProviderImpl.java:22)
     at com.mapbox.mapboxsdk.Mapbox.initializeTelemetry(Mapbox.java:167)
     at com.mapbox.mapboxsdk.Mapbox.getInstance(Mapbox.java:64)
     at com.example.myapplication.MainActivity.onCreate(MainActivity.kt:18)
     at android.app.Activity.performCreate(Activity.java:7224)
     at android.app.Activity.performCreate(Activity.java:7213)
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272)
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2956)
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3113)
     at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
     at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:113)
     at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:71)
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1858) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:201) at android.app.ActivityThread.main(ActivityThread.java:6820) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:922)
    Caused by: java.lang.ClassNotFoundException: Didn't find class "com.mapbox.android.telemetry.MapboxTelemetry" on path: DexPathList[[zip file "/data/app/com.example.myapplication-85zEOZQGHEn-PrcXcL50yg==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.myapplication-85zEOZQGHEn-PrcXcL50yg==/lib/arm, /system/lib]]
     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:171)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:312)

Ich möchte wissen, was die Ausnahme verursacht

Was ich versucht habe, habe ich folgende Mapbox Proguard-Regeln hinzugefügt

unter meinem proguard-rules.pro

# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

-dontwarn com.mapbox.services.android.location.LostLocationEngine
-dontwarn com.mapbox.services.android.location.MockLocationEngine


# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

unter build.gradle (: app)

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.2"

    defaultConfig {
        applicationId "com.example.myapplication"
        minSdkVersion 14
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.1.0'
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation project(':mapbox-android-sdk-9.5.0')

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

Ich möchte wissen, wo genau ich den Fehler gemacht habe, irgendwelche Hinweise, Vorschläge, Hilfe sehr geschätzt!

Antworten

mortezahosseini Nov 07 2020 at 16:35

Ich denke, wenn Sie Mapbox als lokale Abhängigkeit hinzufügen, werden einige Abhängigkeiten nicht in das Projekt aufgenommen. Fügen Sie also diese Codezeile hinzu. das hat mein Problem gelöst, erzeugt natürlich einen neuen Fehler, aber Telemetriefehler entfernen:

implementation 'com.mapbox.mapboxsdk:mapbox-android-telemetry:6.2.0'