uniapp在安卓13系统软件无法执行uni.navigateTo

uniapp在安卓13系统软件无法执行uni.navigateTo

在安卓13,通过android:sharedUserId="android.uid.system"获取系统权限。 显示出现白屏。可以通过集成 DCloudApplication。编写一个hookwebview方法来绕过。

@SuppressLint("SoonBlockedPrivateApi")  
public static void hookWebView() {  
    int sdkInt = Build.VERSION.SDK_INT;  
    try {  
        Class<?> factoryClass = Class.forName("android.webkit.WebViewFactory");  
        Field field = factoryClass.getDeclaredField("sProviderInstance");  
        field.setAccessible(true);  
        Object sProviderInstance = field.get(null);  
        if (sProviderInstance != null) {  
            Log.i(TAG, "sProviderInstance isn't null");  
            return;  
        }  

        Method getProviderClassMethod;  
        if (sdkInt > 22) {  
            getProviderClassMethod = factoryClass.getDeclaredMethod("getProviderClass");  
        } else if (sdkInt == 22) {  
            getProviderClassMethod = factoryClass.getDeclaredMethod("getFactoryClass");  
        } else {  
            Log.i(TAG, "Don't need to Hook WebView");  
            return;  
        }  
        getProviderClassMethod.setAccessible(true);  
        Class<?> factoryProviderClass = (Class<?>) getProviderClassMethod.invoke(factoryClass);  
        Class<?> delegateClass = Class.forName("android.webkit.WebViewDelegate");  
        Constructor<?> delegateConstructor = delegateClass.getDeclaredConstructor();  
        delegateConstructor.setAccessible(true);  
        if (sdkInt < 26) { // 低于Android O版本  
            Constructor<?> providerConstructor = factoryProviderClass.getConstructor(delegateClass);  
            if (providerConstructor != null) {  
                providerConstructor.setAccessible(true);  
                sProviderInstance = providerConstructor.newInstance(delegateConstructor.newInstance());  
            }  
        } else {  
            Field chromiumMethodName = factoryClass.getDeclaredField("CHROMIUM_WEBVIEW_FACTORY_METHOD");  
            chromiumMethodName.setAccessible(true);  
            String chromiumMethodNameStr = (String) chromiumMethodName.get(null);  
            if (chromiumMethodNameStr == null) {  
                chromiumMethodNameStr = "create";  
            }  
            Method staticFactory = factoryProviderClass.getMethod(chromiumMethodNameStr, delegateClass);  
            if (staticFactory != null) {  
                sProviderInstance = staticFactory.invoke(null, delegateConstructor.newInstance());  
            }  
        }  

        if (sProviderInstance != null) {  
            field.set("sProviderInstance", sProviderInstance);  
            Log.i(TAG, "Hook success!");  
        } else {  
            Log.i(TAG, "Hook failed!");  
        }  
    } catch (Throwable e) {  
        Log.w(TAG, e);  
    }  
}

绕过之后进入app,无法跳转页面。

[ERROR]Waiting to navigate to: /pages/component/image/image, do not operate continuously: /pages/component/video/video.

在安卓11上是没有问题的。 uni开头的api都不能执行。 例如

uni.showToast({
title: '标题',
duration: 2000
});

回到顶部