Android上的系统应用和特权应用有什么区别?

And*_* T. 59 android android-source

所以在4.3中有一个系统应用程序的概念.放入的APK /system/app被授予系统权限.从4.4开始,有一个新的"特权应用程序"概念.特权应用程序存储在/system/priv-app目录中,似乎有不同的对待.如果你查看下面的AOSP源代码PackageManagerService,你会看到新的方法,如

static boolean locationIsPrivileged(File path) {
    try {
        final String privilegedAppDir = new File(Environment.getRootDirectory(), "priv-app")
                .getCanonicalPath();
        return path.getCanonicalPath().startsWith(privilegedAppDir);
    } catch (IOException e) {
        Slog.e(TAG, "Unable to access code path " + path);
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

所以这里是一个不同的情况的例子.

public final void addActivity(PackageParser.Activity a, String type) {
...
if (!systemApp && intent.getPriority() > 0 && "activity".equals(type)) {
                intent.setPriority(0);
                Log.w(TAG, "Package " + a.info.applicationInfo.packageName + " has activity "
                        + a.className + " with priority > 0, forcing to 0");
            }
...
Run Code Online (Sandbox Code Playgroud)

这会影响未定义为系统应用程序的任何活动的优先级.这似乎暗示您不能向优先级高于0的包管理器添加活动,除非您是系统应用程序.这并不会,据我可以告诉排除特权的应用程序(有很多的逻辑在这里,我可能是错的).

我的问题是这究竟是什么意思?如果我的应用程序具有特权,但不是系统,那会有什么不同?在PackageManagerService您可以找到系统和特权应用程序之间不同的各种事物,它们并不完全相同.在特权应用程序背后应该有某种意识形态,否则他们会说:

if locationIsPrivileged: app.flags |= FLAG_SYSTEM
Run Code Online (Sandbox Code Playgroud)

并完成了它.这是一个新概念,我认为,对于从4.4开始进行AOSP开发的人来说,了解这些应用程序之间的区别非常重要.

And*_* T. 77

因此,经过一些挖掘,很明显,priv-app中的应用程序有资格获得系统权限,就像旧应用程序通过系统应用程序有资格申请系统权限一样.我能找到的唯一官方Google文档以提交消息的形式出现:提交哈希:ccbf84f44c9e6a5ed3c08673614826bb237afc54

有些系统应用程序比其他应用程序更多

"signatureOrSystem"权限不再适用于驻留在/ system分区中的所有应用程序.相反,有一个新的/ system/priv-app目录,只有那些APK在该目录中的应用程序才允许使用signatureOrSystem权限而不共享平台证书.这将减少系统捆绑应用程序可能利用的表面区域,以尝试访问受权限保护的操作.

ApplicationInfo.FLAG_SYSTEM标志继续表示文档中的内容:它表示应用程序apk已捆绑在/ system分区上.引入了一个新的隐藏标志FLAG_PRIVILEGED,它反映了访问这些权限的实际权利.

更新:自Android 8.0以来,随着Privileged Permission Whitelisting的增加,priv-app略有变化.除了处于priv-app之外,还必须将您的应用添加到白名单中以获得各种系统权限.有关这方面的信息,请访问:https://source.android.com/devices/tech/config/perms-whitelist

  • 系统/应用中的应用没有特殊权限.它们与第三方应用程序没有区别,除非它们使用系统密钥签名(因此SigOrSystem检查).至于有帮助的方法,各种各样.我开始使用priv-app进行grepping,然后将其关注到PackageManagerService,现在引用了Privilleged包. (13认同)
  • 如果应用程序具有特权(在priv-app文件夹中)并且应用程序在其清单中请求权限,则它将获得它.请注意,获得特权将允许您获得系统权限,但它不会授予您"签名"权限,除非您使用与拥有权限的实体相同的密钥进行签名(即INTERACT_ACROSS_USERS_FULL是签名权限,您还必须用系统密钥签名)@ Mr.Hyde (5认同)
  • @Farhan LOCAL_PRIVILEGED_MODULE:= true (4认同)
  • 放入系统/应用程序的@Jake应用程序通常是您可能希望拥有较少权限的内容.例如,您可能不希望您的电子邮件客户端或随机供应商英国媒体报道软件能够更改您的系统安全设置. (2认同)