我在项目中使用Volley和Gson。该项目是一个Lib项目。当我在演示项目中使用我的Lib时,Volley总是抛出错误消息,并显示以下消息:“ org.json.JSONException:字符0处的输入结束”,并且从未获得成功响应。我猜这是由ProGuard引起的。奇怪的是,当我在Lib或Demo项目中设置“ minifyEnabled”时,一切正常。但是,当我在Lib和Demo中都设置“ minifyEnabled”时,凌空总是会失败。现在有人为什么会这样吗?
很抱歉缺少内容...
这是排球错误:
org.json.JSONException: End of input at character 0
这是我的凌空和Gson的ProGuard:
## ----------------------------------
## Gson
## ----------------------------------
-keepattributes Signature
-keepattributes *Annotation*
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.** { *; }
-keep class com.google.gson.stream.** { *; }
## ----------------------------------
## Glide
## ----------------------------------
-keep class com.bumptech.glide.** {*;}
## -------------------------------------------
## volley
## -------------------------------------------
-keepclassmembers,allowshrinking,allowobfuscation class com.android.volley.NetworkDispatcher {
void processRequest();
}
-keepclassmembers,allowshrinking,allowobfuscation class com.android.volley.CacheDispatcher {
void processRequest();
}
-keep class com.android.volley.** {*;}
-keep class com.android.volley.toolbox.Volley
-keepclassmembers class com.android.volley.toolbox.Volley { *; }
-keep class com.android.volley.toolbox.** {*;}
-keep class com.android.volley.Response$* { *; }
-keep class com.android.volley.Request$* { *; }
-keep class com.android.volley.RequestQueue$* { *; }
-keep class com.android.volley.toolbox.HurlStack$* { *; }
-keep class com.android.volley.toolbox.ImageLoader$* { *; }
-keep class org.apache.http.** {*;}
重要的是,仅当Lib和Demo同时被混淆时才会发生此错误。使用Lib或Demo进行混淆不会出现此问题。
有人帮忙吗?我100%确定我将所有模型类都保存在ProGuard文件中。
2019-03-18 14:38:15.635 11276-11276 W/System.err: com.a.a.m: org.json.JSONException: End of input at character 0 of
2019-03-18 14:38:15.635 11276-11276 W/System.err: at com.a.a.a.k.a(Unknown Source:32)
While the com.a.a.a.k is "com.android.volley.toolbox.JsonObjectRequest"
答案 0 :(得分:0)
将此规则放在proguard中,
afterEach(function () {
if (this.currentTest.state === 'failed') {
var test = this.currentTest
Cypress.on('test:after:run', (test) => {
addContext({ test }, {
title: 'Failing Screenshot: ' + '>> screenshots/' + Cypress.spec.name + '/' + test_name + ' -- ' + test.title + ' (failed)' + '.png <<',
value: 'screenshots/' + Cypress.spec.name + '/' + test_name + ' -- ' + test.title + ' (failed)' + '.png'
//value: 'data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAABkCAYAAAAVORraAAACH0lEQVR'
})
});
}
})
答案 1 :(得分:0)
在您的proguard-rules.pro中添加以下行,您可以在Gradle脚本下找到该行
-keepclassmembers,allowshrinking,allowobfuscation class com.android.volley.NetworkDispatcher {
void processRequest();
}
-keepclassmembers,allowshrinking,allowobfuscation class com.android.volley.CacheDispatcher {
void processRequest();
}
您也可以参考此link
更新
然后,您应该在图书馆项目的proguard-rules.pro中添加这些规则。如果您在proguard-rules.pro附近看到iamge,则说明该文件用于应用程序模块,那么对于您的库模块添加规则,也应该有另一个proguard-rules.pro。
答案 2 :(得分:0)
尝试在build.gradle中使用以下配置。
android {
...
useLibrary 'org.apache.http.legacy'
}
我在排球上遇到了类似的问题,但是错误有所不同,以上配置解决了我的问题。根本原因是Gradle插件默认不再包含所有可选库。