screencap在ADB上有效,但在root上的8.1上无效

时间:2018-07-11 01:36:44

标签: android adb screenshot root screen-capture

我正在尝试使用扎根的Android 8.1上的屏幕截图从我的应用中截取屏幕截图,但未成功。

按一下我的执行命令:

String[] commands = {"screencap -p /sdcard/img.png"};
RunAsRoot(commands);

还有我执行adb命令的方法。这适用于mkdir。

public void RunAsRoot(String[] cmds) {
        try {
            Process p = Runtime.getRuntime().exec("su");
            DataOutputStream os = new DataOutputStream(p.getOutputStream());
            for (String tmpCmd : cmds) {
                os.writeBytes(tmpCmd + "\n");
            }
            os.writeBytes("exit\n");
            os.flush();
            os.close();

            if ((p.waitFor() != 0)) {
                throw new SecurityException();
            }

        } catch (Exception e) {
            e.printStackTrace();
            //throw new SecurityException();
        }
    }

我的错误:

W/System.err: java.lang.SecurityException
W/System.err:     at com.example.chatheads.MainActivity.RunAsRoot(MainActivity.java:158)
                  at com.example.chatheads.MainActivity$4.onPermissionGranted(MainActivity.java:123)
                  at com.intentfilter.androidpermissions.PermissionHandler.checkPermissions(PermissionHandler.java:41)
                  at com.intentfilter.androidpermissions.PermissionManager.checkPermissions(PermissionManager.java:50)
                  at com.example.chatheads.MainActivity.TakeScreenshot(MainActivity.java:118)
                  at com.example.chatheads.MainActivity$2.onClick(MainActivity.java:71)
                  at android.view.View.performClick(View.java:6294)
                  at android.view.View$PerformClick.run(View.java:24770)
                  at android.os.Handler.handleCallback(Handler.java:790)
                  at android.os.Handler.dispatchMessage(Handler.java:99)
                  at android.os.Looper.loop(Looper.java:164)
                  at android.app.ActivityThread.main(ActivityThread.java:6494)
                  at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

安全异常使我认为这是权限问题?我的SU是否执行得不够快还是需要其他许可?

我已授予WRITE_EXTERNAL_STORAGE权限,并获得了创建的img.png文件,但它为空。我猜我需要某种图形许可吗?有什么想法吗?

我从PC的ADB运行了 screencap -p /sdcard/img.png 命令,该命令成功拍摄了屏幕截图。有趣的是,如果先运行 SU ,然后运行screencap命令,则会出现错误: gralloc-mapper必须处于直通模式

谢谢!

0 个答案:

没有答案