« Previous

Hybrid native/web Android app with dwindows and Free Pascal

19 Apr 2024

Coming back to dwindows after a (long) break, I've now implemented an Android hybrid native/web demo/exercise app in Free Pascal, using a webview widget for the user interface, with bi-directional Javascript ↔ Pascal in-process RPC.

The main body of the code loads in-app static content packaged into the APK file, then binds the names HostSayHello and HostExit for callback to Pascal from Javascript. Said Pascal code can in turn invoke Javascript to manipulate the DOM.

  webwidget := dw_html_new(1001); // 1001 is an identifier
  if webwidget <> nil then
    begin
      dw_box_pack_start(mainwindow, webwidget, 0, 0, DW_TRUE, DW_TRUE, 0);
      dw_html_url(webwidget, 'file:///android_asset/index.html');
      dw_html_javascript_add(webwidget, 'HostSayHello');
      dw_html_javascript_add(webwidget, 'HostExit');
      dw_signal_connect(webwidget, DW_SIGNAL_HTML_MESSAGE, @html_message_callback, nil);
    end;

Here's an animated GIF of the app running in the Android emulator on my laptop:


Free Pascal Android hybrid native/web app with dwindows

Tags: Android, dwindows, Pascal