不了解移动开发,您也可以为移动代码做出贡献。
FinClip applet安全地运行沙箱,并以SDK的形式嵌入在应用程序开发人员中,允许您的应用程序次要更改Applet的超级应用程序。此处,“ App”不仅是指iOS或Android的应用。主机可以很强,可以配备具有多核CPU的PC和更多内存。
主机的硬件环境和软件环境是不同的,需要暴露于迷你程序的功能也有所不同。此外,在不同的业务环境中,应用程序应用程序的本地能力(例如地图,付款,加密,音频和视频,甚至是AR/甚至AR/甚至AR/甚至AR/甚至AR/甚至AR/甚至AR/甚至AR/XR等也不同。Finclip支持开发人员自定义各种API接口并将其注入FinClip SDK,从而以JavaScript方式呼吁小型程序开发人员。
这样,任何微型程序都可以在理论上使用主机环境的任何技术功能,而不是仅限于FinClip SDK提供的标准接口。
目前,FinClip支持的正式支持的界面需要使用主机环境的本机技术来实现。例如,有必要在iOS上使用Objective -C或Swift,并且Java/Kotlin在Android上使用。此方法需要至少两名平台工程师来单独开发 - 当然,这不是过去的问题。任何手机应用都必须维护两个团队的两个版本。但是,当您有更多类型的终端支持时,这是非常麻烦的。
如“ Finclip Mini Program+Rust”系列中所述,用于处理纯逻辑,算法类别,例如音频和视频编码,解密等,没有人类 - 机器的交互。不想丢弃C的代码,Rust是一个不错的选择。作为一种新兴语言,记忆安全性和线程安全性,可以在平台上编译RUST,高性能和少量量,特别适合编程,包括在IoT设备上开发低计算能力,低功耗,低内存,堆积代码;而且,Rust已经是Android支持的系统语言。
因此,FinClip支持开发人员可以为其安全运行的沙箱提供定制的扩展,并用Rust扩展?
在回答上述问题之前,让我们在这里想象。如果您将FinClip技术用作末端的“粘合剂”,以实现 - 端的应用程序软件生产链接,那么新型技术组的角色(技能)是组成的,是这样的:
这是最小的“流线”。每个工作都使用不同的语言技能。劳动分工越清晰,即使这些事情是“玩世界”的同一个人,您还需要清楚地执行不同的角色,这将有所帮助,这将有所帮助,这将有助于帮助,这将有助于帮助哪些将有助于梳理合理的体系结构,在末端到端技术链接上定义每个链接的功能类别。
从软件工程的角度来看,FinClip技术扮演着胶水代码(粘合剂)的角色,以键入涉及多种语言和多型技术的软件系统。Glue代码通常是最乏味,最容易出现错误。它解决了这种技术水平,并大大释放了开发人员的生产力和创造力。形成自己的“供应链”。
例如,HTML/JavaScript的技术与设备端的本机技术有关,并且引入了许多可以专注于小型程序开发的工程师,以提供丰富的应用程序方案;可以插入的“插件”,并可以进一步促进专注于这一部分工作并产生丰富且高质量的插头的人。只要标准化标准化,就有机会形成生态学。
提供端到-DEND应用程序解决方案,该解决方案成为“集成”。在技术链接的所有链接的“供应链”中,选择组装自己的应用程序所需的组件。
正如Finclip小程序的开发人员不需要了解任何iOS/objc/swift的技能知识,android/java/kotlin,就像html/javaScript一样,即开发有用的应用程序,这是Finclip SDK扩展程序的开发者,最受欢迎的是,最大的开发者,最受欢迎的开发人员,也是如此。您不需要了解太多操作系统平台的编程知识,甚至不需要与OBJC和Java打交道以发展自己的扩展。
我们可以在技术中做到这一点。根据以下步骤 - 指出以下内容发生在生锈方面,而OBJC/Java空间的代码开发要求为零。
用货物创建一个LIB类型项目,例如
然后修改生成的货物.toml:
在src/lib.rs中,启动和包装您的计划,以向原始主机应用程序开发人员提供函数,并将其纳入其FinClip SDK中。
首先,定义一种新类型:
请将此类型的名称命名为“ FinClipCall”,并且以这种类型表示的函数签名必须为:
它实际上是一个函数指针,可以指向此类功能,例如:
请注意,这种类型的函数,预期的输入参数是合法的JSON字符串,返回也必须是合法的JSON字符串。由于FinClip的自定义API的b,JSON使用JSON使用JSON作为条目和退出,这很方便小型程序侧JavaScript代码的处理。因此,我建议在上面介绍Serde_json板条,以帮助进行一些与JSON相关的数据转换。
第二,开始实现您的功能实现,例如:
以上推动根据类似签名实现API。
finclip mini -program侧,调用自定义API方法是API的名称。例如,如果您将API接口命名为“ ABC”,则将此接口注入FinClip SDK,并在Javascript侧调用。是“ ft.abc(...)”。
在这里,您需要命名每个自定义功能并映射它们的关系,这确实有点像代码编译器中的虚拟表。这里是另一个关注我们开发的MyPlugin项目的地方:
这个功能是什么?尽管只有几行代码,但有必要解释:
在这一点上,我们基本上已经完成了90%的工作。这很简单吗?
到了这一步骤,我们都在抛弃世界中。但最终,这些结果必须被外界发现和使用。最后的异步是将“花餐厅”发送到异构语言的世界。我们需要使用RUST FFI(外函数接口)来让Rust编译器编译上述代码,并生成C型代码库,因此上述功能也在上述功能上。进行一些补充:
“ no_mangle”告诉生锈编译器。请勿混淆或更改“ myplugin_register_api()”的函数名称',否则OBJC或Java/jni side不知道叫什么名称。
请注意,在上述函数的陈述中,有“不安全”和“外部” c'的徽标。外部理解是该功能被用作外星语言。这是记忆安全,线程安全或思想的规则,读者可以理解详细信息。在这里,我们主要使用'box :: in_raw'的功能也就是说,我们放置了只能在Rust中解析的数据结构,并通过原始指针将其扔到C侧,该指针与此内存等同于不同。它的记忆安全不再由Rust监控和保证,因此不安全。
这里有一个问题:由于c侧不能解析生锈侧的哈希图,所以该戏的原始指针的用途是什么?它很有用,因为它实际上等同于不透明的指针,一个手柄是主持人的申请方“持有”。当主机需要调用Rust功能时,将手柄传递回。
在Rust FFI中,一次执行每个“ in_raw”操作,并且必须在末尾执行相应的“ from_raw”操作。外部异质语言必须将内存的控制归还生锈,否则会发生内存泄漏。最终,我们需要为异构语言添加一个函数。使用上述内容后,请记住通知生锈回收利用:
请注意,调用此功能是主机应用程序开发人员的责任,因此必须在插件的指令文档中向他们强调。这很丑陋,但似乎没有好方法。跨语言总是有一些不便。
实际上,它非常简单和免费。没有特殊的图书馆,或者需要继承协议。
如“ Finclip Mini Program+Rust”系列中所述,跨平台需要编译Rust Code,以在与AARCH64-APPLE-OIS,X86_64-APPLE-OIOS和ANDROID有关的目标体系结构下构建二进制库。例如,生成适合iOS同时和iOS设备的通用库:
最后,您交付给主机申请的内容应包括:
在这一点记忆是由开发人员自由决定的。
接下来,主机的开发人员如何应用?主机应用程序是在iOS,Android或其他设备上运行的应用程序软件。它嵌入FinClip SDK以获得运行小程序的能力。
有关集成FinClip SDK的详细信息,请参阅官方网站。还引入了“ Finclip Mini Program+Rust”。这里没有描述。以下是iOS应用程序上述myplugin的一个示例。在appdelegate.m中添加三行代码(下面有三行):下面:下图):
上面的代码AppDelegate.m,在使用Xcode创建OBJC项目时自动生成,我们在此处初始化了FinClip SDK(请参阅官方网站,以获取详细信息或“ Finclip mini Program+Rust”系列。非常简单:非常简单:非常简单:
这里的“ FinClipext”负责将Rust API转换为OBJC方法,然后注入FinClip SDK。
Myplugin库,从上面我们可以看到,没有与FinClip直接相关的特殊库。唯一的约束是两个规格:
就是这样。那么该库是如何注入FinClip SDK的,可以通过小程序来调用?魔术是主机应用程序的开发人员在其项目中引入了一个名为libfincliprust.a的静态库(该库尚未标准库FinClip支持的工具,但我的个人项目,目前只有iOS版本可用。感兴趣的。可以优化朋友。欢迎提供Android版本。源代码在GitHub上,由OBJC和Rust Code组成)。用户,您无需注意实现它。只需下载此静态库并编译并构建一个应用程序以指定依赖关系和链接。
最后,当然,您要安装的myplugin的静态库,libmyplugin.a,介绍该项目并将其构建。
作为主机应用程序开发人员,还完成了FinClip SDK扩展名为FinClip Mini -Program开发人员的Myplugin的任务。
在上面提到的myplugin的“花列表”中,有两个API暴露于小程序中,分别是'api_drinker'和'api_whisky'。这些由Rust和Json String编写的两个函数作为参数和Ginsen,将其转换为OBJC的方法中通过libfincliprust.a的某些“魔术”操作,并动态注入FinClip SDK。要使用这些API,FinClip Mini Program开发人员需要在其自己的小程序项目的根目录中编写Finclipconf.js:
从那时起,JavaScript中这些API的调用只能由“ ft'对象,例如'ft.get_drinker'执行。
在现代软件项目中,多语言混合程序不可避免地会不同的语言适合于端到端技术链接上的不同链接,但是不可避免地会影响整合和集成的麻烦经常会影响开发。例如,跨语言转移涉及API接口的产生,并且在异质语言中反复反复反复进行“翻译”。编写胶水代码非常麻烦。Finclip解决了更平稳地对接的异质技术的问题。在本文中,进一步引入了一种更“透明”的方法,以使那些完全不熟悉JavaScript,不了解OBJC并且不了解终端开发的工程师。具有强大语言扩展的强大语言,最终用于微型程序开发人员。
本文的演示代码在https://github.com/kornhill/finclip-rust-exclum上。
原始:https://juejin.cn/post/7096359509529985055