我正在使用 Android Volley 网络库,在我添加 Twilio 客户端 SDK 之前,它在调试 + Release模式下工作得非常好。现在它在 Debug模式下工作正常,但在 Release模式下抛出此错误
E/Volley: [105358] NetworkDispatcher.run: Unhandled exception java.lang.RuntimeException: Stub!
java.lang.RuntimeException: Stub!
at org.apache.a.h.<init>(SourceFile:6)
at com.android.volley.toolbox.HurlStack.performRequest(SourceFile:109)
at com.android.volley.toolbox.BasicNetwork.performRequest(SourceFile:97)
at com.android.volley.NetworkDispatcher.run(SourceFile:114)
Android volley字符串reqiest的error
接口(interface)的日志
01-10 16:42:27.330 522-522/? D/LOGINACTIVITY: java.lang.RuntimeException: Stub!-java.lang.RuntimeException: Stub!-java.lang.RuntimeException: Stub!
寻找相同的东西并在他们要求将 JUint
保持在依赖列表顶部的地方得到一些回应。错误仍然存在。任何形式的帮助将不胜感激。时间差
更新 1:
添加了代码库
StringRequest strReq = new StringRequest(Request.Method.POST,
AppConfig.URL_LOGIN, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
....
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("LOGINACTIVITY", error.getLocalizedMessage() + "-" + error.getMessage() + "-" + error.getCause());
}
}) {
@Override
protected Map<String, String> getParams() {
// Posting parameters to login url
Map<String, String> params = new HashMap<String, String>();
params.put("email", email);
params.put("password", password);
return params;
}
};
// Adding request to request queue
strReq.setShouldCache(false);
strReq.setRetryPolicy(new DefaultRetryPolicy(AppConfig.DEFAULT_RETRY_TIME, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
更新 2:
添加了用例
- 应用程序启动并请求用户允许位置、短信读取等权限..
- 一旦用户同意这些权限,用户就可以输入电子邮件 ID 和密码。
- Email-id 和 password 是通过 getParam() 传递的参数。
- 当通过 volley StringRequest 请求以下内容时,它最终转到“OnErrorResponse”,其中错误消息为“java.lang.RuntimeException:Stub!”
更新 3:
添加了 Proguard 规则
# Twilio Client
-keep class com.twilio.** { *; }
# Apache HttpClient
-dontwarn org.apache.http.**
-keepattributes InnerClasses
-keep public class android.net.http.SslError
-keep public class android.webkit.WebViewClient
-dontwarn android.webkit.WebView
-dontwarn android.net.http.SslError
-dontwarn android.webkit.WebViewClient
-keepattributes EnclosingMethod
最佳答案
我会发布我的解决方案,以防有一天有人发现它有用。
“ stub !”的原因
This happens when using Proguard and the com.apache.http.legacy library in Android SDK 23.
As a matter of fact, all the methods are stubbed out to throw an exception with the message “Stub!” when you call them. How cute.
The real android.jar implementations live on the emulator, or your real Android device.
因此更改混淆器规则解决了以下问题,似乎 twilio 使用的是旧的 http 库或不确定的东西。
所以,这是我目前的解决方案
# Twilio Client
-keep class com.twilio.** { *; }
-keep class org.webrtc.** { *; }
-keep class com.twilio.video.** { *; }
-keepattributes InnerClasses
-keep class org.apache.http.** { *; }
-keep class org.apache.commons.codec.** { *; }
-keep class org.apache.commons.logging.** { *; }
-keep class android.net.compatibility.** { *; }
-keep class android.net.http.** { *; }
-keep class com.android.internal.http.multipart.** { *; }
-dontwarn org.apache.http.**
-dontwarn android.webkit.**
-keepattributes EnclosingMethod
关于Android volley proguard 抛出 java.lang.RuntimeException : Stub,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41567579/