首页> 中国专利> 在x86架构上运行ARM APK的模拟器装置和方法

在x86架构上运行ARM APK的模拟器装置和方法

摘要

提供了一种在x86架构上运行ARM APK的模拟器装置和方法。一种Android模拟器装置,包括:APK安装模块,解析安装的APK并对包含ARM的动态链接库的APK进行标记;APK运行模块,根据APK安装模块所做的标记使被启动的APK运行在对应的虚拟机上,其中,虚拟机包括基于x86架构的虚拟机和基于ARM架构的虚拟机;CPU指令翻译模块,将运行在基于ARM架构的虚拟机上的APK的CPU指令翻译成x86指令。

著录项

  • 公开/公告号CN103885814A

    专利类型发明专利

  • 公开/公告日2014-06-25

    原文格式PDF

  • 申请/专利权人 百度在线网络技术(北京)有限公司;

    申请/专利号CN201410104264.1

  • 发明设计人 孙元臻;张蔚;禤彪;

    申请日2014-03-20

  • 分类号G06F9/455;

  • 代理机构北京铭硕知识产权代理有限公司;

  • 代理人曾世骁

  • 地址 100085 北京市海淀区上地十街10号百度大厦三层

  • 入库时间 2024-02-20 00:15:49

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-05-17

    授权

    授权

  • 2014-07-30

    著录事项变更 IPC(主分类):G06F9/455 变更前: 变更后: 申请日:20140320

    著录事项变更

  • 2014-07-16

    实质审查的生效 IPC(主分类):G06F9/455 申请日:20140320

    实质审查的生效

  • 2014-06-25

    公开

    公开

说明书

技术领域

本发明涉及模拟器技术领域,更具体地,涉及一种在x86架构上运行包 含ARM动态链接库的APK的Android模拟器装置和方法。

背景技术

目前,Android操作系统被广泛应用于移动计算领域。在Android操作系 统的应用程序开发中,通常会使用Android模拟器。Android模拟器能够模拟 除了接听和拨打电话外的所有移动设备上的典型功能和行为。Android模拟器 提供了大量的导航和控制键,从而使用户可以通过鼠标或键盘点击这些按键 来为应用程序产生事件。同时,Android模拟器还可显示Android自带应用程 序和用户的应用程序。为了便于模拟和测试应用程序,Android模拟器允许用 户的应用程序通过Android平台服务调用其他程序、访问网络、播放音频和 视频、保存和传输数据、通知用户、渲染图像过渡和场景。Android模拟器同 样具有强大的调试能力,例如能够记录内核输出的控制台、模拟程序中断(比 如接收短信或打入电话)、模拟数据通道中的延时效果和遗失。因此,Android 模拟器的使用对于Android应用程序的开发具有重要的意义。

Android模拟器分为ARM架构和x86架构两种。其中,x86架构下的 Android模拟器的性能是ARM架构下的Android模拟器(以下简称“ARM模 拟器”)的10倍以上。但是,x86架构下的Android模拟器无法运行包含ARM 动态链接库的APK(以下简称为“ARM APK”),原因是x86架构的CPU指 令集与ARM架构的CPU指令集不兼容。

因此,需要一种在x86架构的模拟器上运行包含ARM动态链接库的APK 的Android模拟器装置和方法。

发明内容

本发明的一方面提供一种在x86架构上运行包含ARM动态链接库的 APK的Android模拟器装置,包括:APK安装模块,解析安装的APK并对 包含ARM的动态链接库的APK进行标记;APK运行模块,根据APK安装 模块所做的标记使被启动的APK运行在对应的虚拟机上,其中,虚拟机包括 基于x86架构的虚拟机和基于ARM架构的虚拟机;CPU指令翻译模块,将 运行在基于ARM架构的虚拟机上的APK的CPU指令翻译成x86指令。

根据本发明的一方面,APK安装模块通过判断在APK的lib目录下是否 包含“arm”目录来确定APK是否包含ARM动态链接库。

根据本发明的一方面,APK安装模块在确定安装的APK包含ARM动态 链接库的情况下,在该APK的目录下新建用于指示ARM动态链接库的存在 的文件。

根据本发明的一方面,Android模拟器装置还包括:虚拟机模块,根据 APK运行模块发出的通知消息来初始化对应的虚拟机,并使用对应的虚拟机 来运行被启动的APK,其中,基于x86架构的虚拟机和基于ARM架构的虚 拟机被实现为Android Dalvik虚拟机的Zygote进程。

根据本发明的一方面,基于ARM架构的虚拟机运行在CPU指令翻译模 块启动的进程之上。

根据本发明的另一方面,一种在x86架构的Android模拟器上运行包含 ARM动态链接库的APK的方法包括:解析安装的APK并对包含ARM的动 态链接库的APK进行标记;根据APK安装模块所做的标记使被启动的APK 运行在对应的虚拟机上其中,虚拟机包括基于x86架构的虚拟机和基于ARM 架构的虚拟机;将运行在基于ARM架构的虚拟机上的APK的CPU指令翻 译成x86指令。

根据本发明的另一方面,对包含ARM的动态链接库的APK进行标记包 括:通过判断在APK的lib目录下是否包含“arm”目录来确定APK是否包 含ARM动态链接库。

根据本发明的另一方面,对包含ARM的动态链接库的APK进行标记包 括:如果确定安装的APK包含ARM动态链接库,则在该APK的目录下新 建用于指示ARM动态链接库的存在的文件。

根据本发明的另一方面,根据APK安装模块所做的标记使被启动的APK 运行在对应的虚拟机上包括:发出通知消息以通知Android模拟器使用不同 的虚拟机来运行被启动的APK,其中,基于x86的虚拟机和基于ARM的虚 拟机分别实现为Android Dalvik虚拟机的Zygote进程。

根据本发明的另一方面,基于ARM架构的虚拟机运行在CPU指令翻译 模块启动的进程之上。

附图说明

通过下面结合附图进行的描述,本发明的上述和其他目的和特点将会变 得更加清楚,其中:

图1是示出根据本发明实施例的在x86架构上运行包含ARM动态链接 库的APK的Android模拟器装置的配置框图;

图2是示出根据本发明实施例的在x86架构的Android模拟器上运行包 含ARM动态链接库的APK的方法的流程图。

具体实施方式

下面提供参照附图进行的描述以有助于全面理解如权利要求及其等同物 所限定的本发明的示例性实施例。在所述描述中,除非明确指明,否则相同 的变量具有相同的定义。所述描述包括各种详细的细节以有助于理解,而这 些描述将被认为仅为示例性的。因此,本领域的普通技术人员将意识到在不 脱离本发明的范围和精神的情况下可做出在此描述的各种改变和变型。另外, 为了清晰和简洁,可省略对公知功能和构造的描述。

图1是示出根据本发明实施例的用于在x86架构上运行包含ARM动态 链接库的APK的Android模拟器装置的配置框图。

如图1所示,根据本发明实施例的于在x86架构上运行包含ARM动态 链接库的APK的Android模拟器装置100包括:APK安装模块110、APK启 动模块120、虚拟机模块130和CPU指令翻译模块140。

APK安装模块110用于解析用户所安装的APK,并在安装的APK包含 ARM的动态链接库时对该APK进行特殊的标记。

通常,在x86架构的Android模拟器上运行的Android系统中,其支持 的指令集变量被设置为“x86”。在用户安装APK时,Android模拟器会将APK 文件解压,然后查询lib目录下是否有x86目录。如果有,则Android模拟器 将x86目录下的动态链接库文件拷贝到Android系统中;如果没有,则不进 行任何操作。

根据本发明实施例的用于在x86架构上运行包含ARM动态链接库的 APK的模拟器装置100的APK安装模块110在此基础上进行了扩展。根据 本发明实施例的APK安装模块110判断安装的APK是否是包含有ARM动 态链接库。

具体地,根据本发明的一个实施例,APK安装模块110可根据以下方式 来判断APK中是否存在ARM动态链接库。APK安装模块110将模拟器100 支持的指令集变量设置为“x86”和“arm”两个值。在用户安装APK时,在 对APK进行解压之后,APK安装模块110会优先判断在APK的lib目录下 是否包含x86目录。如果有,则APK安装模块110将x86目录下的动态链接 库文件拷贝到Android系统中。如果不存在x86目录,则APK安装模块110 还判断安装的APK的lib目录下是否存在“arm”目录。如果存在“arm”目 录,则APK安装模块110确定安装的APK中存在ARM动态链接库。

接下来,在确定存在ARM动态链接库之后,APK安装模块110将arm 目录下的库文件拷贝到android系统中,并且对该安装的APK进行标记。根 据本发明的一个实施例,APK安装模块110可以在APK的目录下新建一个 用于指示ARM动态链接库的存在的文件。例如,可以将该文件命名为 “ARM_FLAG”,并且文件内容为空。这样,在后续的处理中,如果APK包 含“ARM_FLAG”文件,就表明该APK包含ARM的动态链接库(以下,称 为ARM APK);反之,如果不存在该文件,则表明该APK不包含ARM动态 链接库。

在安装完成之后运行该安装的APK时,APK运行模块120根据APK安 装模块110做的标记来相应地运行该APK。具体地,APK运行模块120可检 查运行的APK的目录下是否存在名称为“ARM_FLAG”的文件。如果存在 该文件,则APK运行模块120发送消息通知虚拟机模块130使用ARM架构 的虚拟机来运行APK。如果不存在该文件,则APK运行模块120发送消息 通知虚拟机模块130使用x86架构的虚拟机来运行该APK。应理解,在APK 中添加指示包含ARM动态链接库的标记的方式不限于上述的方法,例如, 还可在APK中添加指示ARM动态链接库的语句等方式。

虚拟机模块130包括基于x86架构的虚拟机和基于ARM架构的虚拟机, 虚拟机模块130可根据APK运行模块120的通知消息来初始化并使用不同的 虚拟机来运行APK。基于x86的虚拟机和基于ARM的虚拟机可分别实现为 Android Dalvik虚拟机的Zygote进程。这样,包含ARM动态链接库的APK 可运行在基于ARM架构的虚拟机上,从而无论APK包含x86或是ARM的 动态链接库,都可以在模拟器100中被启动。

CPU指令翻译模块140用于将ARM架构下的CPU指令翻译成x86指令。 基于ARM架构的虚拟机可运行在CPU指令翻译模块140之上。当APK运 行模块120确定要运行ARM APK时,其通知CPU指令翻译模块140启动一 个进程,并将运行在基于ARM的虚拟机上的ARM APK的程序加载入该进 程,开始运行主函数main。这样,CPU指令翻译模块140可将每一条ARM 指令翻译成x86指令,从而可以在x86的Android模拟器上执行。例如,在 ARM动态链接库被加载后给出vadd.i16指令,则CPU指令翻译模块140将 该指令翻译成paddw指令,然后通过x86的Android模拟器使x86架构的CPU 执行该指令。又例如,当ARM动态链接库给出vshl.u8指令时,CPU指令翻 译模块140将该指令翻译成psllw、movd、pinsrw、pand四个指令,然后让 x86的CPU执行该组指令。

应理解,以上的APK安装模块110、APK启动模块120、虚拟机模块130 和CPU指令翻译模块140可根据实际需求被划分为更多的模块,或者被组合 为更少的模块。

下面将参照图2的流程图来说明根据本发明实施例的在x86架构的 Android模拟器上运行包含ARM动态链接库的APK的方法。

首先,在步骤S201,对安装的APK进行分析并对包含ARM动态链接 库的APK进行标记。具体地,在安装模块对APK进行解压之后,首先可判 断安装的APK的lib目录下是否存在“arm”目录。如果存在“arm”目录, 则确定安装的APK中存在ARM动态链接库。这时,可将ARM动态链接库 拷贝到Android系统,并在APK的目录下新建一个文件,命名为 “ARM_FLAG”,文件内容为空,该文件可以用于指示ARM动态链接库的存 在。当然,可以采用其它本领域的技术人员已知的任何方式来对APK进行标 记以指示ARM动态链接库的存在。相反,如果不存在“arm”目录而存在“x86” 目录,则将x86的动态链接库拷贝到Android系统中。

接下来,在步骤S203,确定当前运行的APK是否存在指示ARM动态 链接库的标记。具体地,检查当前运行的APK的目录下是否存在指示ARM 动态链接库的存在的标记。例如,可检查APK的目录下是否存在名称为 “ARM_FLAG”的文件。如果不存在该文件,则在步骤S205,使用x86架构 的虚拟机来运行该APK。如果在步骤S203确定APK包含指示ARM动态链 接库的标记,则在步骤S207使用ARM架构的虚拟机来运行APK。

这里,基于x86的虚拟机和基于ARM的虚拟机可分别实现为Android  Dalvik虚拟机的Zygote进程。包含ARM动态链接库的APK可运行在基于 ARM架构的虚拟机上。

然后,在步骤S209,将运行在基于ARM架构的虚拟机上的APK的CPU 指令翻译成x86指令。基于ARM架构的虚拟机可运行在CPU指令翻译的进 程之上。

通过以上过程,基于x86架构的Android模拟器可运行包含ARM动态 链接库的APK,从而可以在具有更高性能的平台上实现APK的运行,从而 极大地方便了APK的开发和调试。

根据本发明的方法可被记录在包括执行由计算机实现的各种操作的程序 指令的计算机可读介质中。介质也可以只包括程序指令或者包括与程序指令 相结合的数据文件、数据结构等。计算机可读介质的例子包括磁介质(例如硬 盘、软盘和磁带);光学介质(例如CD-ROM和DVD);磁光介质(例如,光盘); 以及特别配制用于存储并执行程序指令的硬件装置(例如,只读存储器 (ROM)、随机存取存储器(RAM)、闪存等)。介质也可以是包括传输规定程序 指令、数据结构等的信号的载波的传输介质(例如光学线或金属线、波导等)。 程序指令的例子包括例如由编译器产生的机器码和包含可使用解释器由计算 机执行的高级代码的文件。

尽管已经参照本发明的示例性实施例具体显示和描述了本发明,但是本 领域的技术人员应该理解,在不脱离由权利要求限定的本发明的精神和范围 的情况下,可以对其进行形式和细节上的各种改变。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号