#web-view #platform #cross-platform #android #connect #gtk #events

wry

跨平台 WebView 渲染库

109 个版本 (41 个重大更新)

0.42.0 2024年8月16日
0.41.0 2024年6月12日
0.40.1 2024年6月1日
0.38.2 2024年3月25日
0.6.1 2021年3月21日

#4 in GUI

Download history 36666/week @ 2024-05-04 37769/week @ 2024-05-11 38298/week @ 2024-05-18 37531/week @ 2024-05-25 39074/week @ 2024-06-01 34983/week @ 2024-06-08 36720/week @ 2024-06-15 34940/week @ 2024-06-22 36164/week @ 2024-06-29 37545/week @ 2024-07-06 38145/week @ 2024-07-13 39609/week @ 2024-07-20 41346/week @ 2024-07-27 40677/week @ 2024-08-03 43770/week @ 2024-08-10 36731/week @ 2024-08-17

168,294 每月下载量
用于 93 个 crate (33 个直接使用)

Apache-2.0 OR MIT

345KB
7.5K SLoC

Rust 6.5K SLoC // 0.0% comments Kotlin 830 SLoC // 0.1% comments Prolog 27 SLoC
WRY Webview Rendering library

License Chat Server website https://good-labs.github.io/greater-good-affirmation/assets/images/badge.svg support

支持所有主流桌面平台(如 Windows、macOS 和 Linux)的跨平台 WebView 渲染库。

概述

WRY 连接每个平台上的网络引擎,并提供易于使用且统一的接口来渲染 WebView。WebView 需要运行的事件循环和实现 HasWindowHandle 的窗口类型,或者如果你需要支持 X11 和 Wayland,则需要一个 gtk 容器小部件。你可以使用 taowinit 这样的窗口库。

使用方法

创建窗口并浏览网站的最低示例如下

fn main() -> wry::Result<()> {
  use tao::{
    event::{Event, StartCause, WindowEvent},
    event_loop::{ControlFlow, EventLoop},
    window::WindowBuilder,
  };
  use wry::WebViewBuilder;

  let event_loop = EventLoop::new();
  let window = WindowBuilder::new()
    .with_title("Hello World")
    .build(&event_loop)
    .unwrap();
  let _webview = WebViewBuilder::new(&window)
    .with_url("https://tauri.org.cn")
    .build()?;

  event_loop.run(move |event, _, control_flow| {
    *control_flow = ControlFlow::Wait;

    match event {
      Event::NewEvents(StartCause::Init) => println!("Wry has started!"),
      Event::WindowEvent {
        event: WindowEvent::CloseRequested,
        ..
      } => *control_flow = ControlFlow::Exit,
      _ => (),
    }
  });
}

examples 也有更多示例,你可以输入以下命令尝试它们

cargo run --example multiwindow

有关更多信息,请参阅下面的文档。

文档

平台特定说明

以下是每个平台使用的底层网络引擎以及你可能需要安装的一些依赖项。

Linux

Wry 还需要 WebKitGTK 用于 WebView。因此,请确保以下软件包已安装

Arch Linux / Manjaro

sudo pacman -S webkit2gtk-4.1

可以从 Arch User Repository (AUR) 安装 libayatana-indicator 软件包。

Debian / Ubuntu

sudo apt install libwebkit2gtk-4.1-dev

Fedora

sudo dnf install gtk3-devel webkit2gtk4.1-devel

Fedora 尚未提供 Ayatana 软件包,因此你需要使用 GTK,请参阅 功能标志文档

macOS

WebKit 是 macOS 的本地库,所以一切应该都没问题。

如果您使用osxcross为macOS进行交叉编译并遇到类似 Class with name WKWebViewConfiguration could not be found 的运行时崩溃,那么可能是 WebKit.framework 链接不正确。要解决这个问题,请设置环境变量 RUSTFLAGS

RUSTFLAGS="-l framework=WebKit" cargo build --target=x86_64-apple-darwin --release

Windows

Microsoft Edge Chromium提供的WebView2被使用。因此,wry支持Windows 7、8、10和11。

Android / iOS

Wry通过cargo-mobile2 CLI创建模板项目来支持移动设备。如果您想尝试或修改它,请参阅MOBILE.md

如果您想自己创建Android项目,应用程序需要满足一些要求

  1. 您需要设置一些环境变量,这些变量将用于生成必要的kotlin文件,这些文件需要包含在您的Android应用程序中,以便wry能够正常运行

    • WRY_ANDROID_PACKAGE:这是您的android项目和app名称的反向域名,例如:com.wry.example.wry_app
    • WRY_ANDROID_LIBRARY:例如,如果您的cargo项目有一个名为 wry_app 的lib名称,它将生成 libwry_app.so,因此您将此环境变量设置为 wry_app
    • WRY_ANDROID_KOTLIN_FILES_OUT_DIR:例如,path/to/app/src/main/kotlin/com/wry/example
  2. 您的main Android Activity需要继承 AppCompatActivity,最好使用生成的 WryActivity 或继承它。

  3. 您的Rust应用程序需要调用 wry::android_setup 函数来设置创建webview所需的逻辑。

  4. 您的Rust应用程序需要调用 wry::android_binding! 宏来设置 WryActivity 和其他位置将调用的JNI函数。

建议使用tao crate,因为它提供了与 wry 的最佳兼容性。

#[cfg(target_os = "android")]
{
  tao::android_binding!(
      com_example,
      wry_app,
      WryActivity,
      wry::android_setup, // pass the wry::android_setup function to tao which will invoke when the event loop is created
      _start_app
  );
  wry::android_binding!(com_example, ttt);
}
  • WRY_ANDROID_PACKAGE:这是您的android项目和app名称的反向域名,例如:com.wry.example.wry_app
  • WRY_ANDROID_LIBRARY:例如,如果您的cargo项目有一个名为 wry_app 的lib名称,它将生成 libwry_app.so,因此您将此环境变量设置为 wry_app
  • WRY_ANDROID_KOTLIN_FILES_OUT_DIR:例如,path/to/app/src/main/kotlin/com/wry/example

合作伙伴

CrabNebula

有关赞助商的完整列表,请访问我们的网站Open Collective

许可证

Apache-2.0/MIT

依赖关系

~1–50MB
~727K SLoC