首页 > 移动平台 > 详细

wxbit appinventor 中使用java反射运行cmd

时间:2021-03-31 14:03:19      阅读:26      评论:0      收藏:0      [点我收藏+]

群里有人问怎么实现ping的效果,作为不会写java的人,自然是不会写插件了,网上的答案都是用runtime类执行exec。调用安卓的shell(相当于win的cmd)。于是我想着既然wxbit有反射,就可以无中生有实例化出runtime对象了

这里注意实例化runtime类不是用new,而是运行静态方法 Runtime.getRuntime(),这种方法可以确保进程中只有一个runtime实例。

这里先获得方法

技术分享图片

 

 等同于   

Class clazz = Class.forName("java.lang.Runtime"); //初始化Runtime类
        Object rt = clazz.getMethod("getRuntime").invoke(clazz); (注意这里返回的是一个列表)

运行静态方法getRuntime

技术分享图片

 

 获得exec方法名

技术分享图片

 

 执行ping,这里很奇怪-c 要写在中间

技术分享图片

 

这一大坨大致相当于

import jdk.internal.org.objectweb.asm.commons.Method;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;

public class main {
    public static void main(String[] args) throws IOException, NoSuchMethodException, ClassNotFoundException, InvocationTargetException, IllegalAccessException {
        Class clazz = Class.forName("java.lang.Runtime"); //初始化Runtime类
        Object rt = clazz.getMethod("getRuntime").invoke(clazz); //调用Runtime类中的getRuntime方法得到Runtime类的对象
        clazz.getMethod("exec",String.class).invoke(rt,"ping 192.168.1.1"); //再次使用invoke调用Runtime类中的方法时,传递我们获得的对象,这样就可以调用

    }
}

执行shell的结果会返回一个pro对象,运行pro.getInputStream(),获得inputSteam对象,然后就是处理这个玩意了 最后会制造一个回调地狱(笑

完整代码

技术分享图片

 作为只会用java写hello世界的人,相当于连爬都不会,直接学会御剑飞行了@-@

wxbit appinventor 中使用java反射运行cmd

原文:https://www.cnblogs.com/kyo413/p/14600728.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!