Java 在android应用程序中执行dex文件

Java 在android应用程序中执行dex文件,java,android,shell,dalvik,userid,Java,Android,Shell,Dalvik,Userid,背景:我想写一个应用程序,可以传输dex文件到另一部手机,并执行它 这就是我的应用程序试图做到的: 1.传输dex文件 传输后,文件属性为: -rw------- u0_a128 u0_a128 760.... -rw-rw-rw- shell shell 760... 2.使用以下代码执行: try{ Process proc=null; proc = Runtime.getRuntime().exec("dalvikvm -c

背景:我想写一个应用程序,可以传输dex文件到另一部手机,并执行它

这就是我的应用程序试图做到的:

1.传输dex文件

传输后,文件属性为:

-rw------- u0_a128 u0_a128 760....
 -rw-rw-rw- shell shell 760...
2.使用以下代码执行:

 try{

                Process proc=null;
            proc = Runtime.getRuntime().exec("dalvikvm -cp /data/data/com.ray.offload/Hello.dex hello.Hello");

                proc.waitFor();
                java.io.InputStream is=proc.getInputStream();
                byte b[]=new byte[is.available()];
                is.read(b,0,b.length);
                System.out.println(new String(b));
            }
            catch (Exception e) {
                Log.i("Read has Exception", "e:" + e);
            }
        }
com.ray.offload是安装我的应用程序的地方

运行此函数时,logcat仅显示:

  E/dalvikvm﹕ threadid=11: created from interp,name=java.lang.ProcessManager
  E/dalvikvm﹕ threadid=11: calling run(),name=java.lang.ProcessManage
注意:如果我使用adb将dex文件推送到我的手机上,我可以得到“Hello world”。 文件属性为:

-rw------- u0_a128 u0_a128 760....
 -rw-rw-rw- shell shell 760...
我在琢磨是否应该修改dex文件的chmod

所以我只是说:

 Process p=null;
 p=Runtime.getRuntime().exec("chmod 777 /data/data/com.ray.offload/test/Hello.dex");
 p.waitFor();
在我使用'dalvikvm'执行dex文件之前。但是当我使用adb'll'查看文件时,文件属性没有改变。 因此,我通过adb shell直接更改属性

chmod 777 Hello.dex
它确实被更改了。但应用程序仍然无法运行。 最奇怪的是: 在我使用dalvikvm直接通过adb执行dex文件后,我的应用程序在我的logcat上也有“Hello world”

这意味着我的应用程序必须在通过adb shell执行ded文件后才能工作

chmod 777 Hello.dex
我只是对这些问题感到困惑。
我想知道“dalvikvm执行”是否只是安卓的另一个“沙箱”中。previlege一定出了问题。我正在寻求帮助……

dexopt需要运行。您的应用程序可能没有创建“.odex”文件的权限。@fadden在清单中没有相应的权限。我可以从中获得权限吗?