uniapp人脸识别UTS API插件制作
人脸识别UTS API插件简介
1:1人脸识别,活体检测UTS API插件,支持iOS,Android,支持uniappX和uniapp(vue2&vue3)。
所有功能都是设备端侧AI能力可开飞行模式体验无需网络,无需后台API服务可完全离线运行,高性能无依赖
插件部分的代码: https://github.com/FaceAISDK/FaceAISDK_uniapp_UTS
一般制作插件需求具备uniapp,Android iOS 3种交叉知识储备,否则调试会非常的痛苦,验证效果自定义基座也很难受
当然你可以借助AI辅助编程工具能省事不少
快速体验完整人脸识别功能可以下载Android演示App:
<div align=center>
<img src="https://www.pgyer.com/app/qrcode/faceVerify" width = 15% alt="扫一扫下载Demo"/>
</div>
使用方法
如果你是第一次运行UTS插件工程/引入UTS API插件,你应先安装官方说明配置好基础环境 基础环境
开发调试阶段请开启调试模式,Android-manifest.json distribute配置 "debuggable" : true,
1. 下载最新Demo工程先跑通;熟悉半天后参考文档集成到主项目
2. 运行 -》 运行到手机或模拟器 -》制作自定义调试基座 -》打包 (期间不要修改原生代码)
.
3. 运行 -》运行到iOS/Android基座 -》使用自定义基座运行 -》本地基座 -》运行
.
4. 把插件引入到你的主项目(即 import {faceVerify,**等方法} from "@/uni_modules/FaceAISDK-Core";)
一定一定要先制作自定义调试基准,然后运行的时候使用自定义基准-本地基座,请看图片步骤引导说明
常见错误与解决方法
1.iOS 基座安装到手机后很久都是白屏/黑屏
控制台输出
项目 [FaceAI_API_Plugin] 已启动。请点击手机/模拟器的运行基座App(uni-app x)查看效果。
如应用未更新,请在手机上杀掉基座进程重启
老旧手机根据提示确保杀死基座进程,稍后重启App就可以了
2.炫彩活体提示光线太亮导致失败
这个基本上只能规避强光环境了,或引导用户用手遮住强烈光线,让手机彩色光能照到脸部
室外强光环境建议使用动作活体+静默活体检测
3.改动原生swift/kotlin 代码导致基座不能正常运行
只能重新制作自定义调试基座,UTS API插件使用方如果不需要修改插件底层实现尽量不用改原生代码
人脸识别,活体检测状态码
人脸识别,活体检测状态码含义
let DEFAULT = 0 // 0 初始化状态,流程没有开始
let VERIFY_SUCCESS = 1 // 1 人脸识别对比成功大于设置的threshold
let VERIFY_FAILED = 2 // 2 人脸识别对比识别小于设置的threshold
let MOTION_LIVENESS_SUCCESS = 3 // 3 动作活体检测成功(基本不用,还有后续动作)
let MOTION_LIVENESS_TIMEOUT = 4 // 4 动作活体超时
let NO_FACE_MULTI = 5 // 5 多次没有检测到人脸
let NO_FACE_FEATURE = 6 // 6 没有对应的人脸特征值
let COLOR_LIVENESS_SUCCESS = 7 // 7 炫彩活体成功
let COLOR_LIVENESS_FAILED = 8 // 8 炫彩活体失败
let COLOR_LIVENESS_LIGHT_TOO_HIGH = 9 // 9 炫彩活体失败,光线亮度过高
let ALL_LIVENESS_SUCCESS = 10 // 10 所有的活体检测完成(包括动作和炫彩)
let SILENT_LIVENESS_FAILED = 11 // 11 静默活体检测失败
人脸识别 目前插件部分的代码是开放修改的,底层SDK不开放。 欢迎提issues反馈问题
🌍: https://faceaisdk.github.io/index
📮:FaceAISDK.Service@gmail.com
人脸识别UTS API插件简介
1:1人脸识别,活体检测UTS API插件,支持iOS,Android,支持uniappX和uniapp(vue2&vue3)。
所有功能都是设备端侧AI能力可开飞行模式体验无需网络,无需后台API服务可完全离线运行,高性能无依赖
插件部分的代码: https://github.com/FaceAISDK/FaceAISDK_uniapp_UTS
一般制作插件需求具备uniapp,Android iOS 3种交叉知识储备,否则调试会非常的痛苦,验证效果自定义基座也很难受
当然你可以借助AI辅助编程工具能省事不少
快速体验完整人脸识别功能可以下载Android演示App:
<div align=center>
<img src="https://www.pgyer.com/app/qrcode/faceVerify" width = 15% alt="扫一扫下载Demo"/>
</div>
使用方法
如果你是第一次运行UTS插件工程/引入UTS API插件,你应先安装官方说明配置好基础环境 基础环境
开发调试阶段请开启调试模式,Android-manifest.json distribute配置 "debuggable" : true,
1. 下载最新Demo工程先跑通;熟悉半天后参考文档集成到主项目
2. 运行 -》 运行到手机或模拟器 -》制作自定义调试基座 -》打包 (期间不要修改原生代码)
.
3. 运行 -》运行到iOS/Android基座 -》使用自定义基座运行 -》本地基座 -》运行
.
4. 把插件引入到你的主项目(即 import {faceVerify,**等方法} from "@/uni_modules/FaceAISDK-Core";)
一定一定要先制作自定义调试基准,然后运行的时候使用自定义基准-本地基座,请看图片步骤引导说明
常见错误与解决方法
1.iOS 基座安装到手机后很久都是白屏/黑屏
控制台输出
项目 [FaceAI_API_Plugin] 已启动。请点击手机/模拟器的运行基座App(uni-app x)查看效果。
如应用未更新,请在手机上杀掉基座进程重启
老旧手机根据提示确保杀死基座进程,稍后重启App就可以了
2.炫彩活体提示光线太亮导致失败
这个基本上只能规避强光环境了,或引导用户用手遮住强烈光线,让手机彩色光能照到脸部
室外强光环境建议使用动作活体+静默活体检测
3.改动原生swift/kotlin 代码导致基座不能正常运行
只能重新制作自定义调试基座,UTS API插件使用方如果不需要修改插件底层实现尽量不用改原生代码
人脸识别,活体检测状态码
人脸识别,活体检测状态码含义
let DEFAULT = 0 // 0 初始化状态,流程没有开始
let VERIFY_SUCCESS = 1 // 1 人脸识别对比成功大于设置的threshold
let VERIFY_FAILED = 2 // 2 人脸识别对比识别小于设置的threshold
let MOTION_LIVENESS_SUCCESS = 3 // 3 动作活体检测成功(基本不用,还有后续动作)
let MOTION_LIVENESS_TIMEOUT = 4 // 4 动作活体超时
let NO_FACE_MULTI = 5 // 5 多次没有检测到人脸
let NO_FACE_FEATURE = 6 // 6 没有对应的人脸特征值
let COLOR_LIVENESS_SUCCESS = 7 // 7 炫彩活体成功
let COLOR_LIVENESS_FAILED = 8 // 8 炫彩活体失败
let COLOR_LIVENESS_LIGHT_TOO_HIGH = 9 // 9 炫彩活体失败,光线亮度过高
let ALL_LIVENESS_SUCCESS = 10 // 10 所有的活体检测完成(包括动作和炫彩)
let SILENT_LIVENESS_FAILED = 11 // 11 静默活体检测失败
人脸识别 目前插件部分的代码是开放修改的,底层SDK不开放。 欢迎提issues反馈问题
🌍: https://faceaisdk.github.io/index
📮:FaceAISDK.Service@gmail.com
人脸识别 活体检测 UTS API插件,支持iOS Android,支持uniapp和uniapp x
FaceAISDK-UTS API 插件
1:1人脸识别,活体检测UTS API插件,支持iOS,Android,支持uniappX和uniapp。
人脸识别活体检测都是设备端侧AI能力,无需后台API服务可完全离线运行,高性能无依赖
感谢大家收藏与点赞,如有问题可描述你的使用场景说明发送邮件到FaceAISDK.Service@gmial.com
或提issues 到本插件GitHub托管工程:https://github.com/FaceAISDK/FaceAISDK_uniapp_UTS
快速体验完整人脸识别功能可以下载Demo App:https://www.pgyer.com/app/qrcode/faceVerify
1:N 人脸搜索识别插件独立出来了:https://ext.dcloud.net.cn/plugin?id=26467
使用方法
如果你是第一次运行UTS插件工程/引入UTS API插件,你应先安装官方说明配置好基础环境 基础环境
-
- 按照文档 -》把插件引入项目(即 import {faceVerify,livenessVerify,getFaceFeature等方法} from "@/uni_modules/FaceAISDK-Core";)
-
- 运行-》运行到手机或模拟器 -》制作自定义调试基座 -》打包 等基座制作完成
- 运行-》运行到手机或模拟器 -》制作自定义调试基座 -》打包 等基座制作完成
-
- 运行 -》 运行到手机或模拟器-》运行到iOS/Android基座-》选择使用自定义基座运行-》选择手机-》运行

请手动勾选对正确的运行方式,很多朋友辛苦打好了自定义基座包,结果运行的时候没选对导致运行不了
若之前手机安装过基座需要先卸载之前的基座,iOS 可能会提示你安装好后杀死应进程后重新启动(可以点击几个其他应用加快彻底杀死重启)
注:只支持真机调试,需要用到硬件摄像头 - 运行 -》 运行到手机或模拟器-》运行到iOS/Android基座-》选择使用自定义基座运行-》选择手机-》运行
常见错误与解决方法
-
- iOS 自定义基座首次运行找不到iOS原生SDK FaceAISDK_Core
Analyzing dependencies CocoaPods could not find compatible versions for pod "FaceAISDK_Core": in Podfile: FaceAISDK_Core (= 2026.01.04) None of your spec sources contain a spec satisfying the dependency: `FaceAISDK_Core (= 2025.12.31)`.基本重新运行就可以了,在线打包机器有时候会无法科学上网有问题无法访问GitHub
- iOS 自定义基座首次运行找不到iOS原生SDK FaceAISDK_Core
-
- iOS 基座安装到手机后很久都是白屏/黑屏幕
控制台输出 项目 [FaceAI_API_Plugin] 已启动。请点击手机/模拟器的运行基座App(uni-app x)查看效果。 如应用未更新,请在手机上杀掉基座进程重启根据提示杀掉基座进程重启,然后点击启动2个其他App后再重新启动基本就没问题了,本情况只会在第一次安装新基座出现
- iOS 基座安装到手机后很久都是白屏/黑屏幕
-
- 炫彩活体提示光线太亮导致失败
这个基本上只能规避强光环境了,或引导用户用手遮住强烈光线,让手机彩色光能照到脸部
- 炫彩活体提示光线太亮导致失败
-
- 改动原生swift/kotlin 代码导致基座不能正常运行
只能重新制作自定义调试基座,UTS API插件使用方如果不需要修改插件底层实现尽量不用改原生代码
- 改动原生swift/kotlin 代码导致基座不能正常运行
人脸识别,活体检测状态码
人脸识别,活体检测状态码含义
public static let DEFAULT = 0 // 0 初始化状态,流程没有开始
public static let VERIFY_SUCCESS = 1 // 1 人脸识别对比成功大于设置的threshold
public static let VERIFY_FAILED = 2 // 2 人脸识别对比识别小于设置的threshold
public static let MOTION_LIVENESS_SUCCESS = 3 // 3 动作活体检测成功(基本不用,还有后续动作)
public static let MOTION_LIVENESS_TIMEOUT = 4 // 4 动作活体超时
public static let NO_FACE_MULTI = 5 // 5 多次没有检测到人脸
public static let NO_FACE_FEATURE = 6 // 6 没有对应的人脸特征值
public static let COLOR_LIVENESS_SUCCESS = 7 // 7 炫彩活体成功
public static let COLOR_LIVENESS_FAILED = 8 // 8 炫彩活体失败
public static let COLOR_LIVENESS_LIGHT_TOO_HIGH = 9 // 9 炫彩活体失败,光线亮度过高
public static let ALL_LIVENESS_SUCCESS = 10 // 10 所有的活体检测完成(包括动作和炫彩)
Copyright © 2026 FaceAISDK. All rights reserved
FaceAISDK-UTS API 插件
1:1人脸识别,活体检测UTS API插件,支持iOS,Android,支持uniappX和uniapp。
人脸识别活体检测都是设备端侧AI能力,无需后台API服务可完全离线运行,高性能无依赖
感谢大家收藏与点赞,如有问题可描述你的使用场景说明发送邮件到FaceAISDK.Service@gmial.com
或提issues 到本插件GitHub托管工程:https://github.com/FaceAISDK/FaceAISDK_uniapp_UTS
快速体验完整人脸识别功能可以下载Demo App:https://www.pgyer.com/app/qrcode/faceVerify
1:N 人脸搜索识别插件独立出来了:https://ext.dcloud.net.cn/plugin?id=26467
使用方法
如果你是第一次运行UTS插件工程/引入UTS API插件,你应先安装官方说明配置好基础环境 基础环境
-
- 按照文档 -》把插件引入项目(即 import {faceVerify,livenessVerify,getFaceFeature等方法} from "@/uni_modules/FaceAISDK-Core";)
-
- 运行-》运行到手机或模拟器 -》制作自定义调试基座 -》打包 等基座制作完成
- 运行-》运行到手机或模拟器 -》制作自定义调试基座 -》打包 等基座制作完成
-
- 运行 -》 运行到手机或模拟器-》运行到iOS/Android基座-》选择使用自定义基座运行-》选择手机-》运行

请手动勾选对正确的运行方式,很多朋友辛苦打好了自定义基座包,结果运行的时候没选对导致运行不了
若之前手机安装过基座需要先卸载之前的基座,iOS 可能会提示你安装好后杀死应进程后重新启动(可以点击几个其他应用加快彻底杀死重启)
注:只支持真机调试,需要用到硬件摄像头 - 运行 -》 运行到手机或模拟器-》运行到iOS/Android基座-》选择使用自定义基座运行-》选择手机-》运行
常见错误与解决方法
-
- iOS 自定义基座首次运行找不到iOS原生SDK FaceAISDK_Core
Analyzing dependencies CocoaPods could not find compatible versions for pod "FaceAISDK_Core": in Podfile: FaceAISDK_Core (= 2026.01.04) None of your spec sources contain a spec satisfying the dependency: `FaceAISDK_Core (= 2025.12.31)`.基本重新运行就可以了,在线打包机器有时候会无法科学上网有问题无法访问GitHub
- iOS 自定义基座首次运行找不到iOS原生SDK FaceAISDK_Core
-
- iOS 基座安装到手机后很久都是白屏/黑屏幕
控制台输出 项目 [FaceAI_API_Plugin] 已启动。请点击手机/模拟器的运行基座App(uni-app x)查看效果。 如应用未更新,请在手机上杀掉基座进程重启根据提示杀掉基座进程重启,然后点击启动2个其他App后再重新启动基本就没问题了,本情况只会在第一次安装新基座出现
- iOS 基座安装到手机后很久都是白屏/黑屏幕
-
- 炫彩活体提示光线太亮导致失败
这个基本上只能规避强光环境了,或引导用户用手遮住强烈光线,让手机彩色光能照到脸部
- 炫彩活体提示光线太亮导致失败
-
- 改动原生swift/kotlin 代码导致基座不能正常运行
只能重新制作自定义调试基座,UTS API插件使用方如果不需要修改插件底层实现尽量不用改原生代码
- 改动原生swift/kotlin 代码导致基座不能正常运行
人脸识别,活体检测状态码
人脸识别,活体检测状态码含义
public static let DEFAULT = 0 // 0 初始化状态,流程没有开始
public static let VERIFY_SUCCESS = 1 // 1 人脸识别对比成功大于设置的threshold
public static let VERIFY_FAILED = 2 // 2 人脸识别对比识别小于设置的threshold
public static let MOTION_LIVENESS_SUCCESS = 3 // 3 动作活体检测成功(基本不用,还有后续动作)
public static let MOTION_LIVENESS_TIMEOUT = 4 // 4 动作活体超时
public static let NO_FACE_MULTI = 5 // 5 多次没有检测到人脸
public static let NO_FACE_FEATURE = 6 // 6 没有对应的人脸特征值
public static let COLOR_LIVENESS_SUCCESS = 7 // 7 炫彩活体成功
public static let COLOR_LIVENESS_FAILED = 8 // 8 炫彩活体失败
public static let COLOR_LIVENESS_LIGHT_TOO_HIGH = 9 // 9 炫彩活体失败,光线亮度过高
public static let ALL_LIVENESS_SUCCESS = 10 // 10 所有的活体检测完成(包括动作和炫彩)
Copyright © 2026 FaceAISDK. All rights reserved
收起阅读 »华为统一扫码uts插件支持iOS、Android、HarmonyOS支持Component组件模式
华为统一扫码uts插件,支持uniapp/uniapp-x项目,支持三端iOS、Android、HarmonyOS(仅支持默认扫码),支持vue2/vue3,支持连续扫码,多码模式,支持Component模式(全屏、半屏扫描,自定义扫码页面)插件链接https://ext.dcloud.net.cn/plugin?id=21761 android端体验demo下载地址:https://www.pgyer.com/hwscanunix
华为统一扫码uts插件,支持uniapp/uniapp-x项目,支持三端iOS、Android、HarmonyOS(仅支持默认扫码),支持vue2/vue3,支持连续扫码,多码模式,支持Component模式(全屏、半屏扫描,自定义扫码页面)插件链接https://ext.dcloud.net.cn/plugin?id=21761 android端体验demo下载地址:https://www.pgyer.com/hwscanunix
收起阅读 »window 交叉编译 ffmpeg
https://github.com/helloword202507/android-ffmpeg-compiler
联系作者
helloword202507@163.com
🎬 FFmpeg Android 编译配置
一个用于简化FFmpeg Android库编译的图形化配置工具,支持命令行和Web界面两种使用模式。
✨ 特性
- 🖥️ 双模式支持: 命令行模式和Web图形界面
- 📱 多架构支持: arm64-v8a, armeabi-v7a, x86, x86_64
- 🎯 预设配置: 提供6种预设配置,满足不同使用场景
- ⚙️ 灵活配置: 支持自定义编解码器、格式、协议等
- 🚀 一键编译: 自动化编译流程,简化操作
- 🧹 清理工具: 内置清理工具,管理编译产物
- 📊 实时状态: Web界面实时显示编译进度
📦 预设配置
| 预设 | 描述 | 适用场景 |
|---|---|---|
| 最小版 | 仅包含基本H.264解码功能 | 简单播放器 |
| 基础版 | 常用编解码器和格式支持 | 基本视频播放应用 |
| 标准版 | 包含常用编解码器,适合大多数应用 | 通用移动应用 |
| 流媒体版 | 专为流媒体播放优化 | 在线视频播放 |
| 直播版 | 支持实时编码和推流协议 | 直播应用 |
| 完整版 | 包含所有功能的完整版本 | 专业视频处理 |
🚀 快速开始
环境要求
- Python 3.7+
- Android NDK
- MSYS2 (Windows)
- FFmpeg 源码
安装依赖
pip install -r requirements.txt
使用方式
1. Web界面模式 (推荐)
# 启动Web界面
python main.py --web
# 或使用快速启动脚本
python start_web.py
然后在浏览器中访问 http://localhost:5000
2. 命令行模式
# 使用预设配置
python main.py --preset standard
# 使用自定义配置文件
python main.py --config my_config.json
# 交互式选择
python main.py
3. 清理工具
# 清理所有文件
python main.py --clean
# 或使用专用清理脚本
python clean.py --all
📁 项目结构
ffmpeg-android-builder/
├── main.py # 主入口文件
├── start_web.py # Web界面快速启动
├── clean.py # 清理工具
├── config_presets.json # 预设配置文件
├── src/ # 源码目录
│ ├── cli/ # 命令行界面模块
│ ├── web/ # Web界面模块
│ ├── core/ # 核心功能模块
│ └── utils/ # 工具模块
├── static/ # Web界面静态资源
├── build/ # 编译输出目录
├── logs/ # 日志文件
├── android-ndk/ # Android NDK
├── ffmpeg/ # FFmpeg源码
└── msys64/ # MSYS2环境
⚙️ 配置说明
基本配置
- Android API: 目标Android API级别 (最低16)
- 输出类型: shared (动态库) 或 static (静态库)
- 目标架构: 支持的CPU架构
编解码器配置
- 解码器: 支持的视频/音频解码器
- 编码器: 支持的视频/音频编码器
- 复用器: 支持的容器格式输出
- 解复用器: 支持的容器格式输入
网络协议
支持配置各种网络协议,如HTTP、HTTPS、RTMP、HLS等
优化选项
- 禁用汇编: 禁用汇编优化以提高兼容性
- 启用PIC: 启用位置无关代码
- 禁用调试: 移除调试信息减小体积
- 启用小体积: 优化编译以减小最终库大小
🛠️ 开发说明
核心模块
- ConfigManager: 配置管理,支持预设和自定义配置
- EnvironmentManager: 环境检查和设置
- BuildManager: 编译流程管理
- CompilerManager: 编译器调用和参数生成
Web界面
基于Flask构建的Web界面,提供:
- 图形化配置界面
- 预设配置选择
- 实时编译状态
- 日志查看功能
命令行界面
提供完整的命令行操作支持:
- 交互式配置
- 批处理模式
- 配置文件支持
📝 使用示例
Web界面配置
- 启动Web界面:
python main.py --web - 在浏览器中打开配置页面
- 选择预设配置或自定义配置
- 点击"开始编译"按钮
- 查看实时编译进度和日志
命令行配置
# 使用标准预设
python main.py --preset standard
# 使用自定义配置
python main.py --config custom_config.json
# 清理编译产物
python main.py --clean
🧹 清理工具
# 清理所有文件
python clean.py --all
# 仅清理编译输出
python clean.py --build
# 仅清理临时文件
python clean.py --temp
# 仅清理构建缓存
python clean.py --cache
MSYS2 中运行
web 生成脚本后 build_ffmpeg.sh 在msys2中运行
📋 常见问题
Q: 编译失败怎么办?
A: 检查环境配置,确保Android NDK和MSYS2正确安装,查看logs目录下的日志文件。
Q: 如何添加自定义编解码器?
A: 在Web界面的自定义配置中添加,或修改配置JSON文件。
Q: 支持哪些Android版本?
A: 支持Android API 16+,推荐使用API 21+。
Q: 如何减小编译后的库大小?
A: 使用"最小版"预设,或启用"小体积优化"选项。
🤝 贡献
欢迎提交Issue和Pull Request来改进这个项目。
📄 许可证
本项目采用MIT许可证,详见LICENSE文件。
🔗 相关链接
注意: 首次使用前请确保已正确安装和配置所有依赖环境。
https://github.com/helloword202507/android-ffmpeg-compiler
联系作者
helloword202507@163.com
🎬 FFmpeg Android 编译配置
一个用于简化FFmpeg Android库编译的图形化配置工具,支持命令行和Web界面两种使用模式。
✨ 特性
- 🖥️ 双模式支持: 命令行模式和Web图形界面
- 📱 多架构支持: arm64-v8a, armeabi-v7a, x86, x86_64
- 🎯 预设配置: 提供6种预设配置,满足不同使用场景
- ⚙️ 灵活配置: 支持自定义编解码器、格式、协议等
- 🚀 一键编译: 自动化编译流程,简化操作
- 🧹 清理工具: 内置清理工具,管理编译产物
- 📊 实时状态: Web界面实时显示编译进度
📦 预设配置
| 预设 | 描述 | 适用场景 |
|---|---|---|
| 最小版 | 仅包含基本H.264解码功能 | 简单播放器 |
| 基础版 | 常用编解码器和格式支持 | 基本视频播放应用 |
| 标准版 | 包含常用编解码器,适合大多数应用 | 通用移动应用 |
| 流媒体版 | 专为流媒体播放优化 | 在线视频播放 |
| 直播版 | 支持实时编码和推流协议 | 直播应用 |
| 完整版 | 包含所有功能的完整版本 | 专业视频处理 |
🚀 快速开始
环境要求
- Python 3.7+
- Android NDK
- MSYS2 (Windows)
- FFmpeg 源码
安装依赖
pip install -r requirements.txt
使用方式
1. Web界面模式 (推荐)
# 启动Web界面
python main.py --web
# 或使用快速启动脚本
python start_web.py
然后在浏览器中访问 http://localhost:5000
2. 命令行模式
# 使用预设配置
python main.py --preset standard
# 使用自定义配置文件
python main.py --config my_config.json
# 交互式选择
python main.py
3. 清理工具
# 清理所有文件
python main.py --clean
# 或使用专用清理脚本
python clean.py --all
📁 项目结构
ffmpeg-android-builder/
├── main.py # 主入口文件
├── start_web.py # Web界面快速启动
├── clean.py # 清理工具
├── config_presets.json # 预设配置文件
├── src/ # 源码目录
│ ├── cli/ # 命令行界面模块
│ ├── web/ # Web界面模块
│ ├── core/ # 核心功能模块
│ └── utils/ # 工具模块
├── static/ # Web界面静态资源
├── build/ # 编译输出目录
├── logs/ # 日志文件
├── android-ndk/ # Android NDK
├── ffmpeg/ # FFmpeg源码
└── msys64/ # MSYS2环境
⚙️ 配置说明
基本配置
- Android API: 目标Android API级别 (最低16)
- 输出类型: shared (动态库) 或 static (静态库)
- 目标架构: 支持的CPU架构
编解码器配置
- 解码器: 支持的视频/音频解码器
- 编码器: 支持的视频/音频编码器
- 复用器: 支持的容器格式输出
- 解复用器: 支持的容器格式输入
网络协议
支持配置各种网络协议,如HTTP、HTTPS、RTMP、HLS等
优化选项
- 禁用汇编: 禁用汇编优化以提高兼容性
- 启用PIC: 启用位置无关代码
- 禁用调试: 移除调试信息减小体积
- 启用小体积: 优化编译以减小最终库大小
🛠️ 开发说明
核心模块
- ConfigManager: 配置管理,支持预设和自定义配置
- EnvironmentManager: 环境检查和设置
- BuildManager: 编译流程管理
- CompilerManager: 编译器调用和参数生成
Web界面
基于Flask构建的Web界面,提供:
- 图形化配置界面
- 预设配置选择
- 实时编译状态
- 日志查看功能
命令行界面
提供完整的命令行操作支持:
- 交互式配置
- 批处理模式
- 配置文件支持
📝 使用示例
Web界面配置
- 启动Web界面:
python main.py --web - 在浏览器中打开配置页面
- 选择预设配置或自定义配置
- 点击"开始编译"按钮
- 查看实时编译进度和日志
命令行配置
# 使用标准预设
python main.py --preset standard
# 使用自定义配置
python main.py --config custom_config.json
# 清理编译产物
python main.py --clean
🧹 清理工具
# 清理所有文件
python clean.py --all
# 仅清理编译输出
python clean.py --build
# 仅清理临时文件
python clean.py --temp
# 仅清理构建缓存
python clean.py --cache
MSYS2 中运行
web 生成脚本后 build_ffmpeg.sh 在msys2中运行
📋 常见问题
Q: 编译失败怎么办?
A: 检查环境配置,确保Android NDK和MSYS2正确安装,查看logs目录下的日志文件。
Q: 如何添加自定义编解码器?
A: 在Web界面的自定义配置中添加,或修改配置JSON文件。
Q: 支持哪些Android版本?
A: 支持Android API 16+,推荐使用API 21+。
Q: 如何减小编译后的库大小?
A: 使用"最小版"预设,或启用"小体积优化"选项。
🤝 贡献
欢迎提交Issue和Pull Request来改进这个项目。
📄 许可证
本项目采用MIT许可证,详见LICENSE文件。
🔗 相关链接
注意: 首次使用前请确保已正确安装和配置所有依赖环境。
收起阅读 »限时0.1元!!!iOS、纯血鸿蒙、安卓 获取唯一ID(UUID) 和 iOS钥匙串、鸿蒙AssetStore资产存储
# 限时促销:0.1元 (截止8月30日)。
https://ext.dcloud.net.cn/plugin?name=aper-keychainmanager
iOSKeyChain(苹果钥匙串)、鸿蒙AssetStoreKit(资产存储),卸载重装不丢失数据,可用于记录唯一ID、游客登录、用户名、密码
本插件为UTS插件,支持UniappX
包含以下功能:
- iOS KeyChain管理器(钥匙串) 读取、写入、删除
- 鸿蒙AssetStoreKit管理器(资产管理器) 读取、写入、删除
- 安卓、iOS、鸿蒙 唯一ID生成和存储(一般用于游客登录,或记住用户名、密码)
使用过程中如有 疑问 或 建议 或 新需求,欢迎进插件群交流,本插件持续更新中。。。
# 限时促销:0.1元 (截止8月30日)。
https://ext.dcloud.net.cn/plugin?name=aper-keychainmanager
iOSKeyChain(苹果钥匙串)、鸿蒙AssetStoreKit(资产存储),卸载重装不丢失数据,可用于记录唯一ID、游客登录、用户名、密码
本插件为UTS插件,支持UniappX
包含以下功能:
- iOS KeyChain管理器(钥匙串) 读取、写入、删除
- 鸿蒙AssetStoreKit管理器(资产管理器) 读取、写入、删除
- 安卓、iOS、鸿蒙 唯一ID生成和存储(一般用于游客登录,或记住用户名、密码)
使用过程中如有 疑问 或 建议 或 新需求,欢迎进插件群交流,本插件持续更新中。。。
收起阅读 »建议没有强类型语言开发经验的“攻城狮”们不要轻易尝试uts
建议没有强类型语言开发经验的“攻城狮”们不要轻易尝试uts,这都是教训啊,对于template部分,确实非常上手,在布局方面和css基本无异,即使出错也很容易解决,但是到了uts,基本写一行代码要半小时到好几个小时的时间,为什么会这样,我哭着告诉你们,太特么坑了,为了用uts开发程序,我还提前一个星期研究官方提供的文档,对数据类型要求的太严格,基本每一步都要规定数据类型,对于我这种写个十几年弱类型语言的开发者来说,每一步都是困难,浪费了七八天把app的界面都写出来了,在对接接口的时候,基本就是寸步难行啊,编译的时候你必须要掌握每种数据的类型,有的时候莫名的报错,数据类型搞不懂,书写习惯改不了,你进本连最简单的if语句都写不下去,因为会报错,没办法编译,为了能尽快把代码写下去,我写程序的时候deepseek、豆包、文心一言、通义千问必须打开,其实这些ai能解决的只是一部分少的简单的问题,在复杂的问题上面,你把所有代码都丢给它们,它们也不能帮你解决任何问题,因为ai也不能给你解决任何问题,唯一能参考的就是官方提供的uni-app x的demo。
切记切记,千万不要轻易尝试,要是抱着学习的态度去尝试是没有任何问题的,如果你想用uvue+uts开发正式项目,我劝你还是省省心吧,没有对强类型语言进行系统的学习,你连想都不要想了。
我开发半截的项目已经打算放弃了,还是改用vue和nvue吧,可怜我这端时间全部浪费了。哭死!!!!!!!
建议没有强类型语言开发经验的“攻城狮”们不要轻易尝试uts,这都是教训啊,对于template部分,确实非常上手,在布局方面和css基本无异,即使出错也很容易解决,但是到了uts,基本写一行代码要半小时到好几个小时的时间,为什么会这样,我哭着告诉你们,太特么坑了,为了用uts开发程序,我还提前一个星期研究官方提供的文档,对数据类型要求的太严格,基本每一步都要规定数据类型,对于我这种写个十几年弱类型语言的开发者来说,每一步都是困难,浪费了七八天把app的界面都写出来了,在对接接口的时候,基本就是寸步难行啊,编译的时候你必须要掌握每种数据的类型,有的时候莫名的报错,数据类型搞不懂,书写习惯改不了,你进本连最简单的if语句都写不下去,因为会报错,没办法编译,为了能尽快把代码写下去,我写程序的时候deepseek、豆包、文心一言、通义千问必须打开,其实这些ai能解决的只是一部分少的简单的问题,在复杂的问题上面,你把所有代码都丢给它们,它们也不能帮你解决任何问题,因为ai也不能给你解决任何问题,唯一能参考的就是官方提供的uni-app x的demo。
切记切记,千万不要轻易尝试,要是抱着学习的态度去尝试是没有任何问题的,如果你想用uvue+uts开发正式项目,我劝你还是省省心吧,没有对强类型语言进行系统的学习,你连想都不要想了。
我开发半截的项目已经打算放弃了,还是改用vue和nvue吧,可怜我这端时间全部浪费了。哭死!!!!!!!
收起阅读 »Shiply Android应用内升级:灵活高效的版本发布解决方案
Shiply Android应用内升级功能为开发者提供了一套完整的版本发布管理工具,支持灰度放量和立即全量等发布模式,帮助开发者在确保应用稳定性的同时,高效完成新版本推送。
核心功能亮点
灰度发布能力
- 精准控制:逐步向部分用户推送新版本,降低发布风险
- 智能匹配:基于用户画像、设备特征等维度进行精准下发
- 实时监控:关键指标动态追踪,确保发布过程可控
全量升级支持
- 一键推送:快速完成全量用户版本覆盖
- 强制更新:确保关键版本及时渗透
- 版本追溯:完整记录发布历史,支持快速排查定位问题
插件地址:https://ext.dcloud.net.cn/plugin?id=21913
Shiply Android应用内升级功能为开发者提供了一套完整的版本发布管理工具,支持灰度放量和立即全量等发布模式,帮助开发者在确保应用稳定性的同时,高效完成新版本推送。
核心功能亮点
灰度发布能力
- 精准控制:逐步向部分用户推送新版本,降低发布风险
- 智能匹配:基于用户画像、设备特征等维度进行精准下发
- 实时监控:关键指标动态追踪,确保发布过程可控
全量升级支持
- 一键推送:快速完成全量用户版本覆盖
- 强制更新:确保关键版本及时渗透
- 版本追溯:完整记录发布历史,支持快速排查定位问题
插件地址:https://ext.dcloud.net.cn/plugin?id=21913
收起阅读 »Uniapp cli项目引用UTS插件(基于uniapp x)的一些异常问题
1.[plugin:uni:uts-uni_modules] compiler.compile is not a function
2.createUniXKotlinCompilerOnce is not a function
3.Definite Assignment Assertions is not supported.
我当前的环境:
HBuilderX版本:4.24
cli 的@dcloudio/uni-app版本: 3.0.0-4020420240722002
首先检查package.json中的@dcloudio/uni-uts-v1是否和别的@dcloudio/uni-xxx版本不一致,需要保持一致
如果有异常就执行下hx 菜单栏 -> 工具 -> 插件安装 -> 卸载重装uni-app(vue3),最好是让hx自动触发重新下载
上面的执行后还有问题可以尝试把uts相关的都删除重新安装一次,感觉像是有安装顺序的问题,我全部删除重新安装后就没问题了,不知道是啥原因造成的
#package.json的部分配置
"devDependencies": {
"@dcloudio/types": "3.4.8",
"@dcloudio/uni-automator": "3.0.0-4020420240722002",
"@dcloudio/uni-cli-shared": "3.0.0-4020420240722002",
"@dcloudio/uni-stacktracey": "3.0.0-4020420240722002",
###这个需要和其他的保持一样
"@dcloudio/uni-uts-v1": "3.0.0-4020420240722002",
###
"@dcloudio/vite-plugin-uni": "3.0.0-4020420240722002",
...
},
https://ask.dcloud.net.cn/question/195186
https://ask.dcloud.net.cn/question/202241
1.[plugin:uni:uts-uni_modules] compiler.compile is not a function
2.createUniXKotlinCompilerOnce is not a function
3.Definite Assignment Assertions is not supported.
我当前的环境:
HBuilderX版本:4.24
cli 的@dcloudio/uni-app版本: 3.0.0-4020420240722002
首先检查package.json中的@dcloudio/uni-uts-v1是否和别的@dcloudio/uni-xxx版本不一致,需要保持一致
如果有异常就执行下hx 菜单栏 -> 工具 -> 插件安装 -> 卸载重装uni-app(vue3),最好是让hx自动触发重新下载
上面的执行后还有问题可以尝试把uts相关的都删除重新安装一次,感觉像是有安装顺序的问题,我全部删除重新安装后就没问题了,不知道是啥原因造成的
#package.json的部分配置
"devDependencies": {
"@dcloudio/types": "3.4.8",
"@dcloudio/uni-automator": "3.0.0-4020420240722002",
"@dcloudio/uni-cli-shared": "3.0.0-4020420240722002",
"@dcloudio/uni-stacktracey": "3.0.0-4020420240722002",
###这个需要和其他的保持一样
"@dcloudio/uni-uts-v1": "3.0.0-4020420240722002",
###
"@dcloudio/vite-plugin-uni": "3.0.0-4020420240722002",
...
},
https://ask.dcloud.net.cn/question/195186
https://ask.dcloud.net.cn/question/202241
uts组件插件 使用this.$emit 时提示 fireEvent must be called by main thread
要在 emit 触发的外层使用
UTSAndroid.getDispatcher("main").async(function (_) {
}, null)
包括(必须在第一层)
UTSAndroid.getDispatcher("main").async(function (_) {
this.$emit('disconnectCallBack')
}, null) 要在 emit 触发的外层使用
UTSAndroid.getDispatcher("main").async(function (_) {
}, null)
包括(必须在第一层)
UTSAndroid.getDispatcher("main").async(function (_) {
this.$emit('disconnectCallBack')
}, null) 收起阅读 »
uts与uniapp踩坑集锦
自定义类型永远不要直接定义在函数声明中,特别是长一点的自定义类型。类型定义要设置在专门的声明文件中
类implements接口编辑器自动补全的代码,只留下函数名,(),{},这三个东西就行,其他的删掉自己写。记得 public和override这两个修饰符
uts暴露给js的函数的参数,参数类型不要设置成复杂的嵌套,uniapp1.0下会有问题。
uts传递数组,使用Array接受,元素类型后续再转化
uts export * from “...”再导出类,在js环境调用时报错
uts类没有重载函数能力,可让函数参数的类型为一个对象(UTSJSONOBJECT 或 types),对象属性可为空来规避。亦可直接写2个不同名的函数
uni.navigateBack函数,在网页中,刷新页面,页面堆栈会被清空,这时使用该api只会不停relauch页面,你会发现此时与log一起使用的话,log不见了,灵异事件,不好调试代码,不建议在网页应用中使用该api。相关源码如下
// 真正的h5平台源码,此时 浏览器没有“上一页”可返回,所以浏览器的行为是:刷新当前页面(而不是跳转)
getApp().$router.go(-args.delta);
// \uni-app\packages\uni-app-plus\src\service\api\route\navigateBack.ts,app-plus平台相关源码,可以辅助理解,reLaunchEntryPage这句导致的relauch,api就是选择了原地刷新页面
else if (isDirectPage(page)) {
reLaunchEntryPage()
} 自定义类型永远不要直接定义在函数声明中,特别是长一点的自定义类型。类型定义要设置在专门的声明文件中
类implements接口编辑器自动补全的代码,只留下函数名,(),{},这三个东西就行,其他的删掉自己写。记得 public和override这两个修饰符
uts暴露给js的函数的参数,参数类型不要设置成复杂的嵌套,uniapp1.0下会有问题。
uts传递数组,使用Array接受,元素类型后续再转化
uts export * from “...”再导出类,在js环境调用时报错
uts类没有重载函数能力,可让函数参数的类型为一个对象(UTSJSONOBJECT 或 types),对象属性可为空来规避。亦可直接写2个不同名的函数
uni.navigateBack函数,在网页中,刷新页面,页面堆栈会被清空,这时使用该api只会不停relauch页面,你会发现此时与log一起使用的话,log不见了,灵异事件,不好调试代码,不建议在网页应用中使用该api。相关源码如下
// 真正的h5平台源码,此时 浏览器没有“上一页”可返回,所以浏览器的行为是:刷新当前页面(而不是跳转)
getApp().$router.go(-args.delta);
// \uni-app\packages\uni-app-plus\src\service\api\route\navigateBack.ts,app-plus平台相关源码,可以辅助理解,reLaunchEntryPage这句导致的relauch,api就是选择了原地刷新页面
else if (isDirectPage(page)) {
reLaunchEntryPage()
} 收起阅读 »




