近来公司项目要求能够截取一下android的屏幕,先到网上搜索了一下,发现例子一大堆,但是能用却不是太多,然后发现android系统本身自带的有截图的命令


screencap 和screenshot


shell@android:/ $ screenshot -h

screenshot -h

unknown option -- husage: screenshot [-s soundfile] filename.png

-s: play a sound effect to signal success

-i: autoincrement to avoid overwriting filename.png

1|shell@android:/ $ screencap -h

screencap -h

usage: screencap [-hp] [FILENAME]

-h: this message

-p: save the file as a png.

If FILENAME ends with .png it will be saved as a png.

If FILENAME is not given, the results will be printed to stdout.


既然有这个命令,并且有android的源码,那就看看到底是怎么实现的吧


这里给大家强烈推荐一个查找代码的网站


http://code.metager.de/source/xref/android/


这个里面直接输入要搜索的文件名称,即可找到需要的文件,首先先搜索了一把


结果的网址在

http://code.metager.de/source/xref/android/4.0.3/frameworks-base/cmds/screencap/screencap.cpp


这个网址,发现使用c++编写的代码,还要依赖很多库文件,并且不是特别好看明白,所以就没有细看,然后又搜索了一下

http://code.metager.de/source/xref/android/4.0.3/frameworks-base/cmds/screenshot/screenshot.c


搜索到了这个文件,发现其就是一个简单的实现截屏的小工具,直接里面有main函数的,呵呵

那就把它拷贝下来进行移植吧,然后

移植的过程中,需要加入一个libpng的库文件,不过这个也不是难事,从android源代码里面找到libpng的库文件,然后配置一下makefile文件即可。


但是在移植和开发的过程中,一个难点是有些手机原始的fb0 出来的数据是 BGRA格式,需要转换为RGBA的格式,但是有些手机就直接是RGBA格式的就不用转换了,但是现在还没有找到区别的方法。不过相信也不会太难,留给做上层应用的同事来解决好了 呵呵


我自己写了一个demo例子,需要的朋友请到下面的链接下载即可。


http://down.51cto.com/data/951556


http://down.51cto.com/data/956437

用后面的那个地址,里面实现了jni和命令行两种调用方式





更多相关文章

  1. android浮动搜索框
  2. 理解 Android(安卓)Build 系统
  3. Android(安卓)NDK调试方式之一: adb logcat
  4. android app 添加logo
  5. [转]]Android 应用签名提权方法
  6. Android基础知识之Manifest文件的组织结构
  7. android中dp和px的转换
  8. Android(安卓)Studio系列-签名打包
  9. NPM 和webpack 的基础使用

随机推荐

  1. 如何零基础学习编程
  2. pinpoint通过api批量设置告警
  3. 协程原理从入门到精通 每个后端开发都需
  4. Clickhouse集群性能测试(全网独家精华版)
  5. linux下挂载NTFS文件系统出现symbol look
  6. c语言开始
  7. 算法与数据结构-综合提升 C++版
  8. 2021-02-15:给定一个整型数组arr,代表数值
  9. 2.33 在windows 2012中创建iSCSI虚拟磁盘
  10. 玩转算法面试-- Leetcode真题分门别类讲