Rust 移动开发与跨平台模式探究
Posted Rust语言中文社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rust 移动开发与跨平台模式探究相关的知识,希望对你有一定的参考价值。
arm-linux-androideabi
,即 ARMv7 Androidarmv7-linux-androideabi
,即 ARMv7a Androidi686-linux-android
,即 32-bit x86 Androidthumbv7neon-linux-androideabi
, 即 Thumb2-mode ARMv7a Android with NEONx86_64-linux-android
,即 64-bit x86 Android看得出来,Rust 对 ios 和 Android 的支持还算可以。
crate,包含了大部分通用代码,并且使用 trait 来定义特定平台部分的接口。shared-android
crate,用于提供与 Java 共享的代码接口。shared-ios
crate, 用于提供与 ObjectiveC 共享的代码接口。shared-mock
crate ,为了便于核心 Rust 代码的开发而实现了一个“模拟”平台,它提供所有相同的接口,但只是在桌面环境中运行。这有助于在纯 Rust 环境中开发许多东西,并避免了移动工具链的集成痛苦。对于 iOS ,将 Rust 代码构建为静态库,使用 Ditto 编写脚本来构建 Rust 工具链,使用与 XCode 一致的 LLVM 版本。
对于 Android,将 Rust 构建为静态库,通过 CMake 与一些 C 代码链接,再给 Java 库共享。
使用 Rust 以后的优势
能够编写高性能代码,而无需花费过多时间进行优化 不必追踪客户在平台提供的 Rust 代码中报告的数据竞争导致的奇怪崩溃或错误 可以有信任地引入对平台代码库不熟悉的开发人员,他们知道编译器会限制他们由于没有完全理解“烧入”他们大脑的代码而造成的损害。(Rust 语言比较受欢迎,新人也愿意学习)
移动开发中使用 Rust 带来的痛苦是什么?
FullStory 工程师在 hacknews 上面透露:
"The only real pain we felt was around iOS bitcode and that was mainly Apple\'s fault because they make the whole process so Byzantine if you aren\'t using clang."
"我们唯一真正感到痛苦的是围绕着iOS的位码,这主要是苹果的错,因为如果你不使用clang,他们会使整个过程变得非常复杂。"
关于此问题,在 Rust issues 中有记录:https://github.com/rust-lang/rust/issues/35968 (未解决),导致FullStory 团队无法直接使用上游 Rust 工具链,他们的解决办法是使用与 Xcode 相同版本的 LLVM来提供带有嵌入式 LLVM 位码的框架。
crate 为 core 提供特定平台的服务(OS Services)。等等。目前这个通用的 core 库在 Linux 端比较成功,1Password 团队表示会在下一代 1Password 的产品中也采用这种架构。
这个工具时需要注意,有时会在 Swift 代码的上下文中生成对 C 绑定不友好的函数签名,因为 Swfit 对某些类型支持不完善, 所以还需要在生成之后手工检查一下。同样遇到了 Rust 工具链 LLVM 和 Apple 中使用 LLVM 版本不同而导致 BitCode 不兼容的问题。他使用了 rust-bitcode 来解决这个问题。 的作者 fzyzcjy 也在和 AppFlowy 的开发者沟通,后续 AppFlowy 有可能使用 flutter_rust_bridge
,但目前这个进展比较缓慢。等多语言和开发环境。其中 Rust/ Kotlin/ Swift/ Python
SDK 是基于一个 Rust core 库来构建的,而 javascript/ QML
是基于 JavaScript 核心库构建。crate,用于为各个操作系统平台打包程序。cli-rs
,Rust 实现的跨平台 Cli 。cli-js
,是对 cli-rs
的包装,使用 napi-rs
为每个平台生成 npm 包。webdriver
,之前叫tauri-driver
,是一个跨平台 WebDriver Server。其他 tauri-app/create-tauri-app
,TypeScript实现的一个脚手架工具,帮助开发者快速创建 Tauri App。跨平台支持
tauri-app/tao
,纯 Rust 实现的跨平台应用程序窗口创建库,支持 Windows、macOS、Linux、iOS 和 Android 等所有主要平台,基于 winit
二次开发。tauri-app/wry
,纯 Rust 实现的跨平台 WebView 渲染库,支持 Windows、macOS 和 Linux 等所有主要桌面平台。Tauri 使用 WRY 作为抽象层,负责确定使用哪个 webview(以及如何进行交互)。因为现在 iOS 和 macOS 都是用 wkwebview
,所以相当于也支持了 iOS 。而对于 Andriod 的支持还在进行中。tauri-app/tao
利用 Rust 的 trait 和 features 机制,完美实现了跨平台架构:
使用统一的 Window
、Clipboard
、 EventLoop
等窗口抽象:
类似的。建立统一的跨平台抽象:
则是平台特定行为代码,通过 cfg 和 features 来构造一个统一的门面模块,完成跨平台分发。crate,来提供跨平台窗口。跟tauri-app 类似。wgpu
,用于 bevy_render
crate,来提供跨平台渲染。这样在 bevy_ui
中就不需要关心特定平台细节了。其他,比如底层音频库、I/O、Log处理、资源管理等都做了跨平台相关处理。 这些底层库实现跨平台的模式和上面 Tauri 的架构是相似的。
/ cxx
/ protobuf
/ grpc
等 crates 的支持,为了方便开发。Android 团队充分验证了 Rust 和 C++ 之间的互操作性已经在很大程度上足以在 Android 中方便地使用 Rust。也将 rust-analyzer
/ clippy
/ rustfmt
集成到了 构建系统中。
给Apple 的一封公开信:请用 Rust 替换 Objective-CIronCore Labs 公司 CEO( Patrick Walsh )去年(2021.10)在其官网发布了一篇 给Apple 的一封公开信:请用 Rust 替换 Objective-C 的文章,内容摘要:
iOS 15.1 更新修复了 22 个漏洞。谢谢你。但在这 22 个漏洞中,至少有 16 个是由于内存错误造成的,包括整数溢出、内存损坏、越界读写、释放后使用、缓冲区溢出等。 建议 Apple 通过 Rust 与 Swfit 的互操作性,让 Rust 语言成为苹果技术栈中一等公民。 然后使用 Rust 重写CoreAudio、CoreGraphics 和 WebKit 等关键部分,这些都是现实世界中针对 Apple 客户的攻击的主要载体。 这是一项艰巨的工作,但它会带来巨大的投资回报。迁移到 Rust 可以消除 70% 的漏洞,并且可能更接近 95% 的可远程利用的漏洞。专注于解析来自不受信任来源的数据的库将使Apple平台更加安全。
参考https://foundation.rust-lang.org/posts/2022-03-08-member-spotlight-1password/
https://www.fullstory.com/blog/rust-at-fullstory-part-2-mobile-sdk/
https://digvijayu.medium.com/building-cross-platform-library-with-rust-for-ios-and-android-c56a448e4804
https://foundation.rust-lang.org/news/2022-03-08-member-spotlight-1password/
https://dteare.medium.com/behind-the-scenes-of-1password-for-linux-d59b19143a23
https://github.com/QConChina/QConBeijing2019/tree/master/%E7%A7%BB%E5%8A%A8%E6%96%B0%E7%94%9F%E6%80%81
https://rustrepo.com/repo/i-schuetz-rust_android_ios-rust-mobile
https://github.com/Dushistov/flapigen-rs
https://github.com/ivanschuetz/wasm-rust-d3
https://github.com/Co-Epi/app-backend-rust
https://macroquad.rs/tutorials/android/
http://dockone.io/article/2434630
https://dev.to/tauri/announcing-tauri-beta-more-efficient-crossplatform-apps-with-better-features-1nbd
https://tauri.studio/docs/development/security
https://rustmagazine.github.io/rust_magazine_2021/chapter_5/running_rust_on_android.html
https://source.android.com/setup/build/rust/building-rust-modules/overview
https://blog.mozilla.org/data/2022/01/31/this-week-in-glean-building-and-deploying-a-rust-library-on-ios/
https://blog.ironcorelabs.com/an-open-letter-to-apple-please-please-replace-objective-c-with-rust-10df606c3dce
https://nadim.computer/posts/2022-02-11-maccatalyst.html
https://security.googleblog.com/2021/06/rustc-interop-in-android-platform.html
https://source.android.com/setup/build/rust/building-rust-modules/android-rust-modules
跨平台应用开发进阶(四十二)vue与nvue页面设计方案探究
文章目录
一、前言
在应用uni-app
跨平台设计方案进行app开发过程中,uni-app
官网支持两种页面设计方案:vue
与nvue
,不少同学在应用过程中,会搞不清楚两者的区别,而不知如何选择,甚至可能产生错误的应用方式。
二、选择方案
uni-app App 端内置了一个基于 weex 改进的原生渲染引擎,提供了原生渲染能力。
在 App 端,如果使用 vue
页面,则使用 webview
渲染;如果使用 nvue
页面(native vue
的缩写),则使用原生渲染。一个 App 中可以同时使用两种页面,比如首页使用 nvue
,二级页使用 vue
页面。
注意⚠️:
- 虽然
nvue
也可以多端编译,输出 H5 和小程序,但 nvue
的 css
写法受限,所以如果你不开发 App,那么不需要使用 nvue
。 nvue
页面控制显隐只可以使用v-if
不可以使用v-show
。
2.1 CSS注意事项
-
nvue
的css
仅支持flex
布局,是webview css
语法的子集。这是因为操作系统原生排版不支持非flex
之外的web
布局。当然flex
足以排布出各种页面,只是写法需要适应。有关APP中flex
布局用法详参《ReactNative进阶(四十四):Mobile App 适配性优化》《Vue进阶(幺柒幺):前端用户体验提升(五)Flex实现弹性布局》。
-
注意⚠️:文档中未说明的 flexbox
属性均不支持:如 order、flex-grow 、flex-shrink 、 flex-basis、align-content、align-self
等。在 nvue
中,Flexbox
是默认且唯一的布局模型,所以你不需要手动为元素添加 display: flex;
属性。
-
class
进行绑定时只支持数组语法。
-
不支持媒体查询;
-
不能在 style
中引入字体文件;
-
不能使用百分比布局,如width:100%;
-
不支持在css里写背景图background-image
,但可以使用image
组件和层级来实现类似web中的背景效果。因为原生开发本身也没有web这种背景图概念。
-
使用image
标签,支持使用base64
,不支持svg
格式图片。
-
nvue
的各组件在安卓端默认是透明的,如果不设置background-color
,可能会导致出现重影的问题;
-
文字内容,必须只能在text
组件下,text
组件不能换行写内容,否则会出现无法去除的周边空白;
-
只有text
标签可以设置字体大小,字体颜色。
三、快速上手
3.1 新建 nvue 页面
在 HBuilderX 的 uni-app
项目中,新建页面,弹出界面右上角可以选择是建立vue
页面还是nvue
页面,或者 2 个同时建。
不管是 vue
页面还是 nvue
页面,都需要在pages.json
中进行路由注册。如果在 HBuilderX 中新建页面是会自动注册的,如果使用其他编辑器,则需要自行在 pages.json
里手工注册。
如果一个页面路由下同时有 vue
页面和 nvue
页面,即出现同名的 vue
和 nvue
文件。那么在 App 端,会仅使用 nvue
页面,同名的 vue
文件将不会被编译到 App 端。而在非 App 端,会优先使用 vue
页面。
如果不同名,只有 nvue
页面,则在非 app 端,只有 uni-app 编译模式的 nvue
文件才会编译。
3.2 开发 nvue 页面
nvue
页面结构同 vue
, 由 template
、style
、script
构成。
- template: 模板写法、数据绑定同 vue。
- style:由于采用原生渲染,并非所有浏览器的 css 均支持,布局模型只支持 flex 布局,虽然不会造成某些界面布局无法实现,但写法要注意。详见:样式
- script:写法同 vue,并支持 3 种 API:
3.3 调试 nvue 页面
HBuilderX 内置了 weex
调试工具的强化版,包括审查界面元素、看 log、debug 打断点,详见。
四、拓展阅读
以上是关于Rust 移动开发与跨平台模式探究的主要内容,如果未能解决你的问题,请参考以下文章
一个iOS开发者的android修行之路二:UITableView和ListView的对比探究
的作者 fzyzcjy 也在和 AppFlowy 的开发者沟通,后续 AppFlowy 有可能使用 flutter_rust_bridge
,但目前这个进展比较缓慢。等多语言和开发环境。其中 Rust/ Kotlin/ Swift/ Python
SDK 是基于一个 Rust core 库来构建的,而 javascript/ QML
是基于 JavaScript 核心库构建。crate,用于为各个操作系统平台打包程序。cli-rs
,Rust 实现的跨平台 Cli 。cli-js
,是对 cli-rs
的包装,使用 napi-rs
为每个平台生成 npm 包。webdriver
,之前叫tauri-driver
,是一个跨平台 WebDriver Server。其他 tauri-app/create-tauri-app
,TypeScript实现的一个脚手架工具,帮助开发者快速创建 Tauri App。跨平台支持
tauri-app/tao
,纯 Rust 实现的跨平台应用程序窗口创建库,支持 Windows、macOS、Linux、iOS 和 Android 等所有主要平台,基于 winit
二次开发。tauri-app/wry
,纯 Rust 实现的跨平台 WebView 渲染库,支持 Windows、macOS 和 Linux 等所有主要桌面平台。Tauri 使用 WRY 作为抽象层,负责确定使用哪个 webview(以及如何进行交互)。因为现在 iOS 和 macOS 都是用 wkwebview
,所以相当于也支持了 iOS 。而对于 Andriod 的支持还在进行中。tauri-app/tao
利用 Rust 的 trait 和 features 机制,完美实现了跨平台架构:
使用统一的 Window
、Clipboard
、 EventLoop
等窗口抽象:
类似的。建立统一的跨平台抽象:
则是平台特定行为代码,通过 cfg 和 features 来构造一个统一的门面模块,完成跨平台分发。crate,来提供跨平台窗口。跟tauri-app 类似。wgpu
,用于 bevy_render
crate,来提供跨平台渲染。这样在 bevy_ui
中就不需要关心特定平台细节了。其他,比如底层音频库、I/O、Log处理、资源管理等都做了跨平台相关处理。 这些底层库实现跨平台的模式和上面 Tauri 的架构是相似的。
/ cxx
/ protobuf
/ grpc
等 crates 的支持,为了方便开发。Android 团队充分验证了 Rust 和 C++ 之间的互操作性已经在很大程度上足以在 Android 中方便地使用 Rust。也将 rust-analyzer
/ clippy
/ rustfmt
集成到了 构建系统中。
给Apple 的一封公开信:请用 Rust 替换 Objective-CIronCore Labs 公司 CEO( Patrick Walsh )去年(2021.10)在其官网发布了一篇 给Apple 的一封公开信:请用 Rust 替换 Objective-C 的文章,内容摘要:
iOS 15.1 更新修复了 22 个漏洞。谢谢你。但在这 22 个漏洞中,至少有 16 个是由于内存错误造成的,包括整数溢出、内存损坏、越界读写、释放后使用、缓冲区溢出等。 建议 Apple 通过 Rust 与 Swfit 的互操作性,让 Rust 语言成为苹果技术栈中一等公民。 然后使用 Rust 重写CoreAudio、CoreGraphics 和 WebKit 等关键部分,这些都是现实世界中针对 Apple 客户的攻击的主要载体。 这是一项艰巨的工作,但它会带来巨大的投资回报。迁移到 Rust 可以消除 70% 的漏洞,并且可能更接近 95% 的可远程利用的漏洞。专注于解析来自不受信任来源的数据的库将使Apple平台更加安全。
参考https://foundation.rust-lang.org/posts/2022-03-08-member-spotlight-1password/
https://www.fullstory.com/blog/rust-at-fullstory-part-2-mobile-sdk/
https://digvijayu.medium.com/building-cross-platform-library-with-rust-for-ios-and-android-c56a448e4804
https://foundation.rust-lang.org/news/2022-03-08-member-spotlight-1password/
https://dteare.medium.com/behind-the-scenes-of-1password-for-linux-d59b19143a23
https://github.com/QConChina/QConBeijing2019/tree/master/%E7%A7%BB%E5%8A%A8%E6%96%B0%E7%94%9F%E6%80%81
https://rustrepo.com/repo/i-schuetz-rust_android_ios-rust-mobile
https://github.com/Dushistov/flapigen-rs
https://github.com/ivanschuetz/wasm-rust-d3
https://github.com/Co-Epi/app-backend-rust
https://macroquad.rs/tutorials/android/
http://dockone.io/article/2434630
https://dev.to/tauri/announcing-tauri-beta-more-efficient-crossplatform-apps-with-better-features-1nbd
https://tauri.studio/docs/development/security
https://rustmagazine.github.io/rust_magazine_2021/chapter_5/running_rust_on_android.html
https://source.android.com/setup/build/rust/building-rust-modules/overview
https://blog.mozilla.org/data/2022/01/31/this-week-in-glean-building-and-deploying-a-rust-library-on-ios/
https://blog.ironcorelabs.com/an-open-letter-to-apple-please-please-replace-objective-c-with-rust-10df606c3dce
https://nadim.computer/posts/2022-02-11-maccatalyst.html
https://security.googleblog.com/2021/06/rustc-interop-in-android-platform.html
https://source.android.com/setup/build/rust/building-rust-modules/android-rust-modules
跨平台应用开发进阶(四十二)vue与nvue页面设计方案探究
文章目录
一、前言
在应用uni-app
跨平台设计方案进行app开发过程中,uni-app
官网支持两种页面设计方案:vue
与nvue
,不少同学在应用过程中,会搞不清楚两者的区别,而不知如何选择,甚至可能产生错误的应用方式。
二、选择方案
uni-app App 端内置了一个基于 weex 改进的原生渲染引擎,提供了原生渲染能力。
在 App 端,如果使用 vue
页面,则使用 webview
渲染;如果使用 nvue
页面(native vue
的缩写),则使用原生渲染。一个 App 中可以同时使用两种页面,比如首页使用 nvue
,二级页使用 vue
页面。
注意⚠️:
- 虽然
nvue
也可以多端编译,输出 H5 和小程序,但 nvue
的 css
写法受限,所以如果你不开发 App,那么不需要使用 nvue
。 nvue
页面控制显隐只可以使用v-if
不可以使用v-show
。
2.1 CSS注意事项
-
nvue
的css
仅支持flex
布局,是webview css
语法的子集。这是因为操作系统原生排版不支持非flex
之外的web
布局。当然flex
足以排布出各种页面,只是写法需要适应。有关APP中flex
布局用法详参《ReactNative进阶(四十四):Mobile App 适配性优化》《Vue进阶(幺柒幺):前端用户体验提升(五)Flex实现弹性布局》。
-
注意⚠️:文档中未说明的 flexbox
属性均不支持:如 order、flex-grow 、flex-shrink 、 flex-basis、align-content、align-self
等。在 nvue
中,Flexbox
是默认且唯一的布局模型,所以你不需要手动为元素添加 display: flex;
属性。
-
class
进行绑定时只支持数组语法。
-
不支持媒体查询;
-
不能在 style
中引入字体文件;
-
不能使用百分比布局,如width:100%;
-
不支持在css里写背景图background-image
,但可以使用image
组件和层级来实现类似web中的背景效果。因为原生开发本身也没有web这种背景图概念。
-
使用image
标签,支持使用base64
,不支持svg
格式图片。
-
nvue
的各组件在安卓端默认是透明的,如果不设置background-color
,可能会导致出现重影的问题;
-
文字内容,必须只能在text
组件下,text
组件不能换行写内容,否则会出现无法去除的周边空白;
-
只有text
标签可以设置字体大小,字体颜色。
三、快速上手
3.1 新建 nvue 页面
在 HBuilderX 的 uni-app
项目中,新建页面,弹出界面右上角可以选择是建立vue
页面还是nvue
页面,或者 2 个同时建。
不管是 vue
页面还是 nvue
页面,都需要在pages.json
中进行路由注册。如果在 HBuilderX 中新建页面是会自动注册的,如果使用其他编辑器,则需要自行在 pages.json
里手工注册。
如果一个页面路由下同时有 vue
页面和 nvue
页面,即出现同名的 vue
和 nvue
文件。那么在 App 端,会仅使用 nvue
页面,同名的 vue
文件将不会被编译到 App 端。而在非 App 端,会优先使用 vue
页面。
如果不同名,只有 nvue
页面,则在非 app 端,只有 uni-app 编译模式的 nvue
文件才会编译。
3.2 开发 nvue 页面
nvue
页面结构同 vue
, 由 template
、style
、script
构成。
- template: 模板写法、数据绑定同 vue。
- style:由于采用原生渲染,并非所有浏览器的 css 均支持,布局模型只支持 flex 布局,虽然不会造成某些界面布局无法实现,但写法要注意。详见:样式
- script:写法同 vue,并支持 3 种 API:
3.3 调试 nvue 页面
HBuilderX 内置了 weex
调试工具的强化版,包括审查界面元素、看 log、debug 打断点,详见。
四、拓展阅读
以上是关于Rust 移动开发与跨平台模式探究的主要内容,如果未能解决你的问题,请参考以下文章
一个iOS开发者的android修行之路二:UITableView和ListView的对比探究
Rust/ Kotlin/ Swift/ Python
SDK 是基于一个 Rust core 库来构建的,而 javascript/ QML
是基于 JavaScript 核心库构建。crate,用于为各个操作系统平台打包程序。cli-rs
,Rust 实现的跨平台 Cli 。cli-js
,是对cli-rs
的包装,使用napi-rs
为每个平台生成 npm 包。webdriver
,之前叫tauri-driver
,是一个跨平台 WebDriver Server。其他 tauri-app/create-tauri-app
,TypeScript实现的一个脚手架工具,帮助开发者快速创建 Tauri App。跨平台支持
tauri-app/tao
,纯 Rust 实现的跨平台应用程序窗口创建库,支持 Windows、macOS、Linux、iOS 和 Android 等所有主要平台,基于winit
二次开发。tauri-app/wry
,纯 Rust 实现的跨平台 WebView 渲染库,支持 Windows、macOS 和 Linux 等所有主要桌面平台。Tauri 使用 WRY 作为抽象层,负责确定使用哪个 webview(以及如何进行交互)。因为现在 iOS 和 macOS 都是用wkwebview
,所以相当于也支持了 iOS 。而对于 Andriod 的支持还在进行中。
tauri-app/tao
利用 Rust 的 trait 和 features 机制,完美实现了跨平台架构:使用统一的
Window
、Clipboard
、EventLoop
等窗口抽象:类似的。
建立统一的跨平台抽象:
则是平台特定行为代码,通过 cfg 和 features 来构造一个统一的门面模块,完成跨平台分发。
crate,来提供跨平台窗口。跟tauri-app 类似。
wgpu
,用于bevy_render
crate,来提供跨平台渲染。这样在bevy_ui
中就不需要关心特定平台细节了。其他,比如底层音频库、I/O、Log处理、资源管理等都做了跨平台相关处理。 这些底层库实现跨平台的模式和上面 Tauri 的架构是相似的。
/cxx
/protobuf
/grpc
等 crates 的支持,为了方便开发。Android 团队充分验证了 Rust 和 C++ 之间的互操作性已经在很大程度上足以在 Android 中方便地使用 Rust。给Apple 的一封公开信:请用 Rust 替换 Objective-C 也将
rust-analyzer
/clippy
/rustfmt
集成到了 构建系统中。IronCore Labs 公司 CEO( Patrick Walsh )去年(2021.10)在其官网发布了一篇 给Apple 的一封公开信:请用 Rust 替换 Objective-C 的文章,内容摘要:
iOS 15.1 更新修复了 22 个漏洞。谢谢你。但在这 22 个漏洞中,至少有 16 个是由于内存错误造成的,包括整数溢出、内存损坏、越界读写、释放后使用、缓冲区溢出等。 建议 Apple 通过 Rust 与 Swfit 的互操作性,让 Rust 语言成为苹果技术栈中一等公民。 然后使用 Rust 重写CoreAudio、CoreGraphics 和 WebKit 等关键部分,这些都是现实世界中针对 Apple 客户的攻击的主要载体。 这是一项艰巨的工作,但它会带来巨大的投资回报。迁移到 Rust 可以消除 70% 的漏洞,并且可能更接近 95% 的可远程利用的漏洞。专注于解析来自不受信任来源的数据的库将使Apple平台更加安全。
参考https://foundation.rust-lang.org/posts/2022-03-08-member-spotlight-1password/
https://www.fullstory.com/blog/rust-at-fullstory-part-2-mobile-sdk/
https://digvijayu.medium.com/building-cross-platform-library-with-rust-for-ios-and-android-c56a448e4804
https://foundation.rust-lang.org/news/2022-03-08-member-spotlight-1password/
https://dteare.medium.com/behind-the-scenes-of-1password-for-linux-d59b19143a23
https://github.com/QConChina/QConBeijing2019/tree/master/%E7%A7%BB%E5%8A%A8%E6%96%B0%E7%94%9F%E6%80%81
https://rustrepo.com/repo/i-schuetz-rust_android_ios-rust-mobile
https://github.com/Dushistov/flapigen-rs
https://github.com/ivanschuetz/wasm-rust-d3
https://github.com/Co-Epi/app-backend-rust
https://macroquad.rs/tutorials/android/
http://dockone.io/article/2434630
https://dev.to/tauri/announcing-tauri-beta-more-efficient-crossplatform-apps-with-better-features-1nbd
https://tauri.studio/docs/development/security
https://rustmagazine.github.io/rust_magazine_2021/chapter_5/running_rust_on_android.html
https://source.android.com/setup/build/rust/building-rust-modules/overview
https://blog.mozilla.org/data/2022/01/31/this-week-in-glean-building-and-deploying-a-rust-library-on-ios/
https://blog.ironcorelabs.com/an-open-letter-to-apple-please-please-replace-objective-c-with-rust-10df606c3dce
https://nadim.computer/posts/2022-02-11-maccatalyst.html
https://security.googleblog.com/2021/06/rustc-interop-in-android-platform.html
https://source.android.com/setup/build/rust/building-rust-modules/android-rust-modules
跨平台应用开发进阶(四十二)vue与nvue页面设计方案探究
文章目录
一、前言
在应用
uni-app
跨平台设计方案进行app开发过程中,uni-app
官网支持两种页面设计方案:vue
与nvue
,不少同学在应用过程中,会搞不清楚两者的区别,而不知如何选择,甚至可能产生错误的应用方式。二、选择方案
uni-app App 端内置了一个基于 weex 改进的原生渲染引擎,提供了原生渲染能力。
在 App 端,如果使用
vue
页面,则使用webview
渲染;如果使用nvue
页面(native vue
的缩写),则使用原生渲染。一个 App 中可以同时使用两种页面,比如首页使用nvue
,二级页使用vue
页面。注意⚠️:
- 虽然
nvue
也可以多端编译,输出 H5 和小程序,但nvue
的css
写法受限,所以如果你不开发 App,那么不需要使用nvue
。nvue
页面控制显隐只可以使用v-if
不可以使用v-show
。2.1 CSS注意事项
nvue
的css
仅支持flex
布局,是webview css
语法的子集。这是因为操作系统原生排版不支持非flex
之外的web
布局。当然flex
足以排布出各种页面,只是写法需要适应。有关APP中flex
布局用法详参《ReactNative进阶(四十四):Mobile App 适配性优化》《Vue进阶(幺柒幺):前端用户体验提升(五)Flex实现弹性布局》。注意⚠️:文档中未说明的
flexbox
属性均不支持:如order、flex-grow 、flex-shrink 、 flex-basis、align-content、align-self
等。在nvue
中,Flexbox
是默认且唯一的布局模型,所以你不需要手动为元素添加display: flex;
属性。
class
进行绑定时只支持数组语法。不支持媒体查询;
不能在
style
中引入字体文件;不能使用百分比布局,如
width:100%;
不支持在css里写背景图
background-image
,但可以使用image
组件和层级来实现类似web中的背景效果。因为原生开发本身也没有web这种背景图概念。使用
image
标签,支持使用base64
,不支持svg
格式图片。
nvue
的各组件在安卓端默认是透明的,如果不设置background-color
,可能会导致出现重影的问题;文字内容,必须只能在
text
组件下,text
组件不能换行写内容,否则会出现无法去除的周边空白;只有
text
标签可以设置字体大小,字体颜色。三、快速上手
3.1 新建 nvue 页面
在 HBuilderX 的
uni-app
项目中,新建页面,弹出界面右上角可以选择是建立vue
页面还是nvue
页面,或者 2 个同时建。不管是
vue
页面还是nvue
页面,都需要在pages.json
中进行路由注册。如果在 HBuilderX 中新建页面是会自动注册的,如果使用其他编辑器,则需要自行在pages.json
里手工注册。如果一个页面路由下同时有
vue
页面和nvue
页面,即出现同名的vue
和nvue
文件。那么在 App 端,会仅使用nvue
页面,同名的vue
文件将不会被编译到 App 端。而在非 App 端,会优先使用vue
页面。如果不同名,只有
nvue
页面,则在非 app 端,只有 uni-app 编译模式的nvue
文件才会编译。3.2 开发 nvue 页面
nvue
页面结构同vue
, 由template
、style
、script
构成。
- template: 模板写法、数据绑定同 vue。
- style:由于采用原生渲染,并非所有浏览器的 css 均支持,布局模型只支持 flex 布局,虽然不会造成某些界面布局无法实现,但写法要注意。详见:样式
- script:写法同 vue,并支持 3 种 API:
3.3 调试 nvue 页面
HBuilderX 内置了
weex
调试工具的强化版,包括审查界面元素、看 log、debug 打断点,详见。四、拓展阅读
以上是关于Rust 移动开发与跨平台模式探究的主要内容,如果未能解决你的问题,请参考以下文章
一个iOS开发者的android修行之路二:UITableView和ListView的对比探究