通过 JNI 操作设备 /dev/input/event0 返回 -1 是为什么?

91program
博客专家认证
2014-12-03 11:38:34
基本上是按文章:Android 模拟系统事件(二)来做的,可以是 open 设备 /dev/input/event0 时返回 -1.
偶试着获取了 ROOT 权限,也还是一样返回 -1;
通过 ADB Shell 浏览设备上 dev 目录下确实有:/dev/input/event0。
大家说说这是为什么啊!

附一些代码:
fd = jniClick.intCreate("/dev/input/event0", 1);



/*
* Class: com_hs_leozheng_ndkeumclick_jniClick
* Method: intCreate
* Signature: (Ljava/lang/String;I)I
*/
JNIEXPORT jint JNICALL Java_com_hs_leozheng_ndkeumclick_jniClick_intCreate(
JNIEnv *env, jclass thiz, jstring inputdev, jint mouse)
{
jboolean iscopy;
char szDev[255] = "";
const char *pszDev = (*env)->GetStringUTFChars(env, inputdev, &iscopy);
if (pszDev) strncpy(szDev, pszDev, 255);
(*env)->ReleaseStringUTFChars(env, inputdev, pszDev);
debug("intCreate call (%s)", szDev);

struct uinput_dev dev;
int fd_kb, aux;

fd_kb = open(szDev, O_RDWR);
if (fd_kb < 0) {
debug("Can't open input device:%s(%d)", szDev,fd_kb);
// Leo: Can't open input device:/dev/input/event0(-1)
return -1;
}

memset(&dev, 0, sizeof(dev));
strcpy(dev.name, "AndroidKeyInjector Input");
dev.id.bustype = 0x0003; // BUS_USB;
dev.id.vendor = 0x0000;
dev.id.product = 0x0000;
dev.id.version = 0x0000;

if (write(fd_kb, &dev, sizeof(dev)) < 0) {
debug("Can't write device information");
close(fd_kb);
return -1;
}

if (mouse) {
ioctl(fd_kb, UI_SET_EVBIT, EV_REL);
for (aux = REL_X; aux <= REL_MISC; aux++)
ioctl(fd_kb, UI_SET_RELBIT, aux);
}

if (mouse) {
ioctl(fd_kb, UI_SET_EVBIT, EV_KEY);

for (aux = BTN_LEFT; aux <= BTN_BACK; aux++)
ioctl(fd_kb, UI_SET_KEYBIT, aux);
}

ioctl(fd_kb, UI_DEV_CREATE);
debug("intCreate success: %d", fd_kb);
return fd_kb;
}
...全文
578 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010192251 2016-04-28
  • 打赏
  • 举报
回复
chmod 777 /dev/input/event2 需要修改文件权限
91program 2014-12-19
  • 打赏
  • 举报
回复
NDK + JNI 啊,大神出现吧
91program 2014-12-17
  • 打赏
  • 举报
回复
引用 3 楼 hopease 的回复:
感觉好难的问题哦,帮 LZ 顶一下
顶起啊,好多的应用都有这样的功能。 应该不难吧!
hopease 2014-12-15
  • 打赏
  • 举报
回复
感觉好难的问题哦,帮 LZ 顶一下
91program 2014-12-08
  • 打赏
  • 举报
回复
是不是 APK 安装的 JNI 模块,权限不够? 如果是,我如何解决呢?
91program 2014-12-08
  • 打赏
  • 举报
回复
高手呢?怎么没有人回复啊!!!

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧