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
?
答案 0 :(得分:1)
如果应用程序是具有root权限的“系统应用程序”
必须使用正确的系统证书进行签名。
答案 1 :(得分:0)
Android
设备中的应用可以是系统应用或用户应用,仅基于其安装位置。
/data
分区中,该分区是内部存储器可用于用户数据和应用程序的一部分。/system
分区中安装的应用程序。哇......这就是全部?大!听起来很简单......我怎么能这样做?
听起来很容易,但事实并非如此,你需要:
但也不是不可能,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;
}
....
}