Ошибка: класс не найден при использовании multidex и retrofit 2 - PullRequest
0 голосов
/ 10 января 2020

Когда я добавил MultiDex в проект Android, в более низких версиях Android, таких как 4.2, я получаю следующую ошибку

E/dalvikvm: Could not find class 'java.lang.invoke.MethodHandles$Lookup', referenced from method retrofit2.Platform.invokeDefaultMethod

Вот как я добавил Multiplex

My модуль gradle:

defaultConfig {
    multiDexEnabled = true
    // other code
}

dependencies {
    implementation 'com.android.support:multidex:1.0.3'

    implementation 'com.squareup.okhttp3:okhttp:3.12.7'

    implementation 'com.squareup.retrofit2:retrofit:2.7.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.7.0'
    // other code
}

Класс моего приложения:

public class BaseApplication extends MultiDexApplication {
 // other code
}

Мой манифест:

<application
    android:name=".BaseApplication">
    <!-- other code -->
</application>

Мой модифицированный клинт:

public class ApiClient {

    private static final String BASE_URL = BaseApplication.API_URL;
    private static Retrofit retrofit = null;

    public static Retrofit getClient() {

        if (retrofit == null) {
            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .client(getOkHttpClient())
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }

    public static OkHttpClient getOkHttpClient() {

        return new OkHttpClient.Builder()
                .readTimeout(20, TimeUnit.SECONDS)
                .connectTimeout(20, TimeUnit.SECONDS)
                .addInterceptor(new Interceptor() {
                                    @Override
                                    public Response intercept(@NonNull Interceptor.Chain chain) throws IOException {
                                        Request original = chain.request();
                                        Request request = original.newBuilder()
                                                .method(original.method(), original.body())
                                                .build();

                                        return chain.proceed(request);
                                    }
                                }
                ).build();
    }
}

Некоторые решения, которые я нашел в поиске, были:

  • Использовать модифицированную версию 2.2.0 или ниже

  • Отключить мультиплекс и изменить размер проекта до такой степени, что его не нужно мультиплексировать

Но я не хочу использовать эти методы, потому что я всегда хочу использовать последнюю версию модернизации, а также не может уменьшить размер проекта

...