CN103176838A - 兼容Android本机程序的方法及系统 - Google Patents

兼容Android本机程序的方法及系统 Download PDF

Info

Publication number
CN103176838A
CN103176838A CN 201110436913 CN201110436913A CN103176838A CN 103176838 A CN103176838 A CN 103176838A CN 201110436913 CN201110436913 CN 201110436913 CN 201110436913 A CN201110436913 A CN 201110436913A CN 103176838 A CN103176838 A CN 103176838A
Authority
CN
China
Prior art keywords
android
machine
function library
library
target
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
CN 201110436913
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.)
Shengle Information Technolpogy Shanghai Co Ltd
Original Assignee
Shengle Information Technolpogy Shanghai 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 Shengle Information Technolpogy Shanghai Co Ltd filed Critical Shengle Information Technolpogy Shanghai Co Ltd
Priority to CN 201110436913 priority Critical patent/CN103176838A/zh
Publication of CN103176838A publication Critical patent/CN103176838A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

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

Abstract

本发明涉及一种兼容Android本机程序的方法及系统,所述方法包括:采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的Bionic C运行库;采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的第一Android本机函数库;采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的Android Java函数库;将Android本机程序所依赖的第二Android本机函数库直接移植到目标POSIX系统中。本发明无需在目标系统上完整移植整个Android运行环境,也无需搭建JVM虚拟机,同时能够以充分发挥目标系统性能的方式去模拟Android本机程序所需的依赖项,从而可以实现目标系统更高的移植运行性能。

Description

兼容Android本机程序的方法及系统
技术领域
本发明涉及一种兼容Android本机程序的方法,特别是一种在标准POSIX系统中兼容Android本机程序(Native Application)的方法。
背景技术
Google的Android系统基于Linux Kernel开发,运行在Android系统的一部分系统核心应用、需要与硬件通讯的组件或是对性能要求较高组件往往采用Android系统本机代码编写,通常将这些应用或者组件称为Android本机程序(Native Application),这些本机程序通常依赖于各种Android系统提供的Android本机函数库以及使用Java编写的Android Java函数库。
因为Android系统基于Linux Kernel开发,所以在相同硬件构架下,将Android本机程序移植运行于其它基于POSIX系统成为了可能,现有的实现方式包括如下三种:
1)在自主开发基于Linux Kernel的操作系统的前期,使用Android上成熟的本机应用/函数库作为原型验证系统功能;。
2)在自主开发的操作系统发布的早期,使用从Android移植来的程序的来丰富自身平台的应用;。
3)为达到运行Android本机程序的手段,使用虚拟化/模拟器方式,在目标操作系统中运行完整的系统虚拟机/模拟器,模拟整个Android操作系统。
上述第1)和2)种实现方式主要是将Android本机程序运行所需的环境(包括JVM虚拟机)完整的移植至目标系统,但这样的实现途径往往工程量较大,且需要对目标系统做出较大改动,因此降低的实用性。
上述第3)种实现方式虽然不作任何移植工作,但这种实现方式的缺点是非常消耗系统的资源。
发明内容
本发明的目的在于提供一种兼容Android本机程序的方法及系统,无需在目标系统上完整移植整个Android运行环境,也无需搭建JVM虚拟机,同时能够以充分发挥目标系统性能的方式去模拟Android本机程序所需的依赖项,从而可以实现目标系统更高的移植运行性能。
为解决上述问题,本发明提供一种兼容Android本机程序的方法,包括:
采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的BionicC运行库;
采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的第一Android本机函数库;
采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的AndroidJava函数库;
将Android本机程序所依赖的第二Android本机函数库直接移植到目标POSIX系统中。
进一步的,在上述方法中,所述第一Android本机函数库为复杂的Android本机函数库,所述第二Android本机函数库为独立或简单的Android本机函数库。
进一步的,在上述方法中,所述复杂的Android本机函数库包括SurfaceFlinger库、StageFright库或Binder库。
进一步的,在上述方法中,独立或简单的Android本机函数库包括libcutils库或libutils库。
进一步的,在上述方法中,采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的Bionic C运行库步骤中包括消除Bionic C运行库与目标POSIX系统的Gnu C运行库在ABI与API上的差异。
进一步的,在上述方法中,采用函数挂钩的模式消除Bionic C运行库与目标POSIX系统的Gnu C运行库在ABI上的差异。
进一步的,在上述方法中,采用目标POSIX系统的本机代码来模拟BionicC运行库中的API。
进一步的,在上述方法中,采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的第一Android本机函数库步骤中,包括提供与所述复杂的Android本机函数库的API功能完全一致的模拟实现。
进一步的,在上述方法中,采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的第一Android本机函数库步骤中,包括仅模拟出所述复杂的Android本机函数库的API具体调用参数下的行为。
进一步的,在上述方法中,采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的第一Android本机函数库步骤中,包括采用空实现的方式来模拟Android本机程序所依赖的复杂的Android本机函数库。
进一步的,在上述方法中,还包括采用目标POSIX系统的本机代码来模拟Android Java函数库所依赖的底层JNI本机函数库。
进一步的,在上述方法中,采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的Android Java函数库步骤中,包括模拟Android Java函数库的对象模型。
进一步的,在上述方法中,所述对像模型包括Android Java函数库中的所有类的实例和类。
进一步的,在上述方法中,采用哈希表来表示Android Java函数库中的所有类的实例和类。
进一步的,在上述方法中,采用目标POSIX系统的本机代码来模拟满足JNI调用规范的接口。
根据本发明的另一面,提供一种兼容Android本机程序的系统,包括:
Android本机程序模块,用于移植Android本机程序;
Bionic C运行库模拟模块,用于采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的Bionic C运行库;
第一Android本机函数库模拟模块,用于采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的Android Java函数库;
Android Java函数库模拟模块,用于采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的Android Java函数库;
第二Android本机函数库模拟模块,用于将Android本机程序所依赖的独立或简单的Android本机函数库直接移植到目标POSIX系统中。
进一步的,在上述系统中,所述Bionic C运行库模拟模块用于消除BionicC运行库与目标POSIX系统的Gnu C运行库在ABI与API上的差异。
进一步的,在上述系统中,所述Bionic C运行库模拟模块采用函数挂钩的模式消除Bionic C运行库与目标POSIX系统的Gnu C运行库在ABI上的差异。
进一步的,在上述系统中,所述Bionic C运行库模拟模块采用目标POSIX系统的本机代码来模拟Bionic C运行库中的API。
进一步的,在上述系统中,所述第一Android本机函数库模拟模块提供与所述复杂的Android本机函数库的API功能完全一致的模拟实现。
进一步的,在上述系统中,所述第一Android本机函数库模拟模块仅模拟出所述复杂的Android本机函数库的API具体调用参数下的行为。
进一步的,在上述系统中,所述第一Android本机函数库模拟模块采用空实现的方式来模拟Android本机程序所依赖的复杂的Android本机函数库。
进一步的,在上述系统中,所述Android Java函数库模拟模块还用于采用目标POSIX系统的本机代码来模拟Android Java函数库所依赖的底层JNI本机函数库。
进一步的,在上述系统中,所述Android Java函数库模拟模块用于模拟Android Java函数库的对象模型。
进一步的,在上述系统中,还包括JNI模拟模块,用于采用目标POSIX系统的本机代码来模拟满足JNI调用规范的接口。
与现有技术相比,本发明通过采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的Bionic C运行库,并采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的复杂的Android本机函数库,采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的Android Java函数库,以及将Android本机程序所依赖的独立或简单的Android本机函数库直接移植到目标POSIX系统中,无需在目标系统上完整移植整个Android运行环境,也无需搭建JVM虚拟机,同时能够以充分发挥目标系统性能的方式去模拟Android本机程序所需的依赖项,从而可以实现目标系统更高的移植运行性能。
附图说明
图1为Android本机程序在Android系统中的依赖关系图;
图2为本发明一实施例的被移植的Android本机程序的运行框架图;
图3为本发明一实施例的兼容Android本机程序的方法的流程图;
图4为本发明一实施例的消除ABI与API上的差异的原理图;
图5为本发明一实施例模拟的Java对象模型的哈希表;
图6为本发明一实施例的兼容Android本机程序的系统的模块示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
图1为Android本机程序在Android系统中的依赖关系图。
如图1所示,当Android本机程序运行于Android系统时在移植过程中要解决的依赖关系具体如下:
1)Bionic C运行库(Bionic Libc)
Android系统使用自行开发的Bionic C运行库11,该运行库相比常用于linux系统的GNU C运行库(GNU libc或glibc)具有体积小,轻量级高效的特点。但由于Bionic C运行库11的ABI(Application Binary Interface应用程序二进制接口)无法与GNU C运行库兼容,同时Bionic C运行库11具有一些在GNU C运行库中不存在的特有API(Application Programming Interface,应用程序编程接口),因此在移植中需要修正这部分的差异。
Figure BDA0000123840230000051
Figure BDA0000123840230000061
由上述程序的对比内容可见,Bionic C运行库与GNU C运行库之间ABI存在着差异。
2)复杂的Android本机函数库
由于复杂的Android本机函数库12与Android系统17或者其他Android组件结合较为紧密,比如SurfaceFlinger、StageFright、Binder等库,如果要对这类较为复杂的Android本机函数库12进行移植,则需要对目标系统做出较大改动以及移植额外的依赖库,因此不便于将复杂的Android本机函数库12直接移植到目标系统中。
3)独立或简单的Android本机函数库
这里的独立或简单的Android本机函数库是相对于复杂的Android本机函数库12来说的,本领域的技术人员能够很容易地区分Android本机函数库中哪些是复杂的Android本机函数库12,哪些是由于独立或简单的Android本机函数库13,独立或简单的Android本机函数库13为较为独立或者依赖了常见于POSIX系统的其他库/组件,如libcutils、libutils库,这些独立或简单的Android本机函数库13可以比较容易的直接移植到目标系统中。
4)JVM虚拟机
Android本机程序对JVM虚拟机14(Java Virtual Machine)的依赖表现在需要通过JNI(Java Native Interface,Java本地调用接口)调用运行于JVM虚拟机14当中的Android Java函数库,因此,实际上Android本机程序16所依赖的是满足JNI调用规范的接口。
5)Android Java函数库和底层JNI本机函数库
Android本机程序16通过JNI将调用Java编写的Android Java函数库15,在Android系统中这类Android Java函数库15大多也会通过JNI在此调用底层JNI本机函数库完成最终的工作,但移植完整的JVM虚拟机14以及Android Java函数库15工作量较大且将造成目标系统的较大改动。
6)常见于POXIS系统的组件
Android本机程序也会依赖常见于POXIS系统的组件,比如openGL,ICU库等,这部分常见于POXIS系统的组件往往也被目标系统所包含,或者可以轻易加入目标系统。
图2为本发明一实施例的被移植的Android本机程序的运行框架图。
图3为本发明一实施例的兼容Android本机程序的方法的流程图。
如图2和3所示,本发明提供一种兼容Android本机程序的方法,包括:
步骤S1,采用目标POSIX系统的本机代码来模拟Android本机程序21所依赖的Bionic C运行库22;
步骤S2,采用目标POSIX系统的本机代码来模拟Android本机程序21所依赖的第一本机函数库,具体的,所述第一Android本机函数库为复杂的Android本机函数库23,对于Android本机程序所依赖的较为复杂或涉及对Android其他组件有过多依赖的Android本机函数库,比如libstagefright,采用在目标系统开发兼容这些依赖API规范的模拟实现方式,从而快速满足这类依赖项,避免了移植工作。
步骤S3,采用目标POSIX系统的本机代码来模拟Android本机程序21所依赖的Android Java函数库26,具体的,对于Android本机程序所依赖的AndroidJava函数库,采用在目标系统上使用C/C++等本机代码模拟实现对应的AndroidJava函数库的功能,并提供符合JNI调用规范的接口以满足需移植的Android本机程序的依赖,从而避免将JVM以及Android Java运行环境移植到目标系统自身的运行环境27中;
步骤S4,将Android本机程序所依赖的第二Android本机函数库直接移植到目标POSIX系统中,具体的,所述第二Android本机函数库为独立或简单的Android本机函数库24,对于Android本机程序21所依赖的较为独立和简单的本机代码,比如libcutils,libskia等库,可以仍旧采用直接移植的办法,通过少量代码修改即可移植于目标系统的函数库;
步骤S5,采用目标POSIX系统的本机代码来模拟Android Java函数库所依赖的底层JNI本机函数库;
步骤S6,采用目标POSIX系统的本机代码来模拟满足JNI调用规范的接口,具体的,采用实现与JNI调用规范的相同的JNI模拟层25使得Android本机程序21认为它正与JVM进行通讯。
图4为本发明一实施例的消除ABI与API上的差异的原理图。
如图4所示,步骤S1中,由于Bionic C运行库与目标系统的GNU C运行库存在ABI和API上的差异,如果被移植的Android本机程序直接使用目标系统的GNU C运行库,将导致程序执行异常或是出现崩溃,而且Bionic C运行库与Android系统紧密耦合,很难与目标系统的GNU C运行库,所以无法将BionicC运行库直接移植到目标系统中,所以要采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的Bionic C运行库以消除Bionic C运行库与目标POSIX系统的Gnu C运行库在ABI与API上的差异,具体可以采用函数挂钩(Hook)的模式消除Bionic C运行库与目标POSIX系统的Gnu C运行库在ABI上的差异,采用函数挂钩的模式实现了一层Bionic C运行库模拟层,Bionic C运行库模拟层将挂钩拦截Android本机程序对存在ABI差异的GNU C运行库中的函数调用,Android本机程序实际将调用位于Bionic C运行库模拟层中的钩子函数如图4中的foo_hook,并由该钩子函数完成ABI差异的消除,并最终调用目标系统中GNU C运行库提供的同名函数foo(API相同,ABI不同)完成最终的工作;另外,对于仅出现在Bionic C运行库中的API如图4中的bar(),可以采用目标POSIX系统的本机代码来模拟Bionic C运行库中的API,从而在Bionic C运行库模拟层中提供了对消除Bionic C运行库与目标POSIX系统的Gnu C运行库在ABI与API上的差异的模拟实现,Android本机程序将调用该模拟实现的目标POSIX系统的本机代码,对于Gnu C运行库与Bionic C运行库完全相同的函数,移植的Android本机程序将直接调用。
步骤S2中,对于复杂的Android本机函数库可以采用如下三种模拟策略:
1)完全模拟
完全模拟即提供与所述复杂的Android本机函数库的API功能完全一致的模拟实现,这种策略适用于对于实现较为简单或者无法明确Android本机程序对API具体调用参数的情况。
2)仅模拟实际依赖的功能
对于已经明确移植的Android本机程序对所需API的具体使用方式的情况,可以仅模拟出所述复杂的Android本机函数库的API具体调用的参数下的行为,即仅模拟出API在某几个输入参数下的行为,从而减少工作量。
3)空实现
对于实现较为复杂的API或者无法被目标系统所支持的功能,比如Binder的某些服务,则可以首先采用空实现的策略模拟Android本机程序所依赖的复杂的Android本机函数库,该策略可在开发初期迅速将Android本机程序移植并运行于目标系统,绕过暂时不需要的功能需求。
图5为本发明一实施例模拟的Java对象模型的哈希表。
如图2和图5所示,步骤S3中,JNI模拟层的核心问题是模拟出Java类对象模型,因此,采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的Android Java函数库的步骤包括模拟Android Java函数库的对象模型,所述对像模型包括Android Java函数库中的所有类的实例51和类52,具体可采用哈希表(hash)来表示Android Java函数库中的所有类的实例和类,JNI模拟层的操作将作用在这些哈希表上,当被移植的Android本机程序通过JNI调用规范尝试访问Android Java函数库时,JNI模拟层将查询哈希表保存的模拟对象模型,从中找到由目标系统对应的本机代码模拟实现53(函数或者数据域),并执行对应动作,在Android本机程序看来,这与调用Java类并无差异。
图6为本发明一实施例的兼容Android本机程序的系统的模块示意图。
如图6所示,本发明还提供另一种兼容Android本机程序的系统,包括Android本机程序模块66、Bionic C运行库模拟模块61、第一Android本机函数库模拟模块62、Android Java函数库模拟模块63、第二Android本机函数库模拟模块64及JNI模拟模块65。
Android本机程序模块66用于移植Android本机程序并调用Bionic C运行库模拟模块61、第一Android本机函数库模拟模块62、Android Java函数库模拟模块63、第二Android本机函数库模拟模块64及JNI模拟模块65。
Bionic C运行库模拟模块61用于采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的Bionic C运行库,具体的,所述Bionic C运行库模拟模块61用于消除Bionic C运行库与目标POSIX系统的Gnu C运行库在ABI与API上的差异,所述Bionic C运行库模拟模块61采用函数挂钩的模式消除BionicC运行库与目标POSIX系统的Gnu C运行库在ABI上的差异,所述Bionic C运行库模拟模块61采用目标POSIX系统的本机代码来模拟Bionic C运行库中的API。
第一Android本机函数库模拟模块62用于采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的复杂的Android本机函数库,具体的,所述第一Android本机函数库模拟模块62提供与所述复杂的Android本机函数库的API功能完全一致的模拟实现,所述第一Android本机函数库模拟模块62仅模拟出所述复杂的Android本机函数库的API具体调用的参数下的行为,所述第一Android本机函数库模拟模块62采用空实现的方式来模拟Android本机程序所依赖的复杂的Android本机函数库,采用在目标系统开发兼容这些依赖API规范的模拟实现方式,从而快速满足这类依赖项,避免了移植工作。
Android Java函数库模拟模块63用于采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的Android Java函数库,具体的,所述Android Java函数库模拟模块63还用于采用目标POSIX系统的本机代码来模拟Android Java函数库所依赖的底层JNI本机函数库,所述Android Java函数库模拟模块63用于模拟Android Java函数库的对象模型,所述Android Java函数库模拟模块63用于模拟Android Java函数库的对象模型,从而避免将JVM以及Android Java运行环境移植到目标系统中。
第二Android本机函数库模拟模块64用于将Android本机程序所依赖的独立或简单的Android本机函数库直接移植到目标POSIX系统中,比如libcutils,libskia等库,可以仍旧采用直接移植的办法,通过少量代码修改即可移植于目标系统的函数库。
JNI模拟模块65用于采用目标POSIX系统的本机代码来模拟满足JNI调用规范的接口。
综上所述,本发明通过采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的Bionic C运行库,并采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的复杂的Android本机函数库,采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的Android Java函数库,以及将Android本机程序所依赖的独立或简单的Android本机函数库直接移植到目标POSIX系统中,无需在目标系统上完整移植整个Android运行环境,也无需搭建JVM虚拟机,同时能够以充分发挥目标系统性能的方式去模拟Android本机程序所需的依赖项,从而可以实现目标系统更高的移植运行性能。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
显然,本领域的技术人员可以对发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包括这些改动和变型在内。

Claims (25)

1.一种兼容Android本机程序的方法,其特征在于,包括:
采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的BionicC运行库;
采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的第一Android本机函数库;
采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的AndroidJava函数库;
将Android独立或简单的本机程序所依赖的第二Android本机函数库直接移植到目标POSIX系统中。
2.如权利要求1所述的兼容Android本机程序的方法,其特征在于,所述第一Android本机函数库为复杂的Android本机函数库,所述第二Android本机函数库为独立或简单的Android本机函数库。
3.如权利要求2所述的兼容Android本机程序的方法,其特征在于,所述复杂的Android本机函数库包括SurfaceFlinger库、StageFright库或Binder库。
4.如权利要求2所述的兼容Android本机程序的方法,其特征在于,独立或简单的Android本机函数库包括libcutils库或libutils库。
5.如权利要求1所述的兼容Android本机程序的方法,其特征在于,采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的Bionic C运行库步骤中,包括消除Bionic C运行库与目标POSIX系统的Gnu C运行库在ABI与API上的差异。
6.如权利要求5所述的兼容Android本机程序的方法,其特征在于,采用函数挂钩的模式消除Bionic C运行库与目标POSIX系统的Gnu C运行库在ABI上的差异。
7.如权利要求5所述的兼容Android本机程序的方法,其特征在于,采用目标POSIX系统的本机代码来模拟Bionic C运行库中的API。
8.如权利要求2至4任一项所述的兼容Android本机程序的方法,其特征在于,采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的第一Android本机函数库步骤中,包括提供与所述复杂的Android本机函数库的API功能完全一致的模拟实现。
9.如权利要求2至4任一项所述的兼容Android本机程序的方法,其特征在于,采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的第一Android本机函数库步骤中,包括仅模拟出所述复杂的Android本机函数库的API具体调用参数下的行为。
10.如权利要求2至4任一项所述的兼容Android本机程序的方法,其特征在于,采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的第一Android本机函数库步骤中,包括采用空实现的方式来模拟Android本机程序所依赖的复杂的Android本机函数库。
11.如权利要求1所述的兼容Android本机程序的方法,其特征在于,还包括采用目标POSIX系统的本机代码来模拟Android Java函数库所依赖的底层JNI本机函数库。
12.如权利要求1所述的兼容Android本机程序的方法,其特征在于,采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的Android Java函数库步骤中,包括模拟Android Java函数库的对象模型。
13.如权利要求12所述的兼容Android本机程序的方法,其特征在于,所述对像模型包括Android Java函数库中的所有类的实例和类。
14.如权利要求13所述的兼容Android本机程序的方法,其特征在于,采用哈希表来表示Android Java函数库中的所有类的实例和类。
15.如权利要求1所述的兼容Android本机程序的方法,其特征在于,采用目标POSIX系统的本机代码来模拟满足JNI调用规范的接口。
16.一种兼容Android本机程序的系统,其特征在于,包括:
Android本机程序模块,用于移植Android本机程序;
Bionic C运行库模拟模块,用于采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的Bionic C运行库;
第一本机函数库模拟模块,用于采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的复杂的Android本机函数库;
Android Java函数库模拟模块,用于采用目标POSIX系统的本机代码来模拟Android本机程序所依赖的Android Java函数库;
第二本机函数库模拟模块,用于将Android本机程序所依赖的独立或简单的Android本机函数库直接移植到目标POSIX系统中。
17.如权利要求16所述的兼容Android本机程序的系统,其特征在于,所述Bionic C运行库模拟模块用于消除Bionic C运行库与目标POSIX系统的GnuC运行库在ABI与API上的差异。
18.如权利要求17所述的兼容Android本机程序的系统,其特征在于,所述Bionic C运行库模拟模块采用函数挂钩的模式消除Bionic C运行库与目标POSIX系统的Gnu C运行库在ABI上的差异。
19.如权利要求17所述的兼容Android本机程序的系统,其特征在于,所述Bionic C运行库模拟模块采用目标POSIX系统的本机代码来模拟Bionic C运行库中的API。
20.如权利要求16所述的兼容Android本机程序的系统,其特征在于,所述第一本机函数库模拟模块提供与所述复杂的Android本机函数库的API功能完全一致的模拟实现。
21.如权利要求16所述的兼容Android本机程序的系统,其特征在于,所述第一本机函数库模拟模块仅模拟出所述复杂的Android本机函数库的API具体调用参数下的行为。
22.如权利要求16所述的兼容Android本机程序的系统,其特征在于,所述第一本机函数库模拟模块采用空实现的方式来模拟Android本机程序所依赖的复杂的Android本机函数库。
23.如权利要求16所述的兼容Android本机程序的系统,其特征在于,所述Android Java函数库模拟模块还用于采用目标POSIX系统的本机代码来模拟Android Java函数库所依赖的底层JNI本机函数库。
24.如权利要求16所述的兼容Android本机程序的系统,其特征在于,所述Android Java函数库模拟模块用于模拟Android Java函数库的对象模型。
25.如权利要求16所述的兼容Android本机程序的系统,其特征在于,还包括JNI模拟模块,用于采用目标POSIX系统的本机代码来模拟满足JNI调用规范的接口。
CN 201110436913 2011-12-22 2011-12-22 兼容Android本机程序的方法及系统 Pending CN103176838A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 201110436913 CN103176838A (zh) 2011-12-22 2011-12-22 兼容Android本机程序的方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 201110436913 CN103176838A (zh) 2011-12-22 2011-12-22 兼容Android本机程序的方法及系统

Publications (1)

Publication Number Publication Date
CN103176838A true CN103176838A (zh) 2013-06-26

Family

ID=48636739

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 201110436913 Pending CN103176838A (zh) 2011-12-22 2011-12-22 兼容Android本机程序的方法及系统

Country Status (1)

Country Link
CN (1) CN103176838A (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103336707A (zh) * 2013-07-10 2013-10-02 深圳市开立科技有限公司 在安卓系统下运行标准c程序的方法和装置
CN105446735A (zh) * 2015-11-11 2016-03-30 上海斐讯数据通信技术有限公司 一种Java与Windows消息传递方法及系统
CN105760239A (zh) * 2016-02-03 2016-07-13 北京元心科技有限公司 在第二系统中访问用于第一系统的第三方库的方法及系统
CN107102853A (zh) * 2017-03-26 2017-08-29 安徽继远软件有限公司 一种定制化移动操作系统兼容Android应用的方法
CN111367512A (zh) * 2020-03-16 2020-07-03 北京五八信息技术有限公司 一种应用程序开发中创建Android库模块依赖关系的方法及装置
CN111880863A (zh) * 2020-07-10 2020-11-03 Oppo广东移动通信有限公司 应用程序的运行方法、装置、电子设备及存储介质
CN112148283A (zh) * 2020-09-14 2020-12-29 第六镜科技(成都)有限公司 一种跨平台的abi兼容c++组件框架的实现方法

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103336707A (zh) * 2013-07-10 2013-10-02 深圳市开立科技有限公司 在安卓系统下运行标准c程序的方法和装置
CN105446735A (zh) * 2015-11-11 2016-03-30 上海斐讯数据通信技术有限公司 一种Java与Windows消息传递方法及系统
CN105760239A (zh) * 2016-02-03 2016-07-13 北京元心科技有限公司 在第二系统中访问用于第一系统的第三方库的方法及系统
CN105760239B (zh) * 2016-02-03 2019-04-16 北京元心科技有限公司 在第二系统中访问用于第一系统的第三方库的方法及系统
CN107102853A (zh) * 2017-03-26 2017-08-29 安徽继远软件有限公司 一种定制化移动操作系统兼容Android应用的方法
CN111367512A (zh) * 2020-03-16 2020-07-03 北京五八信息技术有限公司 一种应用程序开发中创建Android库模块依赖关系的方法及装置
CN111880863A (zh) * 2020-07-10 2020-11-03 Oppo广东移动通信有限公司 应用程序的运行方法、装置、电子设备及存储介质
CN111880863B (zh) * 2020-07-10 2023-10-24 Oppo广东移动通信有限公司 应用程序的运行方法、装置、电子设备及存储介质
CN112148283A (zh) * 2020-09-14 2020-12-29 第六镜科技(成都)有限公司 一种跨平台的abi兼容c++组件框架的实现方法
CN112148283B (zh) * 2020-09-14 2023-09-22 第六镜科技(成都)有限公司 一种跨平台的abi兼容c++组件框架的实现方法

Similar Documents

Publication Publication Date Title
CN103176838A (zh) 兼容Android本机程序的方法及系统
US20160117115A1 (en) Disk partition stitching and rebalancing using a partition table
US7900202B2 (en) Identification of software execution data
US8261248B2 (en) System and method of executing a dynamic program in a structured environment
CN107636612A (zh) 用于移动应用的实时迁移的应用容器
US8266419B2 (en) Fast restart on a virtual machine
CN104090765A (zh) 一种手机游戏转网页游戏的方法及装置
CN102073525A (zh) 基于Java平台的Web业务系统的动态升级方法及装置
CN103443763A (zh) 包含对重写虚拟函数的调用的支持的isa桥接
CN103092674A (zh) 一种虚拟机系统
CN107133055B (zh) 一种基于ClassLoader实现定制开发的方法
KR102052776B1 (ko) 병행가능하고 신뢰성 있는 설치를 위한 설치 엔진 및 패키지 포맷
CN104111843A (zh) 一种基于沙箱的脚本更新方法及系统
CN102984124A (zh) 一种将客户端游戏程序快速植入浏览器的方法及系统
US7437708B2 (en) Enhanced software components
CN111563253A (zh) 智能合约运行方法、装置、设备及存储介质
CN103294458A (zh) 基于插件的软件开发方法
CN106775656A (zh) 一种基于多智能密钥盘的调度方法
CN113296891A (zh) 基于平台的多场景知识图谱处理方法及装置
US8260850B2 (en) Thin-client and distributed development using data programming
CN108228208A (zh) 一种java应用程序的动态更新方法和装置
US8381177B2 (en) Method and system of performing Java language class extensions
US20100031256A1 (en) Method for establishing virtual operating system
CN103488519B (zh) 一种交互式脚本语言解释器的实现方法
CN116192670A (zh) 环境部署方法、装置、设备及介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C05 Deemed withdrawal (patent law before 1993)
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20130626