执行Android JUnit测试出现java.net.SocketException: Permission denied的解决方法

来源:互联网 发布:oanda 数据接口 编辑:程序博客网 时间:2024/06/08 02:42

问题:

执行Android应用程序的junti测试时,执行结果为Error,Failure Trace如下:

java.net.SocketException: Permission denied
at org.apache.harmony.luni.platform.OSNetworkSystem.createStreamSocketImpl(Native Method)
at org.apache.harmony.luni.platform.OSNetworkSystem.createStreamSocket(OSNetworkSystem.java:186)
at org.apache.harmony.luni.net.PlainSocketImpl.create(PlainSocketImpl.java:265)
at java.net.Socket.checkClosedAndCreate(Socket.java:873)
at java.net.Socket.connect(Socket.java:1020)

。。。。

这里假设手机或者模拟器可以正常上网,不能上网的请忽略此文。

原因分析:

1.  app的manifest文件需要添加联网的权限。

大部分人出错都是这个原因。如下:

<uses-permission android:name="android.permission.INTERNET"/>

具体添加位置可参考

http://blog.csdn.net/ilysony/article/details/6267215


2. AndroidManifest.xml文件中android:targetPackage的值,即包名错误。

这个是我今天调试犯的错误,找了好久才发现原因。
创建可执行junit测试的Android应用程序时,需要在AndroidManifest.xml的指定位置添加以下信息:
<!-- 这个添加在manifest节点下 -->
<instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.hunter.querymobile" />

<!-- 这个添加在application节点下 -->
<uses-library android:name="android.test.runner" />

特别需要注意的是,每次添加这部分信息时一定要修改targetPackage的包名,我的代码就是忘了修改这个包名导致错误的


3. 修改后的最新代码没有正常编译。

Clean一下代码,可能是刚修改的代码没有重新编译造成的。这个是在网上看到的一个情况。
菜单栏-->Project-->Clean...

原创粉丝点击