android后台截屏实现(3)--编译screencap

         修改好之后就要编译了,screencap的编译是要在源码环境中进行的。

         将修改后的screencap.cpp文件替换源码中的原始文件,然后修改screencap的Android.mk文件,修改后的文件如下:


 1 LOCAL_PATH:= $(call my-dir)
 2 include $(CLEAR_VARS)
 3 
 4 LOCAL_SRC_FILES:= \
 5     screencap.cpp
 6 
 7 LOCAL_SHARED_LIBRARIES := \
 8     libcutils \
 9     libutils \
10     libbinder \
11     libskia \
12         libui \
13         libgui
14 
15 LOCAL_MODULE:= libscreencapservice
16 
17 LOCAL_LDLIBS:=-L$(SYSROOT)/usr/lib -llog
18 
19 LOCAL_MODULE_TAGS := optional
20 LOCAL_CERTIFICATE := platform
21 
22 LOCAL_C_INCLUDES += \
23     external/skia/include/core \
24     external/skia/include/effects \
25     external/skia/include/images \
26     external/skia/src/ports \
27     external/skia/include/utils
28 
29 include $(BUILD_SHARED_LIBRARY)
30  

 


LOCAL_MODULE指定生成文件的名字;

BUILD_SHARED_LIBRARY告诉编译器生成文件的类型是动态库

-llog引入打印日志的库


        由于修改后的screencap引入了jni.h,去系统安装的jdk下的找到该头文件并拷贝到screencap目录下。1.6版本的jni.h在jdk*/include/下,jni.h又需要jni_md.h,该文件在jdk*/include/linux/下。将这两个文件一起拷贝到screencap目录。


编译动态库

两种方法:

1、mm命令

在screencap目录下执行

mm

2、make命令

在源码根目录执行

make  libservicescreencap


一些问题

由于Android版本升级太快,源码一旦改动这种截屏方式就会出错,我在测试时发现,442源码所编译的动态库无法在422系统上实现截屏,甚至都无法在444上截屏,最后还是找了台442的机器才成功截屏的。因此跟人觉得这种截屏方式不具有普适性。


 

posted @ 2015-02-04 16:55  XULINGFENG  阅读(2541)  评论(0编辑  收藏  举报