在 UniApp 开发桌面应用的过程中,很多场景需要实现设备开机后应用自动启动的功能,比如工业控制终端、自助服务设备、专用办公终端等。但由于 UniApp 跨平台的特性,直接调用原生系统能力存在一定门槛,尝试多款第三方原生插件后效果不佳,最终摸索出一套无需依赖原生插件、通过配置原生清单文件的曲线救国方案,亲测有效,特此整理分享,帮助同类型开发需求的同学避坑。
一、实现原理
Android 系统的开机自启动核心依赖两个原生能力:
- 声明开机完成广播接收权限(
RECEIVE_BOOT_COMPLETED),让应用能监听到系统开机完成的广播事件; - 在
AndroidManifest.xml中配置应用入口的 Intent 过滤器,让系统开机后能通过广播唤起应用主页面;UniApp 作为基于 Android 原生壳的跨平台框架,支持自定义AndroidManifest.xml覆盖默认配置,这也是本次方案的核心基础,无需开发或引入原生插件,纯配置即可实现。
二、前置准备
- 开发工具:HBuilderX(确保为稳定版,避免配置兼容问题);
- 项目信息:提前确认你的 UniApp 项目包名 (在
manifest.json-> 基础配置 -> 应用 ID 中查看,格式如com.xxx.xxx),后续配置需直接替换; - 打包方式:本次方案仅支持云打包(本地打包需额外配置原生壳,云打包会自动融合自定义配置)。
三、详细实现步骤
步骤 1:自定义 AndroidManifest.xml 文件

- 打开 HBuilderX,找到你的 UniApp 项目根目录(与
pages、manifest.json同级); - 右键根目录 -> 新建 -> 自定义文件,严格输入文件名 :
AndroidManifest.xml(注意大小写敏感,不能多字、少字,否则配置不生效); - 点击创建,将以下代码复制到新建的
AndroidManifest.xml中,替换代码中的「你的包名」 为实际项目包名:
XML
<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:compileSdkVersion="33" android:compileSdkVersionCodename="13" package="你的包名" platformBuildVersionCode="33" platformBuildVersionName="13">
<application android:allowBackup="false" android:allowClearUserData="true" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:debuggable="false" android:extractNativeLibs="true" android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name" android:largeHeap="true" android:name="io.dcloud.application.DCloudApplication" android:supportsRtl="true" android:usesCleartextTraffic="true">
<activity android:configChanges="fontScale|keyboard|keyboardHidden|mcc|mnc|navigation|orientation|screenLayout|screenSize|smallestScreenSize" android:exported="true" android:hardwareAccelerated="true" android:label="@string/app_name" android:name="io.dcloud.PandoraEntry" android:screenOrientation="user" android:theme="@style/DCloudTranslucentTheme" android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
<category android:name="android.intent.category.HOME"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
</activity>
</application>
</manifest>
步骤 2:声明开机自启动权限
- 打开项目根目录的
manifest.json文件,切换到源码视图(顶部标签栏「源码视图」选项); - 在源码视图中,找到
"android"->"permission"节点(若无则手动创建),添加开机完成广播接收权限,代码如下:
javascript
{
"appid": "你的应用ID",
"name": "应用名称",
"android": {
"permission": [
"<uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\"/>"
]
}
}
✅ 关键注意:权限字符串中的双引号需要用\转义,否则会导致manifest.json格式错误,云打包失败。
步骤 3:云打包生成可执行应用
- 确认
AndroidManifest.xml包名替换正确、manifest.json权限添加无误后,保存所有文件; - 在 HBuilderX 中,右键项目根目录 -> 发行 -> 原生 App - 云打包;
- 云打包配置页面:选择合适的打包环境(测试包 / 正式包)、填写安卓签名信息(若无签名可选择「使用公共测试证书」,仅用于测试);
- 点击「开始打包」,等待打包完成后,下载生成的安卓安装包(
.apk文件)。
四、测试验证(在模拟器上测试的)

设置成主屏幕应用即可自动开启APP
五、注意事项
- 包名一致性:
AndroidManifest.xml中的package属性必须与manifest.json中的应用 ID(包名)完全一致,否则会导致权限失效、应用无法启动; - 系统兼容性:本次配置基于 Android 13(API 33),向下兼容大部分主流 Android 版本(Android 7.0+),低版本系统可适当调整
compileSdkVersion和platformBuildVersionCode; - 厂商限制:部分国产手机厂商(如小米、华为、vivo)对开机自启动做了额外限制,需在设备的「设置 - 应用管理」中,为你的应用开启「开机自启动」权限,否则配置可能不生效;
- 调试模式:
AndroidManifest.xml中android:debuggable="false"为正式包配置,若需测试可改为true,正式发布时建议保持false; - 仅支持 Android:本次方案为 Android 平台专属,UniApp 桌面应用的 Windows/macOS 端开机自启动需单独配置系统自启项,与本次方案无关。
六、总结
本次 UniApp 桌面应用的 Android 开机自启动方案,核心是利用 UniApp 对原生AndroidManifest.xml的自定义支持,结合 Android 原生开机广播机制,实现了无原生插件、纯配置化的快速实现,避开了原生插件开发、引入、兼容的一系列问题,适合大多数无需复杂原生能力的 UniApp 项目。
核心要点可概括为 3 步:自定义清单文件配置入口、声明开机广播权限、云打包验证,整个过程无需编写原生代码,对前端开发同学非常友好。同时需注意包名一致性、厂商权限限制等细节,确保方案在不同设备上稳定生效。
如果你的 UniApp 项目也有开机自启动的需求,不妨按照本文步骤尝试,亲测能解决大部分场景的问题,相比引入第三方插件,该方案更轻量、更易维护。