我正在尝试使用Android CTS。 我在android.permission期间面临问题。
02-05 15:57:27 I/192.168.90.48:5555:
android.permission.cts.NoNetworkStatePermissionTest#testSecurityExceptionFromDns FAIL
junit.framework.AssertionFailedError
at android.permission.cts.NoNetworkStatePermissionTest.testSecurityExceptionFromDns
(NoNetworkStatePermissionTest.java:174)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1661)
在我的猜测中,这个测试检查权限。程序尝试如下:
public void testSecurityExceptionFromDns() throws Exception {
try {
InetAddress.getByName("www.google.com");
fail();
} catch (SecurityException expected) {
}
}
预期的行为是程序抛出安全性异常,因为此应用程序没有
android.permission.INTERNET
但即使它没有许可也可以获得InetAdress。
我该如何解决这种情况?
我已经检查了诸如/ dev / socket
之类的权限有人可以告诉我发生了什么吗?
感谢。
答案 0 :(得分:0)
在清单文件
上添加以下权限<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
答案 1 :(得分:0)
在内核中检查INTERNET
权限,因此您可能正在使用没有所有Android修补程序的内核。假设您已应用补丁,则需要使用CONFIG_ANDROID_PARANOID_NETWORK
进行编译以启用Internet权限检查。检查要求尝试创建套接字等的所有进程都是inet
组(GID 3003)的成员。
答案 2 :(得分:0)
谢谢您的回复。 我解决了这个问题!!!!!!!!! 根本原因来自我们设备的内核版本。我们使用linux_kernel 2.6.34。 因此,没有CONFIG_ANDROID_PARANOID_NETWORK选项,af_inet.c没有定义检查权限的函数。
所以我修改如下:
净/的IPv4 / af_inet.c
/* add ifdef CONFIG_ANDROID_PARANOID_NETWORK for CTS(android.permission) */
#ifdef CONFIG_ANDROID_PARANOID_NETWORK
#include <linux/android_aid.h>
static inline int current_has_network(void)
{
return in_egroup_p(AID_INET) || capable(CAP_NET_RAW);
}
#else
static inline int current_has_network(void)
{
return 1;
}
#endif
/* end add */
static inline int current_has_network(void)
{
return in_egroup_p(AID_INET) || capable(CAP_NET_RAW);
int try_loading_module = 0;
int err;
if (!current_has_network()) // check permission
return -EACCES; // return if it has no permission
if (unlikely(!inet_ehash_secret))
if (sock->type != SOCK_RAW && sock->type != SOCK_DGRAM)
build_ehash_secret();