Android中的系统应用程序
Android究竟如何确定应用程序是否具有root权限的system application
?Android中的系统应用程序
我知道对于这样的应用程序,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
为他们启用?
如果一个应用程序是一个“系统应用”以root权限
它必须与正确的签名,体系认证证书。
在Android
器件中的应用程序可以是系统应用或用户应用程式,这仅仅是基于它们的安装位置。
- 用户应用被放置在Android手机,它是用于用户数据和应用程序提供的内部存储器的一部分的
/data
分区。 - 系统应用程序是安装在
/system
分区中的应用程序。
哇......就这样?大!听起来很简单...我该怎么做?
可能听起来很容易,但它不是,你将需要:
- 根你的手机
- 添加有效签名的安全证书
- 授予权限
- 而更头疼..
但也不是不可能的,check this tutorial。
啊哈,我之前读过PackageManagerService.java中的代码。它有一个观察者来检查/system/priv-app/
目录中的任何文件是否已更改。如果有新的apk文件,它会安装应用程序。然后,系统将设置pkgFlags
与ApplicationInfo.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;
}
....
}
系统应用程序没有“root权限”。具有root访问权限并安装在'/ system'分区上并不相关。 – CommonsWare
@CommonsWare在这种情况下,我实际上在两者之间感到困惑,并希望获得关于这两者的完整信息。每种方式的特征/特点以及如何将某个应用程序转换为系统应用程序和/或向其提供root权限?你能否澄清我的疑问,或者至少重定向我? – darthvading
@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