当前位置: 首页 > 编程笔记 >

android 无须root截图方案的实现

薛烈
2023-03-14
本文向大家介绍android 无须root截图方案的实现,包括了android 无须root截图方案的实现的使用技巧和注意事项,需要的朋友参考一下

通过反射了截取屏

public class EncoderFeeder {
   public static Bitmap screenshot() {
      String surfaceClassName;
      if (VERSION.SDK_INT <= 17) {
        surfaceClassName = "android.view.Surface";

      } else {
        surfaceClassName = "android.view.SurfaceControl";
      }
      Class<?> classname;
      Bitmap bm = null;
      try {
        classname = Class.forName(surfaceClassName);
        Method method = classname.getDeclaredMethod("screenshot",
              new Class[] { int.class, int.class });
        bm = (Bitmap) method.invoke(
              null,
              new Object[] { Integer.valueOf(Device.x),//分辨率
                   Integer.valueOf(Device.y) });
      } catch (Exception e) {
        e.printStackTrace();
      }

      return bm;
   }
  
}

这是我们反射调用SurfaceControl.screenshot()和Surface.screenshot(),他们都是系统提供的截屏方法,可是这个方法被@hide的了,无法调用,我们可是使用反射的方式调用,可是我们普通用户通过代码反射调用,方法会返回null,原因是SurfaceControl这个类也被Google隐藏了, 我们知道通adb shell 命令可以调用screencap或者screenshot来截屏adb shell具有截屏截屏的权限也就是说adb shell能够调用到Surface和SurfaceControl这个两个类。 怎么通过adb shell来调用到这两个类呢,这里的主角是app_process,app_process可以直接运行一个普通的Java类。 小结一下:

1.通过adb shell 命令来启动一个app_process程序

export CLASSPATH=/data/app/com.test.syscreen-1.apk",
"exec app_process /system/bin com.test.syscreen.Main '@@'

2.使用app_process程序来启动一个Java程序,在Java程序中可访问到Surface和SurfaceControl这两个类,就可以绕过Root,反射截屏。 更进一步的分析,为什么app_precess程序会有普通用户访问不到的东西呢,查了一下(app_process其实就是Zygote进程,Zygote是由app_process“改名”而来),android中html" target="_blank">应用程序的进程都是由Zygote进程孵化而来的,Zygote进程启动时会创建一个Dalvik虚机实例,每当有新的应用用进程产生,Zygote会将虚拟机实例复制到它里面,并且Zygote启动时会将Java运行库加载进来,所以一个新的应用有Zygote创建出来,不仅拥有从Zygote拷贝来的虚拟机,还会和Zygote共享Java运行库。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 我需要从后台运行的服务中截图。屏幕截图可以是前台的应用程序,即使它不是我的应用程序,这就是为什么我不能使用DrawingCache。我到处找了找,找到了这个 任何帮助都是非常感谢的。

  • 自动化截图-应用分发时的自动截图方案 > 原文链接 : Screenshots Through Automation 作者 : Flavien Laurent 译者 : chaossss 校对者: sundroid 状态 : 校对完成 在发布 App 到应用商店时有一件的事情不得不做,就是上传最新的高清无码截图到应用商店上。可是如果你的 App 有许多页面,那你每次发布更新都可能是一场梦魇,因为你

  • 本文向大家介绍解析Android截取手机屏幕两种实现方案,包括了解析Android截取手机屏幕两种实现方案的使用技巧和注意事项,需要的朋友参考一下 最近在开发的过程中,遇到了一个需要截取屏幕保存为图片的需求,具体为截取webview的视图保存图片。 方法1:首先想到的思路是利用SDK提供的View.getDrawingCache()方法: 这个方法在很多情况下都是没有问题的,比如说截取imagev

  • 本文向大家介绍Android来电拦截的实现方法,包括了Android来电拦截的实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android来电拦截的方法,供大家参考,具体内容如下 权限 拨号广播—PhoneStateReceiver 来电挂断 BlockCallHelper 看主界面MainActivity 最后看AIdl层面 ITelephony.aidl Neighbo

  • 本文向大家介绍Android 加载GIF图最佳实践方案,包括了Android 加载GIF图最佳实践方案的使用技巧和注意事项,需要的朋友参考一下 起因 最近在项目中遇到需要在界面上显示一个本地的 GIF 图。按照惯例我直接用了 Glide 框架来实现。 Glide 地址: https://github.com/bumptech/glide 我用的 Glide版本为 4.0.0-RC1 , 具体的实现

  • 本文向大家介绍Android实现拍照截图功能,包括了Android实现拍照截图功能的使用技巧和注意事项,需要的朋友参考一下 本文将向大家展示如何拍照截图。 先看看效果图: 拍照截图有点儿特殊,要知道,现在的Android智能手机的摄像头都是几百万的像素,拍出来的图片都是非常大的。因此,我们不能像对待相册截图一样使用Bitmap小图,无论大图小图都统一使用Uri进行操作。 一、首先准备好需要使用到的