如何验证App预置为特权App功能正常?

看到 build completed successfully 且产物已经输出到了 out/target/product/qssi/system/priv-app/RemoteControl/RemoteControl.apk

下面为您提供一套免刷全量镜像快速调试 以及烧录后完整验证的标准流程,帮助您一步步验证:

  1. 是否真正以"系统特权应用"身份被系统识别
  2. 开机自启、保活、特权权限、双目视频分屏等核心功能是否正常

一、 快速推送验证

如果你手头有开机可连 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
  • 预期输出

    text 复制代码
    package:/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_SYSTEM
    • PRIVATE_FLAG_PRIVILEGED

3. 验证特权白名单是否加载无报错

bash 复制代码
adb logcat -d -s PackageManager | grep -i "Privileged permission"
  • 预期输出 :返回为空(没有任何 warning 或 error),说明申请的 BATTERY_STATSDELETE_PACKAGESWRITE_SECURE_SETTINGS 等特权权限已被系统白名单完全放行。

三、 核心验证 2:验证开机自启与置顶能力

我们之前在 RootWindowContainer.java 修改了系统级拉起逻辑,并且在 App 中设置了 persistent="true"

1. 验证开机自动启动时延

  1. 执行 adb reboot 重启设备。

  2. 观察设备屏幕:开机动画一结束,具微遥控 APP(MainActivity)应直接呈现在最前台

  3. 通过抓取启动日志确认耗时:

    bash 复制代码
    adb logcat -d | grep -E "ATMS_Kiosk|Displayed com.xxxx.robot"
    • 会看到系统打印 Kiosk: Auto-started RemoteControlApp on top of Launcher,耗时通常在开机完成后 200ms~500ms 内呈现。

2. 验证退回原生桌面与再进入

  1. 在具微遥控 APP 界面按 Home 键 或执行底部上滑手势
    • 预期效果 :应能正常平滑退回到 Android 原生桌面(Launcher3),不会被锁死或强行弹回
  2. 点击原生桌面上的具微遥控图标:
    • 预期效果:秒级切回遥控主操作台。

四、 核心验证 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. 验证双目摄像头视频硬解渲染性能

连接机器狗图传,进入双目分屏界面:

  1. 观察两个 SurfaceView(主视/副视)是否能同时流畅出流。

  2. 通过 GPU / SurfaceFlinger 监控是否存在丢帧或中间合成延迟:

    bash 复制代码
    adb shell dumpsys SurfaceFlinger --latency com.micbotics.robot/com.micbotics.robot.activity.MainActivity
  3. 检查是否有硬件解码通道报错:

    bash 复制代码
    adb logcat -s CCodec MediaCodec
    • 确认双路均走的是硬件解码器(如 c2.qti.avc.decoder / OMX.qcom.video.decoder.avc),无卡顿与显存溢出。

按照上述步骤全部跑通,即可证明您的特权 APP 预置与系统定制完全成功,达到出厂交付标准!

相关推荐
律宏阔1 小时前
两台 Android 开发板的硬件序列号完全相同,如何使用 ADB 连接其中的一台?
android
律宏阔1 小时前
用 KSP + Hilt 自动注入 Android ViewBinding
android
AI2中文网2 小时前
Ai2 Starter 新版上线:Android 15、Hyper-V 与更快的模拟器体验
android
挂科边缘3 小时前
Android Studio 保姆级安装教程,Windows 电脑上安装 Android Studio
android·windows·android studio
Danny_姜3 小时前
Android Studio Quail 4 稳定版发布:本地 Gemma 4 + Android Skills
android·ide·android studio
平头哥AI13 小时前
Day 22 _ 包装错误别丢链_%w、errors.Is 与 errors.As
android·服务器·学习·golang·go
聚美智数14 小时前
图片广告检测-图片审核-图片广告识别-图像广告检测
android
早睡早起身体好12316 小时前
用 XGrammar 约束大模型工具调用:解决参数为空的问题
android·人工智能·神经网络·机器学习·自然语言处理·vllm
大佐不会说日语~18 小时前
Android 16 下 uni-app APP 提示“网络连接失败”的排障与修复
android·uni-app