loading

如何判断一个应用是否是系统应用还是普通应用?

  • Home
  • Blog
  • 如何判断一个应用是否是系统应用还是普通应用?

如何判断一个应用是否是系统应用还是普通应用?

C:\Users\Administrator>adb shell pm list packages -f | find "com.kte.uniformscan"

package:/data/app/~~ozs-X4BdfGX_RbssBos2OA==/com.kte.uniformscan--_m0G4gHA2mMy4CKl3gbaA==/base.apk=com.kte.uniformscan

你提供的这条信息非常关键:

perl

CopyEdit

package:/data/app/~~.../com.kte.uniformscan.../base.apk=com.kte.uniformscan

✅ 结论:你的 com.kte.uniformscan 是一个 普通第三方 App,不是系统 App。

🔒 为什么这会导致你发不出系统广播?

你的日志中报错如下:

arduino

CopyEdit

E Sending non-protected broadcast android.intent.action.camera.open from system ... ActivityManagerService.checkBroadcastFromSystem: Not allowed

这是因为你尝试发送的是一个 系统广播(如 android.intent.action.camera.open),而你当前这个 App:

✅ 安装在 /data/app/ 下,属于普通用户应用;

❌ 不是系统 App;

❌ 没有使用系统签名(如 platform.keystore);

❌ 没有放到 /system/priv-app/ 或 /system/app/;

❌ 即使你加了权限声明也不会生效(系统广播的发送权限不是靠声明控制的,而是系统签名或系统路径)。

✅ 正确工程为什么可以发系统广播?

因为它 可能是系统预装 App,安装在如下路径:

bash

CopyEdit

/system/priv-app/yourApp/

或它是使用了 系统签名(如 platform.keystore) 编译的。

🔧 解决方案:

你有三种可行的选择:

✅ 方案一:把 App 安装成系统 App(推荐测试用)

如果你能控制设备(有 root 权限):

bash

CopyEdit

adb root adb remount adb push yourApp.apk /system/priv-app/yourApp/ adb shell chmod 644 /system/priv-app/yourApp/yourApp.apk adb reboot

重启后重新安装,该 App 将具有系统权限,可以发出系统广播。