android 无须root截图方案的实现

 更新时间:2019年03月27日 08:58:39   作者:maweiliang  
这篇文章主要介绍了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中应用程序的进程都是由Zygote进程孵化而来的,Zygote进程启动时会创建一个Dalvik虚机实例,每当有新的应用用进程产生,Zygote会将虚拟机实例复制到它里面,并且Zygote启动时会将Java运行库加载进来,所以一个新的应用有Zygote创建出来,不仅拥有从Zygote拷贝来的虚拟机,还会和Zygote共享Java运行库。

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

相关文章

  • Android中listview嵌套scrollveiw冲突的解决方法

    Android中listview嵌套scrollveiw冲突的解决方法

    这篇文章主要为大家详细介绍了Android中listview嵌套scrollveiw冲突的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • Android在高jar包版本的工程中修改方法

    Android在高jar包版本的工程中修改方法

    android的应用程序安装包APK如果是在高版本的android jar上开发的是无法在低版本的android SDK上跑的,那么如何简单的在高版本的工程中直接修改呢,需要的朋友可以了解下
    2012-12-12
  • Kotlin Fragment使用方法详解

    Kotlin Fragment使用方法详解

    Fragment是Android3.0后引入的一个新的API,他出现的初衷是为了适应大屏幕的平板电脑, 当然现在他仍然是平板APP UI设计的宠儿,而且我们普通手机开发也会加入这个Fragment, 我们可以把他看成一个小型的Activity,又称Activity片段
    2023-01-01
  • Android 开发使用Activity实现加载等待界面功能示例

    Android 开发使用Activity实现加载等待界面功能示例

    这篇文章主要介绍了Android 开发使用Activity实现加载等待界面功能,结合实例形式详细分析了Android基于Activity实现加载等待界面布局与功能操作技巧,需要的朋友可以参考下
    2020-05-05
  • Android使用http实现注册登录功能

    Android使用http实现注册登录功能

    这篇文章主要为大家详细介绍了Android使用http实现注册登录功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • 二个android模拟器互发短信程序演示

    二个android模拟器互发短信程序演示

    二个android模拟器互发送短信程序示例,大家参考使用吧
    2013-12-12
  • 深入解析Android系统中应用程序前后台切换的实现要点

    深入解析Android系统中应用程序前后台切换的实现要点

    这篇文章主要介绍了Android系统中应用程序前后台切换的实现要点,除了切换操作的效果之外还重点讲解了判断程序运行于前台还是后台的方法,需要的朋友可以参考下
    2016-04-04
  • Android RecyclerView曝光采集的实现方法

    Android RecyclerView曝光采集的实现方法

    这篇文章主要为大家详细介绍了Android RecyclerView曝光采集的实现方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 自定义View系列之kotlin绘制手势设置温度控件的方法

    自定义View系列之kotlin绘制手势设置温度控件的方法

    这篇文章主要给大家介绍了关于自定义View系列之kotlin绘制手势设置温度控件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • Android模仿实现闲鱼首页的思路与方法

    Android模仿实现闲鱼首页的思路与方法

    这篇文章主要给大家介绍了Android模仿实现闲鱼首页的思路与方法,文中通过示例代码介绍的非常详细,并在文末给出了完整的代码供大家参考学习,需要的朋友们下面来一起看看吧。
    2017-04-04

最新评论