0

Android 究竟如何确定应用程序是否system application具有 root 权限?

我知道对于此类应用程序,ApplicationInfo.FLAG_SYSTEM将启用,并且这些应用程序必须"android.uid.system"在其Manifest文件中声明共享用户 ID。除此之外,还有另一个标准,位于其中的应用程序/system/app也应被视为系统应用程序。

我在 AOSP 中搜索了 PackageMangerService.java 的源代码,我发现如果共享用户 id 是,android.uid.system则应用程序被分配标志为FLAG_SYSTEM.

但我想,可用的应用程序/system/app不包含共享用户 ID,android.uid.system那么他们如何FLAG_SYSTEM为他们启用此标志?

4

3 回答 3

1

如果应用程序是具有 root 权限的“系统应用程序”

它必须用正确的系统证书签名。

于 2015-05-29T12:04:48.040 回答
0

设备中的应用程序Android可以是系统应用程序用户应用程序,这仅取决于它们的安装位置

  • 用户应用程序放置在/dataAndroid 手机的分区中,该分区是内部存储器的一部分,可供用户数据和应用程序使用。
  • 系统应用程序是安装在/system分区中的应用程序。

哇……就这些?伟大的!听起来很简单……我该怎么做?

听起来可能很容易,但事实并非如此,您需要:

  • 根你的手机
  • 添加有效的签名安全证书
  • 授予权限
  • 还有更头疼的...

但也不是不可能,请查看本教程

于 2015-05-29T12:07:27.223 回答
0

啊哈,我之前看过PackageManagerService.java中的代码。它有一个观察者来检查目录中的任何文件是否/system/priv-app/已更改。如果有新的 apk 文件,它将安装该应用程序。然后系统将pkgFlags设置ApplicationInfo.FLAG_PRIVILEGED

以下是Android 5.0中PackageManagerService中的代码:

private PackageParser.Package scanPackageLI(File scanFile, int parseFlags, int scanFlags,
        long currentTime, UserHandle user) {
    ....
    if (locationIsPrivileged(scanFile)) {
        updatedPkg.pkgFlags |= ApplicationInfo.FLAG_PRIVILEGED;
    }
    ....
}
于 2015-05-30T18:06:20.763 回答