0

NoClassDefFoundError: Не удалось разрешить: Lokhttp3/internal/Platform

10

Я использую библиотеку Retrofit2 в своем проекте.

Я уже попробовал обновить до последних версий: Retrofit2, Gson, RxJava, OKHttp, HttpLoggingInterceptor и т.д. в файле build.gradle.

Вот содержимое build.gradle в приложении:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })

    // Компоненты Android
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:design:24.2.1'
    compile 'com.android.support:appcompat-v7:24.2.1'

    // Retrofit2 + Gson
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.google.code.gson:gson:2.6.2'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
    compile 'com.squareup.okhttp3:logging-interceptor:3.3.0'
    compile 'com.squareup.okhttp3:okhttp:3.4.1'

    // RxJava
    compile 'io.reactivex:rxandroid:1.2.0'
    compile 'io.reactivex:rxjava:1.1.4'
}

Но при запуске я получаю ошибку:

Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lokhttp3/internal/Platform;
at okhttp3.logging.HttpLoggingInterceptor$Logger$1.log(HttpLoggingInterceptor.java:112)
at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:160)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at internal.NetworkModule$1.intercept(NetworkModule.java:150)

Ошибка возникает в следующем коде:

Interceptor provideInterceptor(final Context context, final PreferenceStore preferenceStore) {
    Interceptor headerAuthorizationInterceptor = new Interceptor() {
        @Override
        public okhttp3.Response intercept(Interceptor.Chain chain) throws IOException {
            // Получаем Android ID
            String android_id = Settings.Secure.getString(context.getContentResolver(),
                    Settings.Secure.ANDROID_ID);

            // Получаем версию приложения
            String appVersion = "";
            try {
                PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
                appVersion = packageInfo.versionName;
            } catch (PackageManager.NameNotFoundException e) {
                Timber.e("Не удается получить версию приложения");
            }

            String token = preferenceStore.getAuthToken();
            Timber.i("X-Asukabu-Token: %s", token);

            // Добавляем заголовки к запросу
            Request request = chain.request();
            if (token != null) {
                request.headers().newBuilder()
                        .add("X-Asukabu-Token", token)
                        .add("X-Asukabu-Client-OS", "Android")
                        .add("X-Asukabu-Client-OS-Version", Build.VERSION.RELEASE)
                        .add("X-Asukabu-Client-Device", Build.MODEL)
                        .add("X-Asukabu-Client-App-Version", appVersion)
                        .add("X-Asukabu-Client-Device-ID", android_id)
                        .add("Accept","*/*")
                        .build();
            } else {
                request.headers().newBuilder()
                        .add("X-Asukabu-Client-OS", "Android")
                        .add("X-Asukabu-Client-OS-Version", Build.VERSION.RELEASE)
                        .add("X-Asukabu-Client-Device", Build.MODEL)
                        .add("X-Asukabu-Client-App-Version", appVersion)
                        .add("X-Asukabu-Client-Device-ID", android_id)
                        .add("Accept","*/*")
                        .build();
            }

            // ОШИБКА В ЭТОЙ СТРОКЕ : СТРОКА 150
            return chain.proceed(request);
        }
    };

    return headerAuthorizationInterceptor;
}

А вот содержимое build.gradle в проекте:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.0-rc2'

        // Dagger 2
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
        // ЗАМЕТКА: Не размещайте зависимости приложения здесь; они должны быть
        // в отдельных файлах build.gradle модулей
    }
}

Кто-нибудь знает, почему возникает эта ошибка?

Пожалуйста, подскажите, как это исправить.

Спасибо!

2 ответ(ов)

1

Проблема, скорее всего, связана с несовместимостью версий библиотек. В вашем коде вы используете разные версии для logging-interceptor и okhttp, что может вызвать ошибки. Попробуйте изменить зависимости следующим образом:

compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
compile 'com.squareup.okhttp3:okhttp:3.4.1'

Таким образом, обе библиотеки будут использовать одну и ту же версию, что должно решить возникшие проблемы.

0

Проблема заключается в том, что вам нужно использовать одну и ту же версию библиотек. Судя по обсуждению, последняя стабильная версия этих библиотек - 4.7.2. Попробуйте обновить ваши зависимости на следующие строки:

implementation 'com.squareup.okhttp3:logging-interceptor:4.7.2'
implementation 'com.squareup.okhttp3:okhttp:4.7.2'

Это должно решить вашу проблему. Если после этого ошибка не пропадет, пожалуйста, предоставьте больше информации о вашем проекте, и мы постараемся помочь вам дальше.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь