簡體   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