CN113157464A - 一种将Linux端输入事件共享给Android的方法 - Google Patents

一种将Linux端输入事件共享给Android的方法 Download PDF

Info

Publication number
CN113157464A
CN113157464A CN202110270023.4A CN202110270023A CN113157464A CN 113157464 A CN113157464 A CN 113157464A CN 202110270023 A CN202110270023 A CN 202110270023A CN 113157464 A CN113157464 A CN 113157464A
Authority
CN
China
Prior art keywords
android
linux
input event
input
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202110270023.4A
Other languages
English (en)
Inventor
刘晓东
吴庆波
余杰
彭龙
李翔
黄晟
彭欢
马超
黄彩龙
陈乐林
彭韬
游远
杨硕
文波
邓男
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
National University of Defense Technology
Kirin Software Co Ltd
Original Assignee
National University of Defense Technology
Kirin Software Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by National University of Defense Technology, Kirin Software Co Ltd filed Critical National University of Defense Technology
Priority to CN202110270023.4A priority Critical patent/CN113157464A/zh
Publication of CN113157464A publication Critical patent/CN113157464A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/543User-generated data transfer, e.g. clipboards, dynamic data exchange [DDE], object linking and embedding [OLE]

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

一种将Linux端输入事件共享给Android的方法,所述方法包括步骤:获取和发送Linux输入事件;改造和数据处理Android端EventHub。与现有技术相比,本发明可以获得包括以下技术效果:通过将Linux从输入子系统获取的输入事件数据以socket的方式发送给Android,并让经过改造的Android EventHub从本地socket读取这些输入事件数据后再走原生Android处理输入事件的流程,达到解决共用同一个内核的Linux系统和容器中的安卓环境因争抢输入事件导致的冲突问题,实现Linux系统和容器中的安卓环境,以及多容器实例之间的安卓环境彼此都能正常响应和处理输入事件的效果。

Description

一种将Linux端输入事件共享给Android的方法
技术领域
本发明属于Android系统技术领域,具体涉及一种将Linux端输入事件共享给Android的方法。
背景技术
近年来,随着Android用户的增长,以及Android软硬件产品的成熟和发展,Android应用生态呈现出爆发式发展,在很多领域都已经超过Windows和iOS,成为目前使用最广泛的应用生态。Android基于Linux内核发展而来,是目前移动终端市场中市场份额最高的Linux类操作系统,在移动终端领域具有极好的生态环境;Windows系统占据着PC市场的最大份额,其作为美国闭源操作系统,在信息网络安全方面存在巨大安全隐患;而Linux操作系统,其作为Android的前身,由于开发人员数目和市场份额的限制,发展较为缓慢,生态环境长期处于不良状态,一直不见起色。随着信息技术的飞速发展,国家对信息安全的重视程度日益提升,国内基于开源Linux操作系统的自主操作系统日益发展壮大,但Linux操作系统生态应用的严重缺乏仍旧是困扰Linux操作系统真正推向市场的一大痛点。
要解决Linux操作系统的生态问题,必须解决用户数不足和平台应用软件数不足这两个关键点。Android在移动终端领域具有广泛的用户群,并且具有成熟的开发平台和应用软件群体,对于解决Linux操作系统目前的窘境具有一定的参考价值。
由于Android操作系统基于Linux内核发展而来,其针对移动终端设备的特点在用户空间做了大幅的改进和增强,所以给Linux操作系统兼容Android应用提供了极大的可能性和便利,使得移动端的丰富应用很有可能成功运行在PC端。近年来,Android应用生态在Linux操作系统上的兼容支持成为了研究热点,国内外有许多研究人员尝试将Android运行环境迁移到Linux类计算机平台以实现Android应用生态在Linux操作系统上兼容支持的效果,各种兼容技术衍生而出,其中就包括Google的ARC(App Runtime for Chrome)技术,虚拟机和模拟器技术、Anbox(Android in a Box)项目等,这些技术将PC端和移动端进行融合,成功将Android应用生态迁移到Linux上来,极大地推动了Linux应用生态的发展,很大程度上弥补了Linux应用缺乏的诟病,方便了Linux操作系统用户的日常办公、娱乐等需求,也加快了Linux操作系统走向消费市场的步伐,但它们都还存在着用户无法忽视的体验问题,包括稳定性、易用性、功能完备性等,导致这块技术领域没有显著的提升。
Linux下的输入设备种类众多,包括鼠标、键盘、触摸板、触摸屏、手柄等等,Linux内核将这些字符设备的共同性抽象出来,建立了一个input输入子系统,每个输入设备在/dev/input/目录下都有一个对应的硬件设备节点,如/dev/input/mice、/dev/input/event0、/dev/input/mouse1等等。在Linux操作系统和原生Android系统上,所有输入都是由输入子系统统一管理,经过前期处理后到达用户空间传给应用程序。输入子系统是所有I/O设备驱动的中间层,屏蔽了用户到设备驱动的交互细节,为设备驱动层和事件处理层提供了相互通信的统一接口。但是对于共用同一个内核的Linux系统和容器中的安卓环境来说,如果将Linux端的输入设备节点映射到安卓环境中,将会导致两个输入子系统争抢输入事件造成冲突,也会导致多个容器实例的安卓环境之间造成输入事件的冲突,而不将输入设备节点映射到安卓环境中,则会造成容器中的安卓环境无法读取到输入事件,从而影响整个环境的正常使用。因此迫切需要找到一种将Linux端输入事件共享给Android的方法,让容器中的安卓环境可以正常获取到输入事件,且多个容器实例之间的输入事件不会给彼此造成冲突,更不会因为容器中安卓环境的输入事件对Linux桌面的输入事件造成冲突,影响到Linux桌面的正常使用。
发明内容
为解决上述问题,本发明提供了一种将Linux端输入事件共享给Android的方法,所述方法包括步骤:
获取和发送Linux输入事件;
改造和数据处理Android端EventHub。
优选地,所述获取和发送Linux输入事件包括步骤:
在容器路径下Linux端创建三个本地socket文件;
Linux图形窗口程序获取输入事件的类型和坐标数据;
所述Linux端将所述输入事件数据组合处理为数据集合;
根据所述类型将所述数据集合分别写入对应的所述本地socket文件中。
优选地,所述改造和数据处理Android端EventHub包括步骤:
对EventHub进行支持从本地socket文件读取数据的功能扩展;
Android启动时将容器目录下的三个socket文件链接到Android内;
EventHub从链接到Android里面的三个socket文件读取数据并整理成RawEvent;
InputReader根据输入事件的类型把RawEvent加工成Android事件NotifyArgs;
InputDispatcher把NotifyArgs转化成EventEntry,并根据当前焦点窗口把EventEntry转化成InputMessage,存放到InputChannel;
处于焦点窗口的应用在下一帧渲染触发之时,从InputChannel取出InputMessage,再把InputMessage转化成InputEvent,由ViewRootImpl分发到给对应的视窗处理。
与现有技术相比,本发明可以获得包括以下技术效果:通过将Linux从输入子系统获取的输入事件数据以socket的方式发送给Android,并让经过改造的Android EventHub从本地socket读取这些输入事件数据后再走原生Android处理输入事件的流程,达到解决共用同一个内核的Linux系统和容器中的安卓环境因争抢输入事件导致的冲突问题,实现Linux系统和容器中的安卓环境,以及多容器实例之间的安卓环境彼此都能正常响应和处理输入事件的效果。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是Android兼容环境的整体框架图。
图2是本发明提供的一种将Linux端输入事件共享给Android的方法中Android的整体架构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明了,下面结合具体实施方式并参照附图,对本发明进一步详细说明。应该理解,这些描述只是示例性的,而并非要限制本发明的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。
如图1-2,在本申请实施例中,本发明提供了一种将Linux端输入事件共享给Android的方法,所述方法包括步骤:
获取和发送Linux输入事件;
改造和数据处理Android端EventHub。
在本申请实施例中,所述获取和发送Linux输入事件包括步骤:
在容器路径下Linux端创建三个本地socket文件;
Linux图形窗口程序获取输入事件的类型和坐标数据;
所述Linux端将所述输入事件数据组合处理为数据集合;
根据所述类型将所述数据集合分别写入对应的所述本地socket文件中。
在本申请实施例中,所述改造和数据处理Android端EventHub包括步骤:
对EventHub进行支持从本地socket文件读取数据的功能扩展;
Android启动时将容器目录下的三个socket文件链接到Android内;
EventHub从链接到Android里面的三个socket文件读取数据并整理成RawEvent;
InputReader根据输入事件的类型把RawEvent加工成Android事件NotifyArgs;
InputDispatcher把NotifyArgs转化成EventEntry,并根据当前焦点窗口把EventEntry转化成InputMessage,存放到InputChannel;
处于焦点窗口的应用在下一帧渲染触发之时,从InputChannel取出InputMessage,再把InputMessage转化成InputEvent,由ViewRootImpl分发到给对应的视窗处理。
图1是Android兼容环境的整体框架图,从图中可以看出,Linux和Android共享同一个内核,Android环境运行在容器中,Linux显示窗口程序通过Linux端的服务程序和容器里的Android进行通信。InputFlinger服务通过EventHub读取输入事件的数据,这里的读取的/dev/input/*并不是原生Android使用的输入硬件的设备节点,而是Linux端创建的本地socket文件的链接。Android InputFlinger中负责管理输入事件的主要是InputManagerService服务(IMS),输入管理服务IMS的主要任务是从设备节点中读取事件数据,然后将输入事件发送到焦点窗口中去。
图2是本发明将Linux端输入事件共享给Android的整体架构示意图,右边是Linux端管理输入事件的大致流程,左边是Android内部处理输入事件的流程,Linux图形程序获取到输入事件后,将数据事件数据通过本地socket发送给Android,Android的EventHub通过本地socket读取输入事件数据进行处理。Linux输入子系统是字符设备驱动程序,向上为用户层提供调用接口,向下为驱动层程序提供统一的注册接口。输入设备的事件通过输入子系统发送给用户层应用程序,用户层应用程序也可以通过输入子系统通知驱动程序完成某项功能。在Linux操作系统的/dev/input目录下,存放着内核支持的所有输入事件的列表,如event0、event1、event2等,这些节点都是跟具体硬件有关的,每一款设备的具体节点名不一样,任何input device可以根据自身的硬件属性提供不同类型的event给上层,每个event将上报指定的事件,如KeyBoard、Mouse、TouchScreen等,与event对应的相关设备信息记录在/proc/bus/input/devices文件中,可以通过查看该文件找到对应设备的event。
具体实现方式如下:
(1)Linux输入事件的获取和发送:
Linux输入子系统是Linux下的字符类驱动系统,由Input driver(驱动层)、Inputcore(输入子系统核心)、Event handler(事件处理层)三部分组成。其中Input driver主要实现对硬件设备的读写访问、中断设置,并把硬件产生的事件转换为核心层定义的规范提交给事件处理层;Input core承上启下,为设备驱动层提供了规范和接口,并通知事件处理层对事件进行处理;Event handler提供用户编程的接口(设备节点),并处理驱动层提交的数据。为了获取Linux的输入事件并将事件数据发送给Android,本技术采用Linux图形程序从输入子系统获取数据后使用本地socket发送的方式将数据发送给Android,大致过程如下:在Linux端创建三个本地socket,第一个负责传送鼠标滚轮、鼠标右键等事件,第二个负责传送鼠标拖拽、鼠标点击等事件,最后一个负责传送键盘字符输入事件。一个输入事件通过Input driver->Input core->Event handler->userspace的顺序到达用户空间的Linux图形窗口程序,Linux图形程序使用事件过滤器获取事件类型(如左键点击、左键释放、鼠标移动、滚轮滚动等)、坐标等数据,并将数据进行前期处理,整合成一个数据集合后再发送给Android,集合中的每个数据都包括输入设备的事件类型(如绝对坐标EV_ABS、按键事件EV_KEY、同步事件EV_SYN等)、code(如表示触摸位置坐标X的ABS_MT_POSITION_X,触摸位置坐标Y的ABS_MT_POSITION_Y,键盘按键键的KeyCode等)、value(如接收到的坐标的X值或Y值,键盘按键按下或释放的值1或0等)、时间(事件发生的时间值)等。
(2)Android端EventHub的改造:
原生Android中输入子系统和Linux一样,会在/dev/input/路径下读写以event*为名的硬件输入事件节点。Android EventHub汇总系统上所有输入设备(包括模拟器)接收的输入事件,通过打开与每个输入事件关联的evdev驱动程序从内核读取输入事件。如果在Android兼容环境中让EventHub也从/dev/input/event*这些输入事件的节点读取数据,势必会造成Linux和Android同时从这里读取数据导致的一些异常情况发生,比如双鼠标响应以及造成的冲突等问题。为了解决这些问题,本发明对原本只能读字符设备的AndroidEventHub赋予了一种可以读取本地socket数据的能力,Android Event不再从/dev/input/下的字符设备读取输入事件数据,而是读取Linux通过本地socket发送过来的输入事件数据,如图2所示,Android侧从内核空间到用户空间是用虚线箭头表示的,表示容器里的Android不是使用驱动程序从内核读取输入事件,而是通过socket从Linux端的图形窗口程序获取输入事件。Android Native层的InputManager中的InputReader负责使用EventHub从Input Driver中根据设备类别解码输入事件(epoll方式),EventHub读取数据后,由InputMapper负责解析,然后传给InputDispatcher,InputDispatcher将这些事件投递给上层的Android应用程序,即传给焦点及监视窗口,并由PhoneWindowManager处理系统输入事件。为了让Android可以读取本地socket,还需要将Linux端在容器目录下创建的三个socket文件链接到Android内,EventHub从链接到Android里面的三个socket文件读取数据。
本发明的有益效果是:增强了Android EventHub的功能,不仅支持从输入硬件设备节点读取数据,也支持从本地socket读取数据。通过将Linux从输入子系统获取的输入事件数据以socket的方式发送给Android,EventHub从本地socket读取这些输入事件数据后执行原生Android处理输入事件的流程,达到解决共用同一个内核的Linux系统和容器中的安卓环境因争抢输入事件导致的冲突问题,实现Linux系统和容器中的安卓环境,以及多容器实例之间的安卓环境彼此都能正常响应和处理输入事件的效果。
应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。

Claims (3)

1.一种将Linux端输入事件共享给Android的方法,其特征在于,所述方法包括步骤:
获取和发送Linux输入事件;
改造和数据处理Android端EventHub。
2.根据权利要求1所述的将Linux端输入事件共享给Android的方法,其特征在于,所述获取和发送Linux输入事件包括步骤:
在容器路径下Linux端创建三个本地socket文件;
Linux图形窗口程序获取输入事件的类型和坐标数据;
所述Linux端将所述输入事件数据组合处理为数据集合;
根据所述类型将所述数据集合分别写入对应的所述本地socket文件中。
3.根据权利要求1所述的将Linux端输入事件共享给Android的方法,其特征在于,所述改造和数据处理Android端EventHub包括步骤:
对EventHub进行支持从本地socket文件读取数据的功能扩展;
Android启动时将容器目录下的三个socket文件链接到Android内;
EventHub从链接到Android里面的三个socket文件读取数据并整理成RawEvent;
InputReader根据输入事件的类型把RawEvent加工成Android事件NotifyArgs;
InputDispatcher把NotifyArgs转化成EventEntry,并根据当前焦点窗口把EventEntry转化成InputMessage,存放到InputChannel;
处于焦点窗口的应用在下一帧渲染触发之时,从InputChannel取出InputMessage,再把InputMessage转化成InputEvent,由ViewRootImpl分发到给对应的视窗处理。
CN202110270023.4A 2021-04-27 2021-04-27 一种将Linux端输入事件共享给Android的方法 Pending CN113157464A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110270023.4A CN113157464A (zh) 2021-04-27 2021-04-27 一种将Linux端输入事件共享给Android的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110270023.4A CN113157464A (zh) 2021-04-27 2021-04-27 一种将Linux端输入事件共享给Android的方法

Publications (1)

Publication Number Publication Date
CN113157464A true CN113157464A (zh) 2021-07-23

Family

ID=76886891

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110270023.4A Pending CN113157464A (zh) 2021-04-27 2021-04-27 一种将Linux端输入事件共享给Android的方法

Country Status (1)

Country Link
CN (1) CN113157464A (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113655940A (zh) * 2021-08-24 2021-11-16 深圳技德应用技术有限公司 一种Linux兼容Android的模拟双指缩放方法及装置
CN113672407A (zh) * 2021-08-24 2021-11-19 深圳技德终端技术有限公司 一种Linux兼容Android的键盘输入控制方法及装置
CN113791875A (zh) * 2021-11-18 2021-12-14 北京鲸鲮信息系统技术有限公司 输入设备虚拟化的方法、装置、电子设备和存储介质
CN114035863A (zh) * 2021-11-11 2022-02-11 北京鲸鲮信息系统技术有限公司 在Linux系统中操作安卓应用的方法、装置和设备
CN114201134A (zh) * 2022-02-17 2022-03-18 北京麟卓信息科技有限公司 安卓兼容环境中多窗口模式下Toast的优化显示方法
CN114416044A (zh) * 2022-03-28 2022-04-29 北京麟卓信息科技有限公司 一种Linux平台下安卓应用的输入方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103593185A (zh) * 2013-11-04 2014-02-19 浙江大学 基于单Linux内核的多Android系统共享输入显示设备的方法
CN112231017A (zh) * 2020-10-27 2021-01-15 北京技德系统技术有限公司 在Linux上兼容运行Android操作系统的虚拟键鼠方法与装置
CN112269604A (zh) * 2020-11-11 2021-01-26 北京技德系统技术有限公司 在Linux上兼容运行Android应用的窗口交互方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103593185A (zh) * 2013-11-04 2014-02-19 浙江大学 基于单Linux内核的多Android系统共享输入显示设备的方法
CN112231017A (zh) * 2020-10-27 2021-01-15 北京技德系统技术有限公司 在Linux上兼容运行Android操作系统的虚拟键鼠方法与装置
CN112269604A (zh) * 2020-11-11 2021-01-26 北京技德系统技术有限公司 在Linux上兼容运行Android应用的窗口交互方法及装置

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113655940A (zh) * 2021-08-24 2021-11-16 深圳技德应用技术有限公司 一种Linux兼容Android的模拟双指缩放方法及装置
CN113672407A (zh) * 2021-08-24 2021-11-19 深圳技德终端技术有限公司 一种Linux兼容Android的键盘输入控制方法及装置
CN114035863A (zh) * 2021-11-11 2022-02-11 北京鲸鲮信息系统技术有限公司 在Linux系统中操作安卓应用的方法、装置和设备
CN113791875A (zh) * 2021-11-18 2021-12-14 北京鲸鲮信息系统技术有限公司 输入设备虚拟化的方法、装置、电子设备和存储介质
WO2023088313A1 (zh) * 2021-11-18 2023-05-25 北京字节跳动网络技术有限公司 输入设备虚拟化的方法、装置、电子设备和存储介质
CN114201134A (zh) * 2022-02-17 2022-03-18 北京麟卓信息科技有限公司 安卓兼容环境中多窗口模式下Toast的优化显示方法
CN114201134B (zh) * 2022-02-17 2022-04-29 北京麟卓信息科技有限公司 安卓兼容环境中多窗口模式下Toast的优化显示方法
CN114416044A (zh) * 2022-03-28 2022-04-29 北京麟卓信息科技有限公司 一种Linux平台下安卓应用的输入方法及装置
CN114416044B (zh) * 2022-03-28 2022-07-12 北京麟卓信息科技有限公司 一种Linux平台下安卓应用的输入方法及装置

Similar Documents

Publication Publication Date Title
CN113157464A (zh) 一种将Linux端输入事件共享给Android的方法
CN110597595B (zh) 多语言信息的提供方法、配置方法、装置、设备和介质
CN112988419A (zh) 一种将Linux输入法共享给Android的方法
JPH04233654A (ja) コンピュータシステム
CN110389935B (zh) 一种启动小程序的方法、设备和计算机存储介质
CN103345405A (zh) 应用程序的启动方法、装置和客户端
CN112231017B (zh) 在Linux上兼容运行Android运行环境的虚拟键鼠方法与装置
CN112988675B (zh) 一种基于Linux文件管理器的Android文件分类显示方法
CN109636669B (zh) 一种基于多进程架构的变电站在线监控方法
CN110389796A (zh) 编辑操作处理方法、装置及电子设备
CN112860364A (zh) 一种基于Linux内核的Android图形显示方法
CN108875011B (zh) 第三方应用的页面状态信息获取方法、装置、设备及介质
CN113037545A (zh) 网络仿真方法、装置、设备和存储介质
US20240211116A1 (en) Screen recording interaction method and apparatus, and electronic device and computer-readable storage medium
CN106843794A (zh) 一种基于安卓的分屏显示方法和系统
CN111078104A (zh) 一种云桌面上的多点触控设备的重定向方法及计算机设备
CN113961295A (zh) 设备交互控制方法、装置、电子设备和可读存储介质
CN108520063A (zh) 事件日志的处理方法、装置及终端设备
CN106775445B (zh) 数据迁移方法及装置
CN109873861B (zh) 跨区块链节点的交互方法及装置、存储介质及电子设备
CN113312119B (zh) 信息同步方法及装置、计算机可读存储介质、电子设备
CN111324398A (zh) 最近内容的处理方法、装置、终端及存储介质
CN113655940A (zh) 一种Linux兼容Android的模拟双指缩放方法及装置
CN106383705B (zh) 在应用瘦客户端中设置鼠标显示状态的方法及装置
CN113778270A (zh) 一种拖动图标的方法和装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20210723