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
| 归档时间: |
|
| 查看次数: |
57535 次 |
| 最近记录: |