我正在构建一个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_SETTINGS
,WRITE_SECURE_SETTINGS
和Draw over other apps
的权限
又一个音符:*
此应用是用于具有自定义操作系统的自定义硬件,我可以访问所有框架代码
答案 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