第一步 新建AppGlideModule:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.guoshikeji.dramecard.utils;

import android.content.Context;
import android.support.annotation.NonNull;
import android.util.Log;

import com.bumptech.glide.Glide;
import com.bumptech.glide.GlideBuilder;
import com.bumptech.glide.Registry;
import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.load.model.GlideUrl;
import com.bumptech.glide.module.AppGlideModule;
import java.io.InputStream;

/**
* Register {@link FlickrModelLoader} for the Flickr sample app.
*/

@GlideModule
public class FlickrGlideModule extends AppGlideModule {

@Override
public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
super.applyOptions(context, builder);
// builder.setDefaultRequestOptions(new RequestOptions().format(DecodeFormat.PREFER_ARGB_8888));
}

@Override
public void registerComponents(@NonNull Context context, @NonNull Glide glide,
@NonNull Registry registry) {
Log.e("tyl","-----registerComponents-------");
registry.replace(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory());
}
@Override
public boolean isManifestParsingEnabled() {
return false;
}

}

第二步 AndroidManifest.xml中配置meta-data :

1
2
3
4
5
6
  <application>
<meta-data
android:name="com.guoshikeji.dramecard.utils.FlickrGlideModule"
android:value="GlideModule" />
<!--activitys />-->
<application/>

第三步 proguard-rules.pro文件中忽略GlideModule混淆:

1
2
3
#GlideModule路径
-keepnames class com.guoshikeji.dramecard.utils.FlickrGlideModule
-keepresourcexmlelements manifest/application/meta-data@value=GlideModule

第四步 在继承AppGlideModule类的registerComponents方法中添加忽略证书认证:

1
2
registry.replace(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory());
<!--重点是这句话:new OkHttpUrlLoader.Factory()-->

重写OkHttpUrlLoader类的Factory,给OkHttpClient添加证书认证:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 public static class Factory implements ModelLoaderFactory<GlideUrl, InputStream> {
private static volatile Call.Factory internalClient;
private final Call.Factory client;
private static Call.Factory getInternalClient() {
// glide添加双向认证
OkHttpClient.Builder okHttpClient = new OkHttpClient().newBuilder();
okHttpClient.hostnameVerifier(new Home());//忽略证书域名不受信任问题
okHttpClient.sslSocketFactory(MySSLSocketFactory.getSocketFactory(MyApplication.getInstance()));//添加证书
OkHttpClient build = okHttpClient.build();
if (internalClient == null) {
synchronized (Factory.class) {
if (internalClient == null) {
internalClient = build;
}
}
}
return internalClient;
}
private static class Home implements HostnameVerifier {
public SSLSession sslSession;

@Override
public boolean verify(String hostname, SSLSession session) {
this.sslSession = session;
return true;
}
}

添加证书的MySSLSocketFactory类代码可复制https://www.jianshu.com/p/6229d10d3550中的SSLSocketFactory类和X509TrustManager 这2个类即可!

####各类知识点整理:

####工具类:

####源码: