wxbit appinventor 中使用java反射运行cmd

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

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

这里先获得方法

wxbit  appinventor 中使用java反射运行cmd

 

 等同于   

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

运行静态方法getRuntime

wxbit  appinventor 中使用java反射运行cmd

 

 获得exec方法名

wxbit  appinventor 中使用java反射运行cmd

 

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

wxbit  appinventor 中使用java反射运行cmd

 

这一大坨大致相当于

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对象,然后就是处理这个玩意了 最后会制造一个回调地狱(笑

完整代码

wxbit  appinventor 中使用java反射运行cmd

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

上一篇:Runtime在平时项目使用案例(干货篇)


下一篇:Oratop工具——实时数据库性能监控工具