系统应用程序的Android运行时权限

时间:2018-08-30 12:37:19

标签: android android-permissions

我正在构建一个android应用并将其放置在/ system / priv-app下(作为构建AOSP),使其成为系统应用 Android操作系统版本:6.0.1(api 23)

ApplicationInfo ai = packageManager.getApplicationInfo(
                    packageName, 0);
            // Check if FLAG_SYSTEM or FLAG_UPDATED_SYSTEM_APP are set.
            if (ai != null
                    && (ai.flags & (ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)) != 0) {
                return true;
            }

此代码恢复为真(适用于系统应用)

我已阅读系统应用程序将拥有所有运行时权限,例如位置,存储等。

但是它仍在请求位置和存储权限(系统对话框)。

我尝试了什么?

1)在清单"android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS"

中使用了此权限

2)在框架中添加了几行代码

   services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java

here

但仍然有应用程序在请求权限。

注意*:我还希望在不询问/提示用户的情况下获得android.permission.WRITE_SETTINGSWRITE_SECURE_SETTINGSDraw over other apps的权限

又一个音符:*

此应用是用于具有自定义操作系统的自定义硬件,我可以访问所有框架代码

1 个答案:

答案 0 :(得分:1)

首先,转储您的软件包服务,并检查软件包是否具有正确的标志和权限。如果您的应用具有特权,则privateFlags必须具有 PRIVILEGED 。如果您的应用具有特权,则在清单中请求时,将授予所有运行时权限。但是我不确定在Android 6.0上是否如此。

adb shell dumpsys package

Packages:
  Package [com.android.systemui] (4dfb5a):
....
  flags=[ SYSTEM HAS_CODE PERSISTENT ]
  privateFlags=[ PRIVILEGED DEFAULT_TO_DEVICE_PROTECTED_STORAGE DIRECT_BOOT_AWARE RESIZEABLE_ACTIVITIES ]
  dataDir=/data/user_de/0/com.android.systemui
....
  pkgFlags=[ SYSTEM HAS_CODE PERSISTENT ]
  declared permissions:
    com.android.systemui.permission.SELF: prot=signature, INSTALLED
  requested permissions:
    android.permission.RECEIVE_BOOT_COMPLETED
    android.permission.READ_EXTERNAL_STORAGE
....
  install permissions:
    android.permission.REAL_GET_TASKS: granted=true
    android.permission.REMOTE_AUDIO_PLAYBACK: granted=true

请看看这个answer