|
@@ -0,0 +1,130 @@
|
|
|
+package com.hw.nativeapp.httpnet;
|
|
|
+
|
|
|
+import android.content.Context;
|
|
|
+
|
|
|
+import androidx.annotation.NonNull;
|
|
|
+
|
|
|
+import com.hw.nativeapp.BuildConfig;
|
|
|
+
|
|
|
+import java.lang.reflect.Field;
|
|
|
+import java.security.SecureRandom;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
+
|
|
|
+import javax.net.ssl.HostnameVerifier;
|
|
|
+import javax.net.ssl.SSLContext;
|
|
|
+import javax.net.ssl.SSLSession;
|
|
|
+import javax.net.ssl.TrustManager;
|
|
|
+import javax.net.ssl.X509TrustManager;
|
|
|
+
|
|
|
+import okhttp3.Cache;
|
|
|
+import okhttp3.OkHttpClient;
|
|
|
+import okhttp3.Protocol;
|
|
|
+import retrofit2.Retrofit;
|
|
|
+import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
|
|
|
+import retrofit2.converter.gson.GsonConverterFactory;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Created by kaka on 2018/3/14.
|
|
|
+ * email:375120706@qq.com
|
|
|
+ */
|
|
|
+
|
|
|
+public class RetrofitApkLogManager {
|
|
|
+
|
|
|
+
|
|
|
+ private static volatile OkHttpClient mOkHttpClient;
|
|
|
+
|
|
|
+ private static Cache cache;
|
|
|
+
|
|
|
+ public static void init(@NonNull Context context) {
|
|
|
+ cache = new Cache(context.getApplicationContext().getCacheDir(), 1024 * 1024 * 10);//缓存10mib
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private static OkHttpClient getOkHttpClient() {
|
|
|
+ if (mOkHttpClient == null) {
|
|
|
+ synchronized (RetrofitApkLogManager.class) {
|
|
|
+ if (mOkHttpClient == null) {
|
|
|
+ mOkHttpClient = new OkHttpClient.Builder()
|
|
|
+ .addInterceptor(new OkHttpInterceptor())
|
|
|
+ .connectTimeout(30, TimeUnit.SECONDS)//连接超时时间
|
|
|
+ .readTimeout(15, TimeUnit.SECONDS)//读取超时时间
|
|
|
+ .writeTimeout(15, TimeUnit.SECONDS)//写入超时时间
|
|
|
+ .cache(cache)
|
|
|
+ .protocols(Collections.singletonList(Protocol.HTTP_1_1))
|
|
|
+ .build();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return mOkHttpClient;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static <T> T create(Class<T> clazz) {
|
|
|
+ ignoreSSLCheck();
|
|
|
+ Retrofit retrofit = new Retrofit.Builder()
|
|
|
+ .client(getOkHttpClient())
|
|
|
+ .baseUrl(BuildConfig.APKLOGAPI_HOST)
|
|
|
+ .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
|
|
|
+ .addConverterFactory(GsonConverterFactory.create())
|
|
|
+ .build();
|
|
|
+ return retrofit.create(clazz);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static <T> T createNoBase(Class<T> clazz, String baseUrl) {
|
|
|
+ Retrofit retrofit = new Retrofit.Builder()
|
|
|
+ .client(getOkHttpClient())
|
|
|
+ .baseUrl(baseUrl)
|
|
|
+ .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
|
|
|
+ .addConverterFactory(GsonConverterFactory.create())
|
|
|
+ .build();
|
|
|
+ return retrofit.create(clazz);
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void ignoreSSLCheck() {
|
|
|
+// Log.e(TAG, "ignoreSSLCheck()");
|
|
|
+ SSLContext sc = null;
|
|
|
+ try {
|
|
|
+ sc = SSLContext.getInstance("SSL");
|
|
|
+ sc.init(null, new TrustManager[]{new X509TrustManager() {
|
|
|
+ @Override
|
|
|
+ public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public java.security.cert.X509Certificate[] getAcceptedIssuers() {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }}, new SecureRandom());
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ HostnameVerifier hv1 = new HostnameVerifier() {
|
|
|
+ @Override
|
|
|
+ public boolean verify(String hostname, SSLSession session) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ String workerClassName = "okhttp3.OkHttpClient";
|
|
|
+ try {
|
|
|
+ Class workerClass = Class.forName(workerClassName);
|
|
|
+ Field hostnameVerifier = workerClass.getDeclaredField("hostnameVerifier");
|
|
|
+ hostnameVerifier.setAccessible(true);
|
|
|
+ hostnameVerifier.set(getOkHttpClient(), hv1);
|
|
|
+
|
|
|
+ Field sslSocketFactory = workerClass.getDeclaredField("sslSocketFactory");
|
|
|
+ sslSocketFactory.setAccessible(true);
|
|
|
+ sslSocketFactory.set(getOkHttpClient(), sc.getSocketFactory());
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|