Android 4.4起引入了/system/priv-app目录概念,那么它和原来的/system/app目录有什么区别呢?
一句话答案:
只有在/system/priv-app目录下的app或者和这个目录下的app相同签名的app才可以使用android:protectionLevel=signatureOrSystem中的权限

Android官方文档解释 “signatureOrSystem” 级别。

android有4种权限:

  • normal:低风险权限,只要申请了就可以使用(在AndroidManifest.xml中添加<uses-permission>标签),安装时不需要用户确认;
  • dangerous:高风险权限,安装时需要用户的确认才可使用;
  • signature:只有当申请权限的应用程序的数字签名与声明此权限的应用程序的数字签名相同时(如果是申请系统权限,则需要与系统签名相同),才能将权限授给它;
  • signatureOrSystem:签名相同,或者申请权限的应用为系统应用(在system image中)。

这些权限都在frameworks/base/core/res/AndroidManifest.xml里面定义:

    <permission android:name="com.android.alarm.permission.SET_ALARM"
        android:label="@string/permlab_setAlarm"
        android:description="@string/permdesc_setAlarm"
        android:protectionLevel="normal" />
 
    <permission android:name="android.permission.READ_CONTACTS"
        android:permissionGroup="android.permission-group.CONTACTS"
        android:label="@string/permlab_readContacts"
        android:description="@string/permdesc_readContacts"
        android:protectionLevel="dangerous" />
 
    <permission android:name="android.permission.ACCESS_IMS_CALL_SERVICE"
        android:permissionGroup="android.permission-group.PHONE"
        android:label="@string/permlab_accessImsCallService"
        android:description="@string/permdesc_accessImsCallService"
        android:protectionLevel="signature|system" />
 
    <permission android:name="android.permission.RECEIVE_EMERGENCY_BROADCAST"
        android:protectionLevel="signature|privileged" />

system/app下的一般是Android系统内置的应用,例如:相机、浏览器、蓝牙等等
system/priv-app下的一般时手机厂商预置的应用,例如:与手机厂商合作的各种应用。

system/app、system/priv-app目录下的app什么时候安装

Android系统启动时,PackageManagerService由SystemServer启动,PackageManagerService会扫描 /data/app/system/app/system/priv-app/vendor/app/vendor/overlay/oem/app等等目录,可以理解为会把这些目录中的Apk安装一遍,PackageManagerService会结合上面提到的packages.xml把各个App解析成PackageParser.Package对象。

手机app开发和机顶盒app开发的区别

手机app开发是直接基于Android原生无裁剪的SDK开发的,直接使用原生系统提供的各种API,且一般安装在用户目录 data/app 之下。

机顶盒的系统是基于原生AOSP裁剪并进行相应扩展而来的系统,在其上开发的app调用了很多非原生自带的API等。且一般安装在系统目录 system/app 或者厂商定制目录 vendor/app 之下.

参考:
关于system/priv-app和system/app目录以及权限
system/priv-app和system/app
/system/app 和 /system/priv-app 有什么区别?
[Android AOSP] /system/priv-app 和 /system/app区别
预制到system/app下面开机却没有
如何将apk文件更新到系统中vendor文件夹下
adb将Apk内置到系统中(system/priv-app)

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐