修改好之后就要編譯了,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的機器才成功截屏的。因此跟人覺得這種截屏方式不具有普適性。