Когда я добавил 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 или ниже
Отключить мультиплекс и изменить размер проекта до такой степени, что его не нужно мультиплексировать
Но я не хочу использовать эти методы, потому что я всегда хочу использовать последнюю версию модернизации, а также не может уменьшить размер проекта