Android中的系统应用程序

时间:2015-05-29 11:59:23

标签: java android android-framework android-applicationinfo

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

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

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

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

3 个答案:

答案 0 :(得分:1)

  

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

必须使用正确的系统证书进行签名。

答案 1 :(得分:0)

Android设备中的应用可以是系统应用用户应用,仅基于其安装位置

  • 用户应用程序放置在Android手机的/data分区中,该分区是内部存储器可用于用户数据和应用程序的一部分。
  • 系统应用程序是/system分区中安装的应用程序。
  哇......这就是全部?大!听起来很简单......我怎么能这样做?

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

  • Root you phone
  • 添加有效的签名安全证书
  • 授予权限
  • 更令人头疼......

但也不是不可能,check this tutorial

答案 2 :(得分: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;
    }
    ....
}