UniApp + UTS 实现 Android 原生能力扩展实践

灵犀安全 · 以反诈 App 系统通知监听模块为例

——以"灵犀安全"反诈 App 系统通知监听模块为例


一、背景

随着移动应用功能不断复杂化,单纯依靠跨端框架已经无法满足所有业务需求。

例如:

在"灵犀安全"反诈 App 中,需要实现:

但是 UniApp 默认运行环境只能访问封装后的跨端 API。

例如:

uni.request()

uni.showToast()

uni.navigateTo()

这些接口无法直接访问:

Android Framework

NotificationManager

NotificationListenerService

ClipboardManager

Service

因此需要引入:

UTS 原生插件机制,实现跨端框架与 Android 原生能力之间的桥接。

二、为什么选择 UniApp + UTS?

目前移动端开发主要有几种方案:

方案 优势 不足
原生 Android 性能最高 开发成本高
Flutter 跨平台强 系统能力扩展复杂
React Native 生态丰富 原生桥接成本高
UniApp 开发效率高 系统能力有限

"灵犀安全"项目选择:

UniApp + UTS + Kotlin

原因:

1. 保留跨平台开发效率

UI:

Vue语法

↓

uvue页面

快速完成:


2. 原生能力可扩展

通过UTS:

JavaScript

↓

UTS

↓

Kotlin

↓

Android API

实现:

跨端开发效率

+

原生系统能力

三、整体架构设计

"灵犀安全"中的通知监听架构:

                 用户界面

              index.uvue

                   |

                   |

             UTS Plugin

        notificationGuard

                   |

                   |

          Kotlin Native Layer

                   |

                   |

 NotificationListenerService

                   |

                   |

            Android System

分为三层:

第一层:业务层

负责:

技术:

Vue3
+
uvue
+
UniApp

第二层:桥接层

负责:

技术:

UTS Plugin

第三层:系统层

负责:

技术:

Kotlin

Android SDK

四、UTS插件基本原理

传统Web调用原生:

JavaScript

无法直接访问

↓

Android API

UTS提供:

JS接口

↓

自动编译

↓

Native代码

例如:

前端调用:

notificationGuard.start()

UTS转换:

调用 Kotlin 方法

↓

执行 Android 代码

五、创建 notificationGuard 插件

目录结构:

uni_modules

 └── notificationGuard

       ├── interface.uts

       ├── package.json

       └── utssdk

             └── app-android

                    ├── index.uts

                    └── NotificationService.kt

六、封装 Android 原生接口

1. 定义UTS接口

interface.uts:

export interface NotificationGuard {


    start():void


    stop():void


    getStatus():boolean


}

作用:

定义前端可以调用的方法。


七、Android原生实现

创建:

NotificationService.kt

示例:

package notificationGuard


object NotificationManager {


    private var enabled=false


    fun start(){

        enabled=true

    }


    fun stop(){

        enabled=false

    }


    fun status():Boolean{

        return enabled

    }


}

八、前端调用Native能力

页面:

index.uvue

import {
 notificationGuard
}
from "@/uni_modules/notificationGuard"



function enableMonitor(){


 notificationGuard.start()


}

用户点击:

开启安全防护

↓

调用UTS

↓

启动Android监听

九、NotificationListenerService集成

真正监听通知:

class MyNotificationListenerService :

NotificationListenerService(){



override fun onNotificationPosted(

sbn:StatusBarNotification

){


val packageName =
sbn.packageName



val notification =
sbn.notification



val extras =
notification.extras



val text =
extras.getString(
Notification.EXTRA_TEXT
)



}


}

十、数据回传设计

监听到:

微信通知:

您的账户异常,请点击链接处理

Native层:

封装:

{
"app":
"WeChat",

"title":
"微信",

"content":
"您的账户异常,请点击链接处理"
}

发送给:

UniApp

提交:

RAG分析接口

十一、UTS与Native通信问题

实际开发中遇到几个关键问题。


问题1:类型转换

UTS不是完整JavaScript。

例如:

错误:

let data:any={}

可能导致:

Type mismatch

解决:

明确类型:

interface NotifyData{

content:string

source:string

}

问题2:Android API兼容

例如:

部分API:

Build.VERSION.SDK_INT

需要判断:

if(
Build.VERSION.SDK_INT >= 26
){

}

避免低版本崩溃。


问题3:生命周期管理

Service:

可能因为:

导致停止。

因此需要:

Service生命周期监听

+

状态恢复机制

十二、为什么不用纯UniApp实现?

很多开发者会疑问:

UniApp不是可以打包Android吗?为什么还需要原生?

原因:

UniApp只能控制:

App内部逻辑

例如:

可以做到:页面、网络请求、数据展示

但是无法直接控制:

系统通知

系统服务

后台监听

其他App事件

这些属于:

Android Framework能力

必须通过Native扩展。


十三、项目中的完整调用链

以诈骗短信为例:

诈骗短信到达

        |

        ↓

Android通知系统

        |

        ↓

NotificationListenerService

        |

        ↓

UTS插件

        |

        ↓

UniApp

        |

        ↓

POST /fraud-detect/analyzeContent

        |

        ↓

RAG分析

        |

        ↓

WebSocket返回

        |

        ↓

风险弹窗

十四、技术价值分析

通过:

UniApp

+

UTS

+

Android Native

实现:

1. 跨平台效率

大量业务代码:

使用Vue完成。


2. 原生能力突破

获得:


3. 更适合AI安全应用

AI安全类应用通常需要:

感知层

↓

智能分析层

↓

决策层

其中:

感知层:

依赖大量系统能力。

UTS成为:

跨端框架连接系统能力的重要桥梁。


十五、总结

在"灵犀安全"项目中,通过:

UniApp

        +

UTS插件

        +

Kotlin Native

        +

Android Framework

构建了一套跨端 + 原生融合架构。

相比传统跨端应用:

只能完成:

页面展示

业务交互

该方案进一步实现:

系统级事件感知

后台实时监听

AI安全分析

主动风险预警

证明了:

跨端框架并不意味着牺牲系统能力,通过合理设计 Native Bridge,可以同时兼顾开发效率与底层能力。
← 返回首页