在PC端进行android截屏的多种方法
16lz
2021-01-23
昨晚意外的发现在PC端进行截屏的方法相当多,在android sdk的tools里面有大量的jar包可以利用。
第一种方法:
这里使用AndroidDebugBridge及其相关类进行截屏,使用的jar包是ddmlib.jar,在android sdk的tools文件夹内。
代码如下(以下代码抽取自互联网并经修改过):
第二种方法:
使用monkeyrunner.jar包,当然还要添加相关jar包。由于新版的API改变,不知道其中参数应该怎么传,未深入去做。
第三种方法,使用chimpchat.jar及相关jar包(common.jar,guava-13.0.1.jar),代码大致如下:
但是执行之后,程序没有停止下来,不知如何才能使其终止。
第一种方法:
这里使用AndroidDebugBridge及其相关类进行截屏,使用的jar包是ddmlib.jar,在android sdk的tools文件夹内。
代码如下(以下代码抽取自互联网并经修改过):
/* * @(#)ScreenShot.java Project:lianmeng * Date-Time:2013-10-11 下午1:08:36 * * Copyright (c) 2013 CFuture09, Institute of Software, * Guangdong Ocean University, Zhanjiang, GuangDong, China. * All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package pw.msdx.lianmengassistant;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import com.android.ddmlib.AndroidDebugBridge;import com.android.ddmlib.IDevice;import com.android.ddmlib.RawImage;/** * copy from http://bbs.csdn.net/topics/390502035. modify by Geek_Soledad */public class AdbUtil {public static IDevice connect() {// init the lib// [try to] ensure ADB is runningString adbLocation = System.getProperty("com.android.screenshot.bindir"); //$NON-NLS-1$if (adbLocation != null && adbLocation.length() != 0) {adbLocation += File.separator + "adb"; //$NON-NLS-1$} else {adbLocation = "adb"; //$NON-NLS-1$}AndroidDebugBridge.init(false /* debugger support */);AndroidDebugBridge bridge = AndroidDebugBridge.createBridge(adbLocation, true /* forceNewBridge */);// we can't just ask for the device list right away, as the internal// thread getting// them from ADB may not be done getting the first list.// Since we don't really want getDevices() to be blocking, we wait// here manually.int count = 0;while (bridge.hasInitialDeviceList() == false) {try {Thread.sleep(100);count++;} catch (InterruptedException e) {// pass}// let's not wait > 10 sec.if (count > 100) {System.err.println("Timeout getting device list!");return null;}}// now get the devicesIDevice[] devices = bridge.getDevices();if (devices.length == 0) {System.out.println("No devices found!");return null;}return devices[0];}public static BufferedImage screenShot(IDevice device) {RawImage rawImage;try {rawImage = device.getScreenshot();} catch (Exception ioe) {System.out.println("Unable to get frame buffer: " + ioe.getMessage());return null;}// device/adb not available?if (rawImage == null)return null;// convert raw data to an ImageBufferedImage image = new BufferedImage(rawImage.width, rawImage.height,BufferedImage.TYPE_INT_ARGB);int index = 0;int IndexInc = rawImage.bpp >> 3;for (int y = 0; y < rawImage.height; y++) {for (int x = 0; x < rawImage.width; x++) {int value = rawImage.getARGB(index);index += IndexInc;image.setRGB(x, y, value);}}return image;}/** * Grab an image from an ADB-connected device. */public static boolean screenShotAndSave(IDevice device, String filepath) throws IOException {boolean result = ImageIO.write(screenShot(device), "png", new File(filepath));if (result) {System.out.println("file is saved in:" + filepath);}return result;}public static void terminate() {AndroidDebugBridge.terminate();}}
第二种方法:
使用monkeyrunner.jar包,当然还要添加相关jar包。由于新版的API改变,不知道其中参数应该怎么传,未深入去做。
第三种方法,使用chimpchat.jar及相关jar包(common.jar,guava-13.0.1.jar),代码大致如下:
AdbBackend adb = new AdbBackend();IChimpDevice device = adb.waitForConnection();ImageIO.write(device.takeSnapshot().createBufferedImage(), "png", new File("E:\\tmp.png"));device.dispose();if (adb != null) {adb.shutdown();}
但是执行之后,程序没有停止下来,不知如何才能使其终止。
更多相关文章
- Android getDimensionPixelSize, 代码中设置字体大小,读xml配置。
- Google Inbox如何跨平台重用代码?
- js调用android本地代码失败 兼容问题
- 在程序中用Java代码设置android:gravity, android:layout_Gravit
- AsyncTask实例代码演示Android异步任务
- Android 事件分发详解及示例代码
- Android 的源代码结构
- 第二章:根据oschina开源的app代码快速构建自己站点的ANDROID APP
- [对android程序作代码混淆]