Обновление 1:
Убедитесь, что вы используете okhttp с версией 4.3.1 или выше.
Вам необходимо добавить следующее в порядок файлов proguard, чтобы избежать cra sh on Android 10.
-keepclassmembers class * implements javax.net.ssl.SSLSocketFactory {
private final javax.net.ssl.SSLSocketFactory delegate;
}
Обратите внимание, что в моем классе SocketFactory у меня было следующее поле:
private final SSLSocketFactory delegate;
Поэтому настройте правило ProGuard
соответствующим образом , Например, модификаторы доступа, такие как private, final, et c. а также имя поля (делегат) должно совпадать в точности так, как написано в файле класса.
Вам нужно добавить следующее в тег Application в файле манифеста, чтобы он работал с последними android версии.
android:usesCleartextTraffic="true"
Создание диспетчера доверия, который не проверяет цепочки сертификатов
final TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[]{};
}
}
};
Установка доверенного диспетчера
final SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
Создание фабрики сокетов ssl с нашим полностью доверяющим менеджером
final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
Регистрация sslSocketFactory с помощью компоновщика OkHttpClient
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.sslSocketFactory(sslSocketFactory, (X509TrustManager) trustAllCerts[0]);
builder.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
Вот и все.