How to use native android webview in Qt C++ using QAndroidJniObject How to use native android webview in Qt C++ using QAndroidJniObject android android

How to use native android webview in Qt C++ using QAndroidJniObject


This is tricky. You basically need to create a new class during runtime that overrides shouldInterceptRequest:

public class SuperDuperUniqueNameForMyWebViewClient extends android.webkit.WebViewClient {    // constructor etc...    @Override    public android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebView view, android.webkit.WebResourceRequest request) {        // implement your logic here    }}

To create the class dynamically, you muste compile the code on-the-fly in Java:

String source = ...;int result = com.sun.tools.javac.Main.compile(new String[]{source});  // parameter is an array

Which in Qt C++ gives us this:

QString source = ...;  // Here you need to provide the Java code for your classQAndroidJniObject sourceObject = QAndroidJniObject::fromString(source);jobjectArray sourceObjectArray = sourceObject.object<jobjectArray>();  // this is probably not correctjint result = QAndroidJniObject::callStaticMethod<jint>("com/sun/tools/javac/Main",                                                       "compile"                                                       "([Ljava/lang/String;)I",                                                       jobjectArray);

After that you should be able create a web view client with your own class and use it:

QAndroidJniObject myWebViewClient{"SuperDuperUniqueNameForMyWebViewClient"};

Take all of this with a grain of salt, as it is from the top of my head and I haven't tested it. At the very least it should push you in the right direction, though.