如何在REPL中运行Android代码

5

我有一个包含大量通信的安卓应用程序。我希望在REPL中运行安卓代码,以用于开发、调试等目的。

就像这样:

HttpClient client = new DefaultHttpClient();
print(client.execute(new HttpGet("some url"), new BasicResponseHandler()));

通过这种方式,我可以快速查看我的更改,无需在手机或模拟器上运行。

我尝试将android.jar添加到beanshell中,但这样做不起作用。

1个回答

6
您无法在REPL中运行Android平台的类(例如HttpClient),因为android.jar中的方法都是存根。这些方法的实际实现位于您的手机或模拟器上,因此您至少需要运行模拟器。
有关更多详细信息,请参见Apache DefaultHttpClient调用导致"java.lang.RuntimeException: Stub!"
例如,如果您在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)

如果您想亲自验证此问题,请在Eclipse中创建一个新的Java项目,然后在项目中创建一个新的“Scrapsbook”页面(文件>新建>其他...>Java运行/调试>Scrapsbook页面)。将android.jar添加到项目的构建路径中,然后右键单击scrapsbook页面,选择设置导入并导入org.apache.http.*包。当您执行代码片段(Ctrl + U)时,您会收到类似于我上面发布的异常。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接