繁体   English   中英

Android Volley Proguard抛出java.lang.RuntimeException:Stub

[英]Android volley proguard throws java.lang.RuntimeException: Stub

我使用的是Android Volley网络库,该库在调试+释放模式下运行良好,直到我添加了Twilio客户端SDK为止。 现在在调试模式下可以正常工作,但在发布模式下会抛出此错误

 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字符串的error接口获取的日志要求最高

01-10 16:42:27.330 522-522/? D/LOGINACTIVITY: java.lang.RuntimeException: Stub!-java.lang.RuntimeException: Stub!-java.lang.RuntimeException: Stub!

寻找相同的东西并得到了一些回应,他们要求将JUint放在依赖列表的顶部。 错误仍然存​​在。 任何帮助将不胜感激。 TIA

更新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:

添加用例

  1. 应用程序启动并要求用户允许诸如位置,短信读取等权限。
  2. 一旦用户同意这些权限集,就可以允许用户输入电子邮件ID和密码。
  3. 电子邮件ID和密码是通过getParam()传递的参数。
  4. 当通过截击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

如果某天有人觉得有用,我会发布我的解决方案。

原因是“存根!”

在Android SDK 23中使用Proguard和com.apache.http.legacy库时,会发生这种情况。

实际上,在调用它们时,所有方法都将被抛出错误消息“ Stub!”的异常。 真可爱。

真正的android.jar实现位于模拟器或您的真正Android设备上。

因此,更改proguard规则可以解决以下问题,好像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

来源链接至SO答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM