看到 build completed successfully 且产物已经输出到了 out/target/product/qssi/system/priv-app/RemoteControl/RemoteControl.apk
下面为您提供一套免刷全量镜像快速调试 以及烧录后完整验证的标准流程,帮助您一步步验证:
- 是否真正以"系统特权应用"身份被系统识别;
- 开机自启、保活、特权权限、双目视频分屏等核心功能是否正常。
一、 快速推送验证
如果你手头有开机可连 ADB 的工程样机,并且是 userdebug 版本,可以通过 adb remount 直接把刚才编译出来的产物推送到手机上测试,无需等待漫长的整机烧录。
1. 推送 APK 和 权限白名单
在你的 Linux 编译服务器终端执行:
bash
# 1. 获取 root 并重新挂载 system 分区为可读写
adb root
adb remount
# 2. 推送特权 APK
adb shell mkdir -p /system/priv-app/RemoteControl
adb push out/target/product/qssi/system/priv-app/RemoteControl/RemoteControl.apk /system/priv-app/RemoteControl/
# 3. 核心:推送权限白名单 XML
adb push out/target/product/qssi/system/etc/permissions/privapp-permissions-remote.xml /system/etc/permissions/
# 4. 修复文件权限(防止开机读不到)
adb shell chmod 644 /system/priv-app/RemoteControl/RemoteControl.apk
adb shell chmod 644 /system/etc/permissions/privapp-permissions-remote.xml
# 5. 重启设备生效
adb reboot
二、 核心验证 1:验证是否具备"特权系统 APP"身份
设备重启完成后,执行以下 ADB 命令检查系统识别状态:
1. 验证安装路径是否为系统特权路径
bash
adb shell pm path com.xxxx.robot
-
预期输出 :
textpackage:/system/priv-app/RemoteControl/RemoteControl.apk(如果显示的是
/data/app/...说明还是普通第三方安装,必须显示/system/priv-app/...才代表是预置特权)
2. 验证特权标志位(PRIVILEGED)
bash
adb shell dumpsys package com.xxxx.robot | grep -E "flags=|privFlags="
- 预期输出 中必须同时包含:
FLAG_SYSTEMPRIVATE_FLAG_PRIVILEGED
3. 验证特权白名单是否加载无报错
bash
adb logcat -d -s PackageManager | grep -i "Privileged permission"
- 预期输出 :返回为空(没有任何 warning 或 error),说明申请的
BATTERY_STATS、DELETE_PACKAGES、WRITE_SECURE_SETTINGS等特权权限已被系统白名单完全放行。
三、 核心验证 2:验证开机自启与置顶能力
我们之前在 RootWindowContainer.java 修改了系统级拉起逻辑,并且在 App 中设置了 persistent="true"。
1. 验证开机自动启动时延
-
执行
adb reboot重启设备。 -
观察设备屏幕:开机动画一结束,具微遥控 APP(MainActivity)应直接呈现在最前台。
-
通过抓取启动日志确认耗时:
bashadb logcat -d | grep -E "ATMS_Kiosk|Displayed com.xxxx.robot"- 会看到系统打印
Kiosk: Auto-started RemoteControlApp on top of Launcher,耗时通常在开机完成后 200ms~500ms 内呈现。
- 会看到系统打印
2. 验证退回原生桌面与再进入
- 在具微遥控 APP 界面按 Home 键 或执行底部上滑手势 :
- 预期效果 :应能正常平滑退回到 Android 原生桌面(Launcher3),不会被锁死或强行弹回。
- 点击原生桌面上的具微遥控图标:
- 预期效果:秒级切回遥控主操作台。
四、 核心验证 3:验证常驻保活与防杀死(Persistent 机制)
因为在 AndroidManifest.xml 中配置了 android:persistent="true",系统内核赋予了最高保活级别。
1. 查看进程 OOM 优先级
bash
adb shell ps -ef | grep com.micbotics.robot
记下该进程的 PID(假设是 2345),然后查看它的 oom_score_adj:
bash
adb shell cat /proc/2345/oom_score_adj
- 预期输出 :一个很小的负数(通常是
-800或-700)。 - 说明系统已将其标记为核心系统常驻进程,无论是打开大型游戏还是内存爆满,LowMemoryKiller 绝对不会杀死它。
2. 模拟异常崩溃自动复活
尝试强行杀死该进程:
bash
adb shell kill -9 2345
- 预期效果 :观察
ps -ef,系统ActivityManagerService会在 1 秒内自动重新 fork 出新的进程 并恢复运行。
五、 核心验证 4:业务功能验证(双目分屏与全盘文件访问)
1. 验证所有文件访问权限(MANAGE_EXTERNAL_STORAGE)
检查 App 是否无需弹窗直接拥有文件管理能力:
bash
adb shell appops get com.micbotics.robot MANAGE_EXTERNAL_STORAGE
- 预期输出 :
Uid mode: MANAGE_EXTERNAL_STORAGE: allow
2. 验证双目摄像头视频硬解渲染性能
连接机器狗图传,进入双目分屏界面:
-
观察两个 SurfaceView(主视/副视)是否能同时流畅出流。
-
通过 GPU / SurfaceFlinger 监控是否存在丢帧或中间合成延迟:
bashadb shell dumpsys SurfaceFlinger --latency com.micbotics.robot/com.micbotics.robot.activity.MainActivity -
检查是否有硬件解码通道报错:
bashadb logcat -s CCodec MediaCodec- 确认双路均走的是硬件解码器(如
c2.qti.avc.decoder/OMX.qcom.video.decoder.avc),无卡顿与显存溢出。
- 确认双路均走的是硬件解码器(如
按照上述步骤全部跑通,即可证明您的特权 APP 预置与系统定制完全成功,达到出厂交付标准!