如何在REPL中运行android代码

如何在REPL中运行android代码,android,read-eval-print-loop,Android,Read Eval Print Loop,我有一个android应用程序,有很多通信功能。我想在REPL中运行android代码,用于开发、调试等 像这样 HttpClient client = new DefaultHttpClient(); print(client.execute(new HttpGet("some url"), new BasicResponseHandler())); 通过这种方式,我可以很快看到我的更改,而无需在手机或模拟器上运行 我曾尝试将android.jar添加到beanshell,但没有成功。您将无

我有一个android应用程序,有很多通信功能。我想在REPL中运行android代码,用于开发、调试等

像这样

HttpClient client = new DefaultHttpClient();
print(client.execute(new HttpGet("some url"), new BasicResponseHandler()));
通过这种方式,我可以很快看到我的更改,而无需在手机或模拟器上运行


我曾尝试将android.jar添加到beanshell,但没有成功。

您将无法在REPL中运行属于android平台的类(例如
HttpClient
),因为android.jar中的方法都是存根。这些方法的真正实现驻留在您的手机或模拟器上,因此您必须至少运行模拟器

有关更多详细信息,请参阅

例如,如果您运行在REPL中发布的代码,您将获得类似以下内容的RuntimeException:

java.lang.RuntimeException: Stub!
    at org.apache.http.impl.client.AbstractHttpClient.<init>(AbstractHttpClient.java:5)
    at org.apache.http.impl.client.DefaultHttpClient.<init>(DefaultHttpClient.java:7)
    at CodeSnippet_10.run(CodeSnippet_10.java:7)
    at org.eclipse.jdt.internal.debug.ui.snippeteditor.ScrapbookMain1.eval(ScrapbookMain1.java:20)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.eclipse.jdt.internal.debug.ui.snippeteditor.ScrapbookMain.evalLoop(ScrapbookMain.java:54)
    at org.eclipse.jdt.internal.debug.ui.snippeteditor.ScrapbookMain.main(ScrapbookMain.java:35)
java.lang.RuntimeException:存根!
在org.apache.http.impl.client.AbstractHttpClient(AbstractHttpClient.java:5)
位于org.apache.http.impl.client.DefaultHttpClient。(DefaultHttpClient.java:7)
在CodeSnippet_10.run(CodeSnippet_10.java:7)
位于org.eclipse.jdt.internal.debug.ui.snippeteditor.ScrapbookMain1.eval(ScrapbookMain1.java:20)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:601)
位于org.eclipse.jdt.internal.debug.ui.snippeteditor.ScrapbookMain.evalLoop(ScrapbookMain.java:54)
位于org.eclipse.jdt.internal.debug.ui.snippeteditor.ScrapbookMain.main(ScrapbookMain.java:35)

如果您想直接验证这一点,请在Eclipse中创建一个新的Java项目,然后在项目中创建一个新的剪贴簿页面(
File>new>Other…>Java运行/调试>剪贴簿页面
)。将android.jar添加到项目的构建路径,然后右键单击剪贴簿页面,选择
Set Imports
并导入
org.apache.http.*
包。当您执行代码段(Ctrl+U)时,您将得到一个类似于我上面发布的异常