2011-10-10 147 views
6
W/PackageManager(61): Not granting permission android.permission.SET_ACTIVITY_WATCHER to package 

这就是一个这样的权限示例,如果没有使用平台签名进行签名,则不会授予应用程序。据说,我想知道在根设备上运行的任何应用程序(使用/ system/bin/su和SuperUser.apk)如何授予这些权限。Android系统根权限权限

Process p = Runtime.getRuntime().exec("su"); 
p.waitFor(); 

执行此操作提示与“接受”或超级用户对话框中的“拒绝”,但SecurityException s的仍然抛出。

回答

2

您可以通过设置sharedUserId声明你的应用作为一个系统运行的应用程序作为可以在这里找到在AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="[your package name]" 
     android:sharedUserId="android.uid.system"> 

详细信息如下:How to sign Android app with system signature?

+2

我可以编译此应用程序并在任何有根设备上运行它并将其安全地分发到Android Market上吗?我没有制作自定义ROM,只是一个适用于根目录设备的应用程序。 – Tom

+0

不可以。您不能在Android电子市场上分发具有系统级访问权限的应用。 – spatulamania

+1

那么这不是我正在寻找的。我正在寻找一种方法来获得这样的权限,而不是一个运行我自己的固件的设备。就分发而言,看看SetCPU或截图应用的数量,他们使用这样的权限没有问题。 – Tom

1

你需要复制你的apk文件到'/ system/apps'。它可以通过编程完成。只有拥有root权限的情况下才可以这样做。一旦被复制,重新启动设备(如果你有root用户,重启也可以通过编程方式完成),你将被授予清单文件中提到的所有权限。您也可以在市场上销售。

+1

是的,我有这个想法,但仍然有一些权限仍然只给予与平台签名签署的应用程序。将你的应用放在/ system/app中会给你一些,但不是全部。它也需要重新启动,这很有尴尬,并且意味着您的应用程序无法在没有Root Explorer等应用程序的情况下被卸载。 – Tom

+1

我已经使用这种技术很长一段时间,从来没有遇到任何未被授予的权限。我所做的是在我的菜单中提供一个设置,以“根/无根应用程序”。所以当用户点击使用root权限时,我会显示一个弹出窗口,说应用程序将被复制到系统文件夹,设备将被重新启动 - 继续/取消。类似于无根也。对我很好,没有抱怨。 –

+0

我确信它可以很好地完成,但重启和无法轻松卸载对我来说太过分了。对于初学者,你是否还需要复制所有共享的首选项文件,缓存等?那么,我仍然很疲倦,不会像STATUS_BAR_SERVICE那样在Manifest.permission中授予权限,因为它们被指定为签名级别而不是系统级别。 – Tom