在Android应用程序中执行dex文件

时间:2015-03-10 13:11:14

标签: java android shell dalvik userid

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

这是我的应用尝试做的事情:

1.发送dex文件。

传输后,文件属性为:

-rw------- u0_a128 u0_a128 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-rw-rw- shell shell 760...

我想知道我是否应该修改dex文件。

所以我只是说:

 Process p=null;
 p=Runtime.getRuntime().exec("chmod 777 /data/data/com.ray.offload/test/Hello.dex");
 p.waitFor();

在我使用&#39; dalvikvm&#39;之前执行dex文件。但是当我使用adb&#39; ll&#39;时,文件归属没有改变。看见了。 所以我通过adb shell直接更改了归属地。<​​/ p>

chmod 777 Hello.dex

它确实会被更改。但应用程序仍无效。 然后最奇怪的事情来了: 在我使用dalvikvm直接通过adb.my app执行dex文件之后,还有“Hello world&#39;在我的logcat上。

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

我对所有这些问题感到困惑。 我想知道“dalvikvm”执行情况是否正确。只是在另一个沙盒中#39;的安卓。普遍存在问题。我正在寻求帮助.....

0 个答案:

没有答案