阳光沙滩
让学习编程变得简单
android应用执行adb命令来截图
发表于 2020-03-07    阅读次数 166

android应用执行adb命令来截图

测试那边需要一个截图工具,本为以随便就搞定了,哈哈。谁知道看了一下,我们干掉了SystemUI,我们是做系统定制的,把一些东西干掉了。所以就没法调用系统的API进行截图了。

使用adb截图,用电脑可以,但是用应用去执行adb命令截图,做不到:

String mSavedPath = "/mnt/sdcard/imei-" + getIMEI(MainActivity.this) + "-time-" + stampToDate(System.currentTimeMillis() + "") + "screenshot.png";
try {
    Runtime.getRuntime().exec("screencap -p " + mSavedPath);
} catch (Exception e) {
    e.printStackTrace();
}
ToastUtils.toastShow(MainActivity.this, "截图成功!");

报了一些无权限相关的错误。

于是就想到了把它放到系统里头编译: Android.mk

LOCAL_PATH:= $(call my-dir)/app/src/main
include $(CLEAR_VARS)

LOCAL_PACKAGE_NAME := ScreenShot

LOCAL_SRC_FILES := $(call all-java-files-under, java)


WITH_DEXPREOPT := false

LOCAL_CERTIFICATE := platform

include $(BUILD_PACKAGE)
##################################################
include $(CLEAR_VARS)

include $(BUILD_MULTI_PREBUILT)

###################################################
include $(call all-makefiles-under,$(LOCAL_PATH))

编译出来以后,安装,使用,亲测成功了!

当然啦,只能截图我当前系统的界面,其他系统就不行了。除非用那个系统来编译。 上面脚本一有句是重点: LOCAL_CERTIFICATE := platform

也就是用系统签名

WITH_DEXPREOPT := false 这个的意思 就是不生成odex 一般来说,apk里面是java文件。odex里是资源文件

这样做方便我们安装

好啦,这文章就到这 里啦!