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

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

Info

Publication number
CN103885814B
CN103885814B CN201410104264.1A CN201410104264A CN103885814B CN 103885814 B CN103885814 B CN 103885814B CN 201410104264 A CN201410104264 A CN 201410104264A CN 103885814 B CN103885814 B CN 103885814B
Authority
CN
China
Prior art keywords
apk
arm
virtual machine
dynamic link
frameworks
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.)
Active
Application number
CN201410104264.1A
Other languages
English (en)
Other versions
CN103885814A (zh
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.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and Technology 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 Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN201410104264.1A priority Critical patent/CN103885814B/zh
Publication of CN103885814A publication Critical patent/CN103885814A/zh
Application granted granted Critical
Publication of CN103885814B publication Critical patent/CN103885814B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

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

Description

在x86架构上运行ARM APK的模拟器装置和方法
技术领域
本发明涉及模拟器技术领域,更具体地,涉及一种在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)、闪存等)。介质也可以是包括传输规定程序指令、数据结构等的信号的载波的传输介质(例如光学线或金属线、波导等)。程序指令的例子包括例如由编译器产生的机器码和包含可使用解释器由计算机执行的高级代码的文件。
尽管已经参照本发明的示例性实施例具体显示和描述了本发明,但是本领域的技术人员应该理解,在不脱离由权利要求限定的本发明的精神和范围的情况下,可以对其进行形式和细节上的各种改变。

Claims (8)

1.一种在x86架构上运行包含ARM动态链接库的APK的Android模拟器装置,包括:
APK安装模块,解析安装的APK并对包含ARM的动态链接库的APK进行标记;
APK运行模块,根据APK安装模块所做的标记使被启动的APK运行在对应的虚拟机上,其中,虚拟机包括基于x86架构的虚拟机和基于ARM架构的虚拟机;
CPU指令翻译模块,将运行在基于ARM架构的虚拟机上的APK的CPU指令翻译成x86指令以使x86的CPU执行翻译得到的x86指令,从而使得x86架构下的Android模拟器运行包含ARM动态链接库的APK,
其中,基于ARM架构的虚拟机运行在CPU指令翻译模块启动的进程之上。
2.如权利要求1所述的Android模拟器装置,其中,APK安装模块通过判断在APK的lib目录下是否包含“arm”目录来确定APK是否包含ARM动态链接库。
3.如权利要求1所述的Android模拟器装置,其中,APK安装模块在确定安装的APK包含ARM动态链接库的情况下,在该APK的目录下新建用于指示ARM动态链接库的存在的文件。
4.如权利要求1所述的Android模拟器装置,还包括:虚拟机模块,根据APK运行模块发出的通知消息来初始化对应的虚拟机,并使用对应的虚拟机来运行被启动的APK,其中,基于x86架构的虚拟机和基于ARM架构的虚拟机被实现为Android Dalvik虚拟机的Zygote进程。
5.一种在x86架构的Android模拟器上运行包含ARM动态链接库的APK的方法,包括:
解析安装的APK并对包含ARM的动态链接库的APK进行标记;
根据APK安装模块所做的标记使被启动的APK运行在对应的虚拟机上其中,虚拟机包括基于x86架构的虚拟机和基于ARM架构的虚拟机;
将运行在基于ARM架构的虚拟机上的APK的CPU指令翻译成x86指令以使x86的CPU执行翻译得到的x86指令,从而使得x86架构下的Android模拟器运行包含ARM动态链接库的APK,
其中,基于ARM架构的虚拟机运行在CPU指令翻译模块启动的进程之上。
6.如权利要求5所述的方法,其中,对包含ARM的动态链接库的APK进行标记包括:通过判断在APK的lib目录下是否包含“arm”目录来确定APK是否包含ARM动态链接库。
7.如权利要求5所述的方法,其中,对包含ARM的动态链接库的APK进行标记包括:如果确定安装的APK包含ARM动态链接库,则在该APK的目录下新建用于指示ARM动态链接库的存在的文件。
8.如权利要求5所述的方法,其中,根据APK安装模块所做的标记使被启动的APK运行在对应的虚拟机上包括:发出通知消息以通知Android模拟器使用不同的虚拟机来运行被启动的APK,其中,基于x86的虚拟机和基于ARM的虚拟机分别实现为Android Dalvik虚拟机的Zygote进程。
CN201410104264.1A 2014-03-20 2014-03-20 在x86架构上运行ARM APK的模拟器装置和方法 Active CN103885814B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410104264.1A CN103885814B (zh) 2014-03-20 2014-03-20 在x86架构上运行ARM APK的模拟器装置和方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410104264.1A CN103885814B (zh) 2014-03-20 2014-03-20 在x86架构上运行ARM APK的模拟器装置和方法

Publications (2)

Publication Number Publication Date
CN103885814A CN103885814A (zh) 2014-06-25
CN103885814B true CN103885814B (zh) 2017-05-17

Family

ID=50954724

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410104264.1A Active CN103885814B (zh) 2014-03-20 2014-03-20 在x86架构上运行ARM APK的模拟器装置和方法

Country Status (1)

Country Link
CN (1) CN103885814B (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016162721A1 (en) * 2015-04-10 2016-10-13 Google Inc. Binary translation on shared object level
CN104740872B (zh) * 2015-04-13 2018-06-19 北京奇虎科技有限公司 模拟安卓环境中游戏程序运行控制方法及装置
CN106339256B (zh) * 2015-07-06 2019-12-03 阿里巴巴集团控股有限公司 用于自动分配模拟器的方法及装置
CN105824623B (zh) * 2016-03-14 2019-03-26 广州趣丸网络科技有限公司 一种Android应用热修复的方法和装置
CN106445630A (zh) * 2016-08-10 2017-02-22 北京奇虎科技有限公司 Android模拟器及实现Android模拟器的方法
CN107172651B (zh) * 2017-05-23 2019-10-01 北京邮电大学 一种用于移动互联网协议的测试平台及测试方法
TWI643129B (zh) * 2017-08-22 2018-12-01 廣積科技股份有限公司 融合運用系統架構
CN109408393B (zh) * 2018-11-07 2021-07-27 深圳市腾讯网络信息技术有限公司 应用测试方法、装置及设备和计算机可读存储介质
CN112306625B (zh) * 2019-08-02 2023-02-03 华为技术有限公司 一种部署虚拟机的方法及相关装置
CN112860224B (zh) * 2019-11-28 2023-12-12 北京达佳互联信息技术有限公司 一种函数执行环境构建方法、装置、电子设备及存储介质
CN112288428A (zh) * 2020-09-24 2021-01-29 咪咕文化科技有限公司 模拟器的检测方法、装置、电子设备及存储介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2508979B1 (en) * 2011-04-07 2018-10-10 VIA Technologies, Inc. Efficient conditional alu instruction in read-port limited register file microprocessor
CN102799461B (zh) * 2011-05-24 2015-09-23 联想(北京)有限公司 一种应用的执行方法、装置及电子设备
US9110744B2 (en) * 2011-09-02 2015-08-18 Phoenix Technologies Ltd. Secure application firmware environment for X86 and non-X86 processors
CN103136060B (zh) * 2011-11-23 2016-10-05 联想(北京)有限公司 运行控制方法和运行控制装置

Also Published As

Publication number Publication date
CN103885814A (zh) 2014-06-25

Similar Documents

Publication Publication Date Title
CN103885814B (zh) 在x86架构上运行ARM APK的模拟器装置和方法
CN103488466B (zh) 用于执行应用程序的方法和装置
CN111740948B (zh) 数据包发布方法、动态更新方法、装置、设备及介质
CN109739524B (zh) 一种软件安装包的生成方法、装置、电子设备及存储介质
CN105335137A (zh) 用于处理源文件的方法和装置
CN111736840A (zh) 小程序应用的编译方法、运行方法、存储介质及电子设备
CN105224869A (zh) 组件测试方法和装置
WO2016176059A1 (en) Mapping between local and remote for seamless build and design time experience
CN109947431B (zh) 一种代码生成方法、装置、设备及存储介质
CN114398673A (zh) 应用程序的合规检测方法、装置、存储介质与电子设备
US9176714B2 (en) Re-using legacy libraries in software
CN110764941A (zh) 获取调用栈栈帧指令偏移的方法、装置、介质和设备
CN114721719A (zh) 一种在集群中容器化部署异构应用的方法和系统
CN110489159A (zh) 安装包精简方法及数据解析方法、装置、介质和设备
CN110659210A (zh) 一种信息获取方法、装置、电子设备及存储介质
EP3797356B1 (en) Code base sharing between standalone and web-based versions of an application due to the implementing of an emulated network communication channel
CN114816672A (zh) 虚拟机的创建方法、装置、电子设备和存储介质
CN111488275A (zh) Ui自动化测试方法、装置、存储介质及电子设备
CN111258802A (zh) 捕获应用程序崩溃信息的方法及相关设备
CN104063306A (zh) 智能终端软件测试中的自动登录方法、装置和系统
WO2023083071A1 (zh) 视图交互方法、装置、电子设备及计算机可读介质
CN111240790A (zh) 一种应用的多语言适配方法、装置、客户端和存储介质
CN113590225B (zh) 贴图检测方法、装置、电子设备及存储介质
CN112286802B (zh) 一种测试程序性能方法、装置和电子设备
EP2115574B1 (en) Employing a buffer to facilitate instruction execution

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C53 Correction of patent for invention or patent application
CB03 Change of inventor or designer information

Inventor after: Sun Yuanzhen

Inventor after: Wen Jian

Inventor after: Cao Bo

Inventor after: Liu Chao

Inventor after: Tang Yu

Inventor before: Sun Yuanzhen

Inventor before: Zhang Wei

Inventor before: Die Biao

COR Change of bibliographic data

Free format text: CORRECT: INVENTOR; FROM: SUN YUANZHEN ZHANG WEI XUAN BIAO TO: SUN YUANZHEN WEN JIAN CAO BO LIU CHAO TANG YU

GR01 Patent grant
GR01 Patent grant