Explorar el Código

修复webview被禁用的手机上status表示失败,status字段被隐藏不能反射,用Parcel方式绕过去

Fixed #6
JonaNorman hace 1 año
padre
commit
85a92d7bd3

+ 2 - 1
app/src/main/java/com/norman/webviewup/demo/MainActivity.java

@@ -186,7 +186,8 @@ public class MainActivity extends Activity implements UpgradeCallback {
                     Toast.makeText(getApplicationContext(), "webView is already upgrade success,not support dynamic switch", Toast.LENGTH_LONG).show();
                 } else {
                     UpgradeInfo upgradeInfo = upgradeInfoList.get(which);
-                    if (WebViewUpgrade.getSystemWebViewPackageName().equals(upgradeInfo.packageName)
+                    String  systemWebViewPackageName = WebViewUpgrade.getSystemWebViewPackageName();
+                    if (systemWebViewPackageName != null &&systemWebViewPackageName.equals(upgradeInfo.packageName)
                             && VersionUtils.compareVersion( WebViewUpgrade.getSystemWebViewPackageVersion(),upgradeInfo.versionName) >= 0) {
                         Toast.makeText(getApplicationContext(), "system webView is larger than the one to be upgraded, so there is no need to upgrade", Toast.LENGTH_LONG).show();
                         return;

+ 20 - 1
core/src/main/java/com/norman/webviewup/lib/hook/WebViewUpdateServiceHook.java

@@ -1,10 +1,16 @@
 package com.norman.webviewup.lib.hook;
 
+import static android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE;
+
 import android.content.Context;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
+import android.os.Build;
+import android.os.Bundle;
 import android.os.IBinder;
 import android.os.IInterface;
+import android.os.Parcel;
+import android.os.Parcelable;
 
 import com.norman.webviewup.lib.reflect.RuntimeAccess;
 import com.norman.webviewup.lib.service.binder.BinderHook;
@@ -25,7 +31,7 @@ public class WebViewUpdateServiceHook extends BinderHook {
 
     public WebViewUpdateServiceHook(Context context, String packageName) {
         this.context = context;
-        this.webViewPackageName =packageName;
+        this.webViewPackageName = packageName;
     }
 
     private final WebViewUpdateServiceProxy proxy = new WebViewUpdateServiceProxy() {
@@ -44,6 +50,19 @@ public class WebViewUpdateServiceHook extends BinderHook {
             }
             IWebViewProviderResponse webViewProviderResponse = RuntimeAccess.objectAccess(IWebViewProviderResponse.class, result);
             webViewProviderResponse.setPackageInfo(packageInfo);
+
+            Parcel parcel = Parcel.obtain();
+            parcel.writeParcelable((Parcelable) result, 0);
+            parcel.setDataPosition(parcel.dataSize()-4);
+            parcel.writeInt(0);
+            parcel.setDataPosition(0);
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+                result = parcel.readParcelable(result.getClass().getClassLoader(), result.getClass());
+            } else {
+                result = parcel.readParcelable(result.getClass().getClassLoader());
+            }
+            parcel.recycle();
+
             return result;
         }