对码当歌,猿生几何?

android PowerManager 等权限问题

今天想写一个 重启的压力测试,运行是出现下面问题:

一、运行报错

 java.lang.RuntimeException: Unable to start receiver runin.xtk.com.myreboot.BootBroadcastReceiver: java.lang.SecurityException: Neither user 10084 nor current process has android.permission.REBOOT.
        at android.app.ActivityThread.handleReceiver(ActivityThread.java:3197)
        at android.app.ActivityThread.-wrap17(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1675)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6518)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

没有下面的权限

Neither user 10084 nor current process has android.permission.REBOOT.

但是我已经给了权限 在文件

    <uses-permission android:name="android.permission.REBOOT"/><uses-permission android:name="android.permission.DEVICE_POWER"/>

其中试了好几种重启的方法,还将手机 系统变为 userdebug 版本,都是一样的错

网上查资料说需要签名,需要修改两处:

1.Android.mk 文件添加如下:

LOCAL_CERTIFICATE := platform

2.AndroidManifest.xml 文件中将 manifest 添加 android:sharedUserId 属性

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="run.xxx.com.myreboot"android:sharedUserId="android.uid.system">

然后编译即可

若不知道怎么将 Android studio 在源码中添加mk编译,请转
https://blog.csdn.net/shiluohuashengmi/article/details/81085572

以上编译即可解决问题

签名种类:
1、testkey:普通APK,默认情况下使用。
2、platform:该APK完成一些系统的核心功能。经过对系统中存在的文件夹的访问测试,这种方式编译出来的APK所在进程的UID为system。
3、shared:该APK需要和home/contacts进程共享数据。
4、media:该APK是media/download系统中的一环

本文参考博文地址(非常感谢):
https://blog.csdn.net/fulinwsuafcie/article/details/8459143

阅读更多