我正在尝试运行一些安全(内部)api调用,而且我显然遇到了安全性异常:
java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.provider.Telephony.SPN_STRINGS_UPDATED from pid=24864, uid=10107
我正在尝试从root运行同一个调用,但我不确定它是否可能首先出现。我当然可以获得这样的root权限:
Process p = Runtime.getRuntime().exec("su");
但它似乎没有做到这一点。我得到了相同的安全例外。我见过的其中一个示例试图等待su
调用先完成,如下所示:
Process p = Runtime.getRuntime().exec("su");
p.waitFor();
但这也没有帮助我。那我做错了什么? 是否可以做到?
如果这很重要,我正在尝试使用PhoneFactory获取com.android.internal.telephony.Phone类的实例(使用反射获取它们)。 将反射放在一边,它看起来像这样:
// Initialize the telephony framework
PhoneFactory.makeDefaultPhones(this);
// Get the default phone
Phone phone = PhoneFactory.getDefaultPhone();
答案 0 :(得分:5)
您的应用程序或服务需要使用与核心系统应用程序相同的密钥进行签名,并请求共享用户ID。如果你有一个可用的su命令,你可能正在运行一个自定义的固件;检查提供它的人如何添加新的系统应用程序。
su命令不会更改调用它的进程的标识/权限 - 它的作用是让您启动具有提升权限的子进程。但它不是很清楚如何以这种方式启动Android应用程序(可能通过使用app_process - 但真正安装为系统应用程序是正确的方法)。
另请注意,将您的应用设为系统应用仍然无法以root用户身份运行。