2018年5月5日 星期六

[Android] Webview 使用 Proguard 後 Bug 解決

因為金流交易使用 Webview 接,
使用 proguard 後,發現 shouldOverrideUrlLoading 此 method 沒有 call,
於是無法 redirect 回來結果,導致金流流程卡住。
此文分享解 Bug 過程思路,歡迎指教!

首先懷疑 Server 回來的資料所接的物件裡面的東西可能壞掉,
因此藉由 WebviewClient 去查回來的結果,
確定 Webview body 沒有被混淆 是 utf-8 格式,
確認此段並不是造成 Bug主因。

後來陸陸續續在 Stack overflow 找到一些解法,
最後正確解是把以下 keep 語法放入 Proguard ,其實我在想跟 http 後來改成 https 有關係,
所以才會需要 keep SSL 的相關物件。


1
2
3
4
5
6
-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



不過在stack overflow 上問的人其實遇到的問題跟我不一樣。
其他非此 Bug 正確解,但可能以後會影響其他地方故還是放進 Proguard


1
2
3
4
5
6
7
8
9
10
11
-keepclassmembers class * extends android.webkit.WebViewClient {
public void *(android.webkit.WebView,java.lang.String,android.graphics.Bitmap);
public boolean *(android.webkit.WebView,java.lang.String);
}
-keep class com.xxx.xxx.JavascriptCallback
-keep class * implements com.xxx.xxx.JavascriptCallback
-keepclassmembers class * implements com.xxx.xxx.JavascriptCallback {
<methods>;
}

沒有留言:

張貼留言