群里有人问怎么实现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