android权限对于native库开发的影响
来源:互联网 发布:java saas 框架 编辑:程序博客网 时间:2024/06/05 03:26
众所周知,android中对于java app有完整一套权限控制体系。因此,在java app中以jni方式、或者浏览器dlsym方式调用native库,并且native库需要调用linux内核的系统调用时,可能会遇到坑爹的权限问题。
进行系统调用可通过fork+exec族函数(fork时似乎浏览器进程会挂掉)或system()函数。博主调用ping时就遇到此类问题。我的代码如下
int mysystem(const char* pCmd, char* pResult, int size)
{
int fd[2];
if(pipe(fd))
{
printf("pipe error!\n");
return -1;
}
fflush(stdout);
int bak_fd = dup(STDOUT_FILENO);
int new_fd = dup2(fd[1], STDOUT_FILENO);
system(pCmd);
read(fd[0], pResult, size-1);
pResult[strlen(pResult)-1] = 0;
close(fd[0]);
dup2(bak_fd, new_fd);
return 0;
}
结果那行read(fd[0], pResult, size-1);无论如何始终只读出一行PING 192.168.188.44 (192.168.188.44) 56(84) bytes of data,用各种方法,如popen+fread,现象相同。
甚至尝试用自己实现了ping的方法,具体见http://blog.csdn.net/junjieguo/article/details/7678496
但由于socket(PF_INET,SOCK_RAW,IPPROTO_ICMP)时,建立SOCK_RAW型的socket需要root权限,进程马上exit。
无论ping通ping不通,system的返回值WIFEXITED =1,WEXITSTATUS = 512。花了一星期的时间检查,最后在网上搜到是系统命令的权限问题。具体参考http://blog.csdn.net/zjg555543/article/details/7835693
我是这样解决的:
busybox chmod 755 /system/bin/ping
busybox chmod u+s /system/bin/ping
busybox chmod g+s /system/bin/ping
- android权限对于native库开发的影响
- 继承方式对于访问权限的影响
- android启动模式对于体验的影响
- android 程序内部sockettimeoutexception 对于android模拟器 的影响
- 开源框架对于软件开发的影响
- android:layout_weight 属性对于组件长度的影响
- @RequestMapping对于url的影响
- 字体大小对于offsetHeight 的影响
- 对于权限的处理
- 对于android M权限开发者需要知道的事项
- android开发中selinux的影响
- Android开发-对于PendingIntent的简单理解
- 对于Android开发环境的搭建
- 对于项目开发中团队领导者的作用和影响的思考
- IOS开发- C语言static和extern对于函数,变量的影响
- android中添加native服务的权限问题
- 中外文化差异对于易用性的影响
- _disable_logging对于非归档数据库的影响
- Spring Batch 之 Sample(复合格式文件的读、多文件的写)(七)
- 服务器对网站排名的影响
- 在Android平台下实现音视频语音聊天
- 虚函数地址表
- google瓦片地址
- android权限对于native库开发的影响
- Spring Batch 之 Sample(游标方式读写DB数据表)(八)
- c#零碎基础
- winmm.dll 和 ws2_32.dll 简单介绍
- 北京高校讲座信息汇总
- C语言标准库函数 qsort 详解
- Spring Batch 之 skip讲解(九)
- Futher Information About SFP Module
- 详解coredump