# 解决Okhttp中类冲突问题
-keepnames class com.huawei.hms.network.okhttp.PublicSuffixDatabase

-keep class com.huawei.hms.network.netdiag.NetDiagnosisService {!private *; }

# 处理ai解耦后NoClassDefFoundError
-keep class com.huawei.hms.network.netdiag.tools.NetDetectAndPolicy {!private *; }
-keep class com.huawei.hms.network.netdiag.cache.SignalInfoCache {!private *; }
-keep class com.huawei.hms.network.netdiag.info.SignalInfoMetrics {!private *; }

# 保留所有的public protected的api实现类，api-advance目录下的
-keepclassmembers class com.huawei.hms.network.netdiag.qoe.QoeMetricsImp {
    public *;
    protected *;
}






#1. -keep class
#指定需要保留的类和类成员（作为公共类库，应该保留所有可公开访问的public方法）
#2. -keepclassmembers class
#指定需要保留的类成员:变量或者方法
#3. -keepnames class
#指定要保留名称的类和类成员，前提是在压缩阶段未被删除。仅用于模糊处理，与keep
#4. -keepclasseswithmembernames class
#指定要保留名称的类成员，前提是在压缩阶段后所指定的类成员都存在。仅用于模糊处理

# 保留OKHTTP3中的全局混淆配置
-dontwarn okhttp3.internal.platform.ConscryptPlatform
-dontwarn javax.annotation.**
-dontwarn org.codehaus.mojo.animal_sniffer.*

# 解决Okhttp中类冲突问题
-keepnames class com.huawei.hms.network.okhttp.PublicSuffixDatabase

# 处理ai解耦后NoClassDefFoundError
-keep class com.huawei.hms.network.ComposedNetworkKit {!private *; }
-keep class com.huawei.hms.network.httpclient.config.NetworkConfig {!private *; }
-keep class com.huawei.hms.network.httpclient.util.PreConnectManager* {*; }
-keep class com.huawei.hms.network.httpclient.okhttp.OkHttpClientGlobal {!private *; }

# 内部反射调用，解决兜底找不到类的问题
-keep class com.huawei.hms.framework.network.restclient.dnkeeper.DNKeeperManager{*;}

# 反射调用NetworkKitProvider
-keep class com.huawei.hms.network.httpclient.DefaultNetworkKitProvider{
    *;
}

# 反射调用DefaultAdvanceNetworkKitProvider
-keep class com.huawei.hms.network.httpclient.DefaultAdvanceNetworkKitProvider{
    *;
}

# 保留所有的public protected的api实现类，httpclient目录下的
-keepclassmembers class com.huawei.hms.network.httpclient** {
    public *;
    protected *;
}

# 保留所有的public protected的api实现类，restclient目录下的
-keepclassmembers class com.huawei.hms.network.restclient** {
    public *;
    protected *;
}

# 保留所有com.huawei.hms.network.NetworkKitImpl非私有方法
-keepclassmembers class com.huawei.hms.network.NetworkKitImpl {
    public *;
    protected *;
}

# 保留所有com.huawei.hms.network.NetworkKitAdvImpl非私有方法
-keepclassmembers class com.huawei.hms.network.NetworkKitAdvImpl {
    public *;
    protected *;
}

# 保留所有的public protected的api实现类，exception目录下的,包括类名，打点上报异常类名称需要用到
-keep class * extends com.huawei.hms.network.exception.NetworkException {
    public *;
    protected *;
}

# 解决业务引用hquic后无法动态加载,保留Hquic的混淆规则，不进行二次混淆
-keep class com.huawei.hms.hquic**{
    *;
}
# 主要作用于hquic使用DynamicLoader的情况
-keep class com.huawei.hms.feature**{
    *;
}
# 解决使用Quic时内部反射无法调用问题，范围太大
-keep class org.chromium.net**{
    !private *;
    *;
}

# 考虑NetworkKit内部对老版本兼容处理的ClientConfig
-keep class com.huawei.hms.framework.network.restclient.hwhttp.ClientConfiguration{
    *;
}

# keepclassmembers:成员变量和方法不被混淆，类名还是会被混淆的，由于内部反射调用属性，需要保证其内部属性不被混淆
-keepclassmembers class okhttp3.internal.connection.Transmitter{
      <methods>;
}
-keepclassmembers class okhttp3.ConnectionPool{
      <fields>;
}
-keepclassmembers class okhttp3.internal.connection.RealConnectionPool{
      <fields>;
}
# 保留所有的public protected的api实现类，httpclient目录下的
-keep class com.huawei.secure.android.common.encrypt.aes.AesGcm{
 public *;
 protected *;
}

# api类
-keep class com.huawei.hms.network.inner.api**{
    !private *;
    *;
}

# 工具类
-keep class com.huawei.hms.network.inner.utils**{
    *;
}
# 实现服务接口的类要keep不被混淆
-keep class * extends com.huawei.hms.network.inner.api.NetworkService{
    !private *;
}

-keep class com.huawei.hms.network.inner.DomainManager {!private *; }

-keep class com.huawei.hms.network.conf.api.ConfigService {!private *; }
-keep class com.huawei.hms.network.conf.api.ConfigAPI {!private *; }


-keep class com.huawei.hms.network.dns.DNSService {!private *; }



-keep class com.huawei.hms.network.netdiag.NetDiagnosisService {!private *; }

# 处理ai解耦后NoClassDefFoundError
-keep class com.huawei.hms.network.netdiag.tools.NetDetectAndPolicy {!private *; }
-keep class com.huawei.hms.network.netdiag.cache.SignalInfoCache {!private *; }
-keep class com.huawei.hms.network.netdiag.info.SignalInfoMetrics {!private *; }

# 保留所有的public protected的api实现类，api-advance目录下的
-keepclassmembers class com.huawei.hms.network.netdiag.qoe.QoeMetricsImp {
    public *;
    protected *;
}






#1. -keep class
#指定需要保留的类和类成员（作为公共类库，应该保留所有可公开访问的public方法）
#2. -keepclassmembers class
#指定需要保留的类成员:变量或者方法
#3. -keepnames class
#指定要保留名称的类和类成员，前提是在压缩阶段未被删除。仅用于模糊处理，与keep
#4. -keepclasseswithmembernames class
#指定要保留名称的类成员，前提是在压缩阶段后所指定的类成员都存在。仅用于模糊处理

# 保留OKHTTP3中的全局混淆配置
-dontwarn okhttp3.internal.platform.ConscryptPlatform
-dontwarn javax.annotation.**
-dontwarn org.codehaus.mojo.animal_sniffer.*

# 解决Okhttp中类冲突问题
-keepnames class com.huawei.hms.network.okhttp.PublicSuffixDatabase

# 处理ai解耦后NoClassDefFoundError
-keep class com.huawei.hms.network.ComposedNetworkKit {!private *; }
-keep class com.huawei.hms.network.httpclient.config.NetworkConfig {!private *; }
-keep class com.huawei.hms.network.httpclient.util.PreConnectManager* {*; }
-keep class com.huawei.hms.network.httpclient.okhttp.OkHttpClientGlobal {!private *; }

# 内部反射调用，解决兜底找不到类的问题
-keep class com.huawei.hms.framework.network.restclient.dnkeeper.DNKeeperManager{*;}

# 反射调用NetworkKitProvider
-keep class com.huawei.hms.network.httpclient.DefaultNetworkKitProvider{
    *;
}

# 反射调用DefaultAdvanceNetworkKitProvider
-keep class com.huawei.hms.network.httpclient.DefaultAdvanceNetworkKitProvider{
    *;
}

# 保留所有的public protected的api实现类，httpclient目录下的
-keepclassmembers class com.huawei.hms.network.httpclient** {
    public *;
    protected *;
}

# 保留所有的public protected的api实现类，restclient目录下的
-keepclassmembers class com.huawei.hms.network.restclient** {
    public *;
    protected *;
}

# 保留所有com.huawei.hms.network.NetworkKitImpl非私有方法
-keepclassmembers class com.huawei.hms.network.NetworkKitImpl {
    public *;
    protected *;
}

# 保留所有com.huawei.hms.network.NetworkKitAdvImpl非私有方法
-keepclassmembers class com.huawei.hms.network.NetworkKitAdvImpl {
    public *;
    protected *;
}

# 保留所有的public protected的api实现类，exception目录下的,包括类名，打点上报异常类名称需要用到
-keep class * extends com.huawei.hms.network.exception.NetworkException {
    public *;
    protected *;
}

# 解决业务引用hquic后无法动态加载,保留Hquic的混淆规则，不进行二次混淆
-keep class com.huawei.hms.hquic**{
    *;
}
# 主要作用于hquic使用DynamicLoader的情况
-keep class com.huawei.hms.feature**{
    *;
}
# 解决使用Quic时内部反射无法调用问题，范围太大
-keep class org.chromium.net**{
    !private *;
    *;
}

# 考虑NetworkKit内部对老版本兼容处理的ClientConfig
-keep class com.huawei.hms.framework.network.restclient.hwhttp.ClientConfiguration{
    *;
}

# keepclassmembers:成员变量和方法不被混淆，类名还是会被混淆的，由于内部反射调用属性，需要保证其内部属性不被混淆
-keepclassmembers class okhttp3.internal.connection.Transmitter{
      <methods>;
}
-keepclassmembers class okhttp3.ConnectionPool{
      <fields>;
}
-keepclassmembers class okhttp3.internal.connection.RealConnectionPool{
      <fields>;
}
# 保留所有的public protected的api实现类，httpclient目录下的
-keep class com.huawei.secure.android.common.encrypt.aes.AesGcm{
 public *;
 protected *;
}

# api类
-keep class com.huawei.hms.network.inner.api**{
    !private *;
    *;
}

# 工具类
-keep class com.huawei.hms.network.inner.utils**{
    *;
}
# 实现服务接口的类要keep不被混淆
-keep class * extends com.huawei.hms.network.inner.api.NetworkService{
    !private *;
}

-keep class com.huawei.hms.network.inner.DomainManager {!private *; }

-keep class com.huawei.hms.network.conf.api.ConfigService {!private *; }
-keep class com.huawei.hms.network.conf.api.ConfigAPI {!private *; }


-keep class com.huawei.hms.network.dns.DNSService {!private *; }

