构建AOSP并添加具有运行时权限的系统应用程序

时间:2018-02-12 09:40:41

标签: android apk android-source

我在Android 6 AOSP上工作。我能够构建将应用程序添加为系统应用程序 但现在我想在此系统应用程序上默认添加运行时权限。就像那样,应用程序可以在不要求用户验证权限的情况下启动。

你知道我怎么做吗?

谢谢你的帮助。

2 个答案:

答案 0 :(得分:3)

如果您的应用具有特权,则在清单中请求时,将授予所有运行时权限。

使您的应用享有特权:
在Android.mk中

LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE := true

如果这不能解决您的问题:
1.您可以在运行时向您的应用授予运行时权限。应用程序必须具有android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS。 Pm.java

IPackageManager pm = IPackageManager.Stub.asInterface(ServiceManager.getService("package"));
pm.grantRuntimePermission(pkgname, perm, UserHandle.USER_OWNER);
pm.updatePermissionFlags(perm, pkgname, PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT,
PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT, UserHandle.USER_OWNER);
  1. 您可以通过修改手动授予权限 DefaultPermissionGrantPolicy.java
  2. 此外,如果应用程序使用共享用户ID与系统。即使未在清单中请求,也会授予任何权限。

    android:sharedUserId="android.uid.system".
    

答案 1 :(得分:0)

您可以通过修改 public int CassandraConn(){ // TODO Auto-generated method stub String cqlStatement = "select * from table_name; for (Row row : session.execute(cqlStatement)) { System.out.println(row.toString()); } } 类来向系统应用授予运行时权限。

DefaultPermissionsGrantPolicy.java方法中,添加以下代码:

grantDefaultSystemHandlerPermissions(int userId)

确保将代码添加到此行上方:

PackageParser.Package yourPackage = getSystemPackageLPr("YOUR_APP_PACKAGE_NAME"); if (yourPackage != null && doesPackageSupportRuntimePermissions(yourPackage)) { grantRuntimePermissionsLPw(yourPackage, CONTACTS_PERMISSIONS, userId); grantRuntimePermissionsLPw(yourPackage, CALENDAR_PERMISSIONS, userId); }