uni

您所在的位置:网站首页 uniapp基于什么 uni

uni

2023-08-09 19:42| 来源: 网络整理| 查看: 265

uni-app和原生App混合开发问题

首先务必确认uni-app和原生代码,谁是主谁是从的问题。 1、如果你的应用是uni-app开发的,需要扩展一些原生能力,那么首先去插件市场看看有没有现成的插件,如果没有,就自己开发,开发文档请参考原生插件开发教程https://nativesupport.dcloud.net.cn/NativePlugin/course/android。 2、如果你的App是原生开发的,部分功能栏目想通过uni-app实现,有2种方式:

在原生App里集成uni小程序sdk,参考:https://nativesupport.dcloud.net.cn/README,相当于原生app拥有了小程序能力。如果不想集成原生sdk,那就把uni-app代码发布成H5方式,在原生App里通过webview打开。 原生插件开发

现在我们只讨论第一种情况,应用是uni-app开发的,需要扩展一些原生能力,即原生插件开发。

开发者须知

已经具备了相应Android应用开发经验,使用Android Studio开发过Android原生。也应该对HTML,JavaScript,CSS等有一定的了解, 能开发uni-app。

开发环境

JAVA环境 jdk1.8Android StudioApp离线SDK下载:请下载2.9.8+版本的android平台SDK

注意

插件目前暂时不支持Kotlingradle版本注意事项 HX3.0.0+版本云打包及相应版本SDK都将gradle版本4.6-all升级到6.5-all,tools.build:gradle版本3.2.1升级到4.1.1。 步骤 一、uni-app端

既然以uni-app开发主体,首先要有一个uni-app项目,新建项目testApp。 扩展 Module Module 扩展 非 UI 的特定功能 创建Android Studio的Module模块

在现有Android项目中创建library的Module。例如uniplugin_module配置刚创建的Module的build.gradle信息。 示例: //导入aar需要的配置 repositories { flatDir { dirs 'libs' } } dependencies { //必须添加的依赖 compileOnly 'com.android.support:recyclerview-v7:28.0.0' compileOnly 'com.android.support:support-v4:28.0.0' compileOnly 'com.android.support:appcompat-v7:28.0.0' compileOnly 'com.alibaba:fastjson:1.1.46.android' compileOnly fileTree(include: ['uniapp-v8-release.aar'], dir: '../app/libs') }

Tips: uniapp-v8-release.aar是扩展module主要依赖库,必须导入此依赖库! 创建TestModule类 Module 扩展必须继承 UniModule 类 示例:

public class TestModule extends UniModule 扩展方法必须加上@UniJSMethod (uiThread = false or true) 注解。UniApp 会根据注解来判断当前方法是否要运行在 UI 线程,和当前方法是否是扩展方法。UniApp是根据反射来进行调用 Module 扩展方法,所以Module中的扩展方法必须是 public 类型。

示例:

//run ui thread @UniJSMethod(uiThread = true) public void testAsyncFunc(JSONObject options, UniJSCallback callback) { Log.e(TAG, "testAsyncFunc--"+options); if(callback != null) { JSONObject data = new JSONObject(); data.put("code", "success"); callback.invoke(data); } } //run JS thread @UniJSMethod (uiThread = false) public JSONObject testSyncFunc(){ JSONObject data = new JSONObject(); data.put("code", "success"); return data; }

同样因为是通过反射调用,Module 不能被混淆。请在混淆文件中添加代码:

-keep public class * extends io.dcloud.feature.uniapp.common.UniModule{*;}

Module 扩展的方法可以使用 int, double, float, String, Map, List ,com.alibaba.fastjson.JSONObject 类型的参数

二、原生android端

在下载的离线SDK项目中修改

三、插件调试

本地注册插件 以上两种方式选一即可

第一种方式 在UniPlugin-Hello-AS工程下 “app” Module根目录assets/dcloud_uniplugins.json文件。 在moudles节点下 添加你要注册的Module 或 Component第二种方式 创建一个实体类并实现UniAppHookProxy接口,在onCreate函数中添加组件注册相关参数 或 填写插件需要在启动时初始化的逻辑。 在UniPlugin-Hello-AS工程下 “app” Module根目录assets/dcloud_uniplugins.json文件,在hooksClass节点添加你创建实现UniAppHookProxy接口的实体类完整名称填入其中即可 (有些需要初始化操作的需求可以在此处添加逻辑,无特殊操作仅使用第一种方式注册即可无需集成UniAppHookProxy接口) public class RichAlert_AppProxy implements UniAppHookProxy { @Override public void onCreate(Application application) { //当前uni应用进程回调 仅触发一次 多进程不会触发 //可通过UniSDKEngine注册UniModule或者UniComponent } @Override public void onSubProcessCreate(Application application) { //其他子进程初始化回调 可用于初始化需要子进程初始化需要的逻辑 } }

dcloud_uniplugins.json说明

nativePlugins: 插件跟节点 可存放多个插件 hooksClass: 生命周期代理(实现AppHookProxy接口类)格式(完整包名加类名) plugins: 插件数组 name : 注册名称 class : module 或 component 实体类完整名称 type : module 或 component类型。 { "nativePlugins": [ { "hooksClass": "uni.dcloud.io.uniplugin_richalert.apphooks", "plugins": [ { "type": "module", "name": "DCloud-RichAlert", "class": "uni.dcloud.io.uniplugin_richalert.RichAlertModule" } ] } ] } 四、集成uni-app项目测试插件

安装最新HbuilderX 大于等于1.4.0+

创建uni-app工程或在已有的uni-app工程编写相关的.nvue 和.vue文件。使用uni-app插件中的module 或 component。

xxx.vue 示例代码(源码请参考UniPlugin-Hello-AS项目中uniapp示例工程源码文件夹的unipluginDemo工程)

选择 发行—>原生APP-本地打包—>生成本地打包App资源 等待资源生成!

在控制台会输出编译日志,编译成功会给出App资源路径

把APP资源文件放入到UniPlugin-Hello-AS工程下 app Module根目录assets/apps/测试工程appid/www对应目录下,再修改assets/data/dcloud_control.xml!修改其中appid=“测试工程appid”!,测试工程UniPlugin-Hello-AS 已有相关配置可参考。具体可查看App离线打包。

appid注意 一定要统一否则会导致应用无法正常运行!

配置"app"Module下的 build.gradle. 在dependencies节点添加插件project引用 (以uniplugin_richalert为例)

// 添加uni-app插件 implementation project(':uniplugin_richalert') 运行测试。测试运行时一切要以真机运行为主


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3