其他分享
首页 > 其他分享> > uni-app混合原生安卓开发

uni-app混合原生安卓开发

作者:互联网

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

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

原生插件开发

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

开发者须知

开发环境

注意

步骤

一、uni-app端

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

//导入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

示例:

//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端

同样新建一个项目

插件调试

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

    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项目测试插件

// 添加uni-app插件
implementation project(':uniplugin_richalert')

标签:原生,插件,app,Module,dcloud,uni,安卓
来源: https://blog.csdn.net/yu75567218/article/details/113345522