【问题标题】:Android volley proguard throws java.lang.RuntimeException: StubAndroid volley proguard 抛出 java.lang.RuntimeException: Stub
【发布时间】:2017-05-24 20:51:01
【问题描述】:

我正在使用 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 string reqest的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. Email-id 和密码是通过 getParam() 传递的参数。
  4. 当通过 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

【问题讨论】:

  • 能否请您发布代码,您的应用程序崩溃的地方
  • 它没有崩溃,而是每次都会触发错误界面。贴出代码
  • @VictorPetrovski 请检查更新后的问题
  • 嗨,您目前在哪里尝试运行您的应用程序?设备还是模拟器?
  • @MarcosPlacona 嗨,我正在设备上运行它

标签: android android-volley twilio proguard


【解决方案1】:

我会发布我的解决方案,以防有一天有人发现它有用。

“存根!”的原因!

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

事实上,所有方法都被存根以抛出异常并显示消息“存根!”当你打电话给他们时。好可爱啊。

真正的 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

来源Link to SO answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    相关资源
    最近更新 更多