Android 获取'java.lang.AssertionError:java.lang.NoSuchFieldException:HTTP_1_0`

Android 获取'java.lang.AssertionError:java.lang.NoSuchFieldException:HTTP_1_0`,android,proguard,Android,Proguard,在我的项目中,我使用RxJava执行API调用。 没有proguard,它运行良好。但当我应用proguard时,它给出了java.lang.AssertionError:java.lang.NoSuchFieldException:HTTP\u 1\u 0 在订户的onError(e:Throwable)中 我在proguard中应用了-keepclassmembers enum*{*;},以防止混淆 Api调用 fun latestPosts(): Subscription {

在我的项目中,我使用RxJava执行API调用。 没有proguard,它运行良好。但当我应用proguard时,它给出了
java.lang.AssertionError:java.lang.NoSuchFieldException:HTTP\u 1\u 0
在订户的
onError(e:Throwable)

我在proguard中应用了
-keepclassmembers enum*{*;}
,以防止混淆

Api调用

 fun latestPosts(): Subscription {
        return service.latestPosts
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(APICallSubscriber(presenterContract, ApiIndex.POSTS))
    }
订户


class APICallSubscriber<T>(private val callback: BasePresenterContract,
                           private val apiIndex: String) : Subscriber<Response<T>>() {

    override fun onCompleted() {

    }

    override fun onError(e: Throwable) {
        Log.d("HomeTest", "${e}")
    }

    override fun onNext(response: Response<T>) {
        val jsonObject = App.gson().toJsonTree(response).asJsonObject
        val responseCode = jsonObject
                .get(PayloadKeys.RAW_RESPONSE).asJsonObject
                .get(PayloadKeys.CODE).asInt
        Log.d("HomeTest", "$jsonObject")
        val body: JsonElement? = jsonObject.get(PayloadKeys.BODY)
        if (body != null) {
            val responseBody = body.asJsonObject
            callback.onNetworkRequestCompletedWith(responseBody, responseCode, apiIndex)
        } else {
            val errorBody: JsonElement? = jsonObject.get(PayloadKeys.ERROR_BODY)
            callback.onNetwordRequestError(errorBody!!.asJsonObject, apiIndex)
        }
    }
}


类APICallSubscriber(专用val回调:BasePresenterContract,
私有值索引:字符串):订阅服务器(){
覆盖未完成的乐趣(){
}
覆盖有趣的错误(e:可丢弃){
Log.d(“HomeTest”,“${e}”)
}
覆盖下一步(响应:响应){
val jsonObject=App.gson().toJsonTree(response.asJsonObject)
val responseCode=jsonObject
.get(PayloadKeys.RAW_响应).asJsonObject
.get(PayloadKeys.CODE).asInt
Log.d(“HomeTest”,“$jsonObject”)
val body:JsonElement?=jsonObject.get(PayloadKeys.body)
if(body!=null){
val responseBody=body.asJsonObject
callback.onNetworkRequestCompletedWith(responseBody、responseCode、apindex)
}否则{
val errorBody:JsonElement?=jsonObject.get(PayloadKeys.ERROR\u BODY)
callback.onNetwordRequestError(errorBody!!.asJsonObject,apindex)
}
}
}
我尝试过不同的proguard规则,但没有结果。
请帮助。

下面的配置始终适用于我

-keepclassmembers enum  * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

如果这对任何人都有帮助,我有一个现有的项目,其中包含我制作的库模块。为了防止我的应用程序在被ProGuard缩小后崩溃,我需要添加

-keepclassmembers enum * { *; }

不仅是库的build.gradle,还包括主模块的build.gradle。

我面临同样的问题,我通过在
proguard rules.pro
文件中添加所有这些规则来解决:

-keepclassmembers enum * { *; }
-keep class com.google.code.gson.* { *; }
-keepattributes *Annotation*, Signature, Exception
-keepclassmembers,allowobfuscation class * {
  @com.google.gson.annotations.SerializedName <fields>;
}
-keepclassmembers枚举*{*;}
-保持类com.google.code.gson.*{*;}
-keepattributes*注释*、签名、异常
-keepclassmembers,AllowFusion类*{
@com.google.gson.annotations.SerializedName;
}

还是一样
java.lang.AssertionError:java.lang.NoSuchFieldException:HTTP_1_0
Api调用未成功。我正在使用rxjava的改型2。所以我用订户订阅。它不是调用
onNext()
方法,而是调用
onError(t Throwable)
没有完整的堆栈跟踪。好的,我唯一的建议是首先检查proguard在混淆后生成了什么代码,你可以在混淆前和混淆后看到类的代码,可能proguard正在做一些其他未被注意到的事情。我使用jdgui来查看相同的内容。您还可以使用-dontoptimize和-dontshrink来检查是否已解决此问题?最后一个原因是什么?这是唯一对我有效的组合。我希望能在5小时前找到你的答案。。。非常感谢。编辑只留下这两个也可以为我完成工作-keepclassmembers enum*{*;}-keepclassmembers,AllowFusion类*{@com.google.gson.annotations.SerializedName;}