2015-05-29 102 views
0

Android究竟如何确定应用程序是否具有root权限的system applicationAndroid中的系统应用程序

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

我搜索了AOSP中PackageMangerService.java的源代码,我观察到如果共享用户标识为android.uid.system,那么该应用程序将被指定为FLAG_SYSTEM

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

+1

系统应用程序没有“root权限”。具有root访问权限并安装在'/ system'分区上并不相关。 – CommonsWare

+0

@CommonsWare在这种情况下,我实际上在两者之间感到困惑,并希望获得关于这两者的完整信息。每种方式的特征/特点以及如何将某个应用程序转换为系统应用程序和/或向其提供root权限?你能否澄清我的疑问,或者至少重定向我? – darthvading

+0

@darthvading没有应用程序将具有root权限。如果一个设备已经被植入,一个应用程序可以调用su(如果已安装)以root身份执行操作,但这些应用程序以标准用户身份运行。 * system *是android中定义的特殊用户,拥有额外的权限。 http://androidxref.com/5.1.0_r1/xref/system/core/include/private/android_filesystem_config.h#36描述了特殊用户的映射。 如果它是一个没有root的工厂设备,那么您将无法以系统用户的身份安装应用程序。 – odexcide

回答

1

如果一个应用程序是一个“系统应用”以root权限

它必须与正确的签名,体系认证证书。

0

Android器件中的应用程序可以是系统应用用户应用程式,这仅仅是基于它们的安装位置

  • 用户应用被放置在Android手机,它是用于用户数据和应用程序提供的内部存储器的一部分的/data分区。
  • 系统应用程序是安装在/system分区中的应用程序。

哇......就这样?大!听起来很简单...我该怎么做?

可能听起来很容易,但它不是,你将需要:

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

但也不是不可能的,check this tutorial

0

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

以下是PackageManagerService的代码的Android 5.0:

private PackageParser.Package scanPackageLI(File scanFile, int parseFlags, int scanFlags, 
     long currentTime, UserHandle user) { 
    .... 
    if (locationIsPrivileged(scanFile)) { 
     updatedPkg.pkgFlags |= ApplicationInfo.FLAG_PRIVILEGED; 
    } 
    .... 
}