应用程序免安装运行控制方法及其装置的制造方法_2

文档序号:9375311阅读:来源:国知局
辞"包括"是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加 一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元 件被"连接"或"耦接"到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在 中间元件。此外,这里使用的"连接"或"耦接"可以包括无线连接或无线耦接。这里使用 的措辞"和/或"包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
[0069] 本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术 术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应 该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中 的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含 义来解释。
[0070] 本技术领域技术人员可以理解,这里所使用的"终端"、"终端设备"既包括无线信 号接收器的设备,其仅具备无发射能力的无线信号接收器的设备,又包括接收和发射硬件 的设备,其具有能够在双向通信链路上,执行双向通信的接收和发射硬件的设备。这种设 备可以包括:蜂窝或其他通信设备,其具有单线路显示器或多线路显示器或没有多线路显 示器的蜂窝或其他通信设备;PCS(Personal Communications Service,个人通信系统),其 可以组合语音、数据处理、传真和/或数据通信能力;PDA (Personal Digital Assistant,个 人数字助理),其可以包括射频接收器、寻呼机、互联网/内联网访问、网络浏览器、记事本、 日历和/或GPS (Global Positioning System,全球定位系统)接收器;常规膝上型和/或 掌上型计算机或其他设备,其具有和/或包括射频接收器的常规膝上型和/或掌上型计算 机或其他设备。这里所使用的"终端"、"终端设备"可以是便携式、可运输、安装在交通工具 (航空、海运和/或陆地)中的,或者适合于和/或配置为在本地运行,和/或以分布形式, 运行在地球和/或空间的任何其他位置运行。这里所使用的"终端"、"终端设备"还可以是 通信终端、上网终端、音乐/视频播放终端,例如可以是PDA、MID(Mobile Internet Device, 移动互联网设备)和/或具有音乐/视频播放功能的移动电话,也可以是智能电视、机顶盒 等设备。
[0071] 本技术领域技术人员可以理解,这里所使用的远端网络设备,其包括但不限于计 算机、网络主机、单个网络服务器、多个网络服务器集或多个服务器构成的云。在此,云由基 于云计算(Cloud Computing)的大量计算机或网络服务器构成,其中,云计算是分布式计算 的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。本发明的实施例中,远端 网络设备、终端设备与WNS服务器之间可通过任何通信方式实现通信,包括但不限于,基于 3GPP、LTE、WIMAX的移动通信、基于TCP/IP、UDP协议的计算机网络通信以及基于蓝牙、红外 传输标准的近距无线传输方式。
[0072] 本发明主要是以Android的ART虚拟机为基础而提出的,当然,如果其它操作系统 中架构了类似于ART的机制,理论上也可以将本发明推广之。
[0073] 如图1所揭示的本发明的应用程序免安装运行控制方法,可以实现于作为主程序 使用的宿主功能模块中,其具体包括如下步骤:
[0074] S11、响应于运行所述应用程序的指令,解析该应用程序的安装文件,获取其所需 的运行信息,并据其中的配置文件预先注册应用程序运行所需程序资源和进程资源;
[0075] 此处所述应用程序即为免安装应用程序或免安装插件模块,对其安装文件进行解 析,以获取其包名、版本号、资源存储路径、组件等在其运行过程中进程需要用到的信息。所 述程序资源包括宿主程序预先向系统注册的组件坑位资源,所述进程资源包括宿主程序向 系统预先注册的多个进程资源。
[0076] Android操作系统有其不同于其他操作系统的原理,Android为开发者提供四大 组件,具体指 Activity、Service、Receiver 以及 Content Provider 等组件。Android 应用 程序以APK安装包的形式提供给用户进行安装,APK安装包中,具有用于封装实现各个组件 的程序代码的classes, dex代码文件以及用于表达应用程序所用的各个组件的注册信息 以及权限申请信息等内容的Androidmanifest. xml配置文件。由于应用程序的安装过程 就是 PackageManagerService (PMS)解析 Androidmanifest. xml 文件的过程,而应用程序安 装包没有安装在本地,因此无法得到应用程序的相关属性信息,但只有获取如Activity组 件、Service组件、Broadcast Receiver组件、ContentProvider组件等信息时,才能通过 ActivityManagerService (AMS)正常运行应用程序。因此本发明采用如下方法解析应用程 序的安装包:
[0077] 1、解压缩安装包获取Androidmanifest. xml文件
[0078] Android系统中,每一个应用程序安装包都为APK文件,即Android Application Package File的缩写,其实质是zip格式的文件,是利用zip压缩技术结合签名技术实现的 压缩包,因此,一方面可以通过解压缩技术释放其内部文件,另一方面可以通过Apktool之 类的工具软件获取其内部文件。本领域技术人员均能娴熟地利用这些公知技术在一个给定 目录中对原安装包进行处理,从而通过内存操作(非文件操作)的方式来获得其中的内部 文件。
[0079] 所述Android应用程序安装文件的内部结构如表1所示:
[0080]
[0081] 表1APK文件结构
[0082] 故而通过解析应用程序的安装包获得表1中所示的目录和文件,从而获取 Androidmanifest. xml 文件。
[0083] 2、解析Androidmanifest. xml文件获取相应的属性信息
[0084] 每个apk文件中都包含有一个AndroidManifest. xml文件,它记录着安装包 的全局配置信息,是典型的配置文件。该配置文件中,除了包名package name、版本 编号versionCode、版本号versionName等信息,还包括应用程序注册的activity、 service、broadcastReceiver、contentProvider等系统组件,各大组件的注册信息 在该配置文件中予以声明,在安装时,提供给应用程序向系统注册,具体是由系统的 PackageManagerService读取该配置文件以完成注册。故对AndroidManifest. xml文件进 行解析,获取应用程序的包名、版本号、各活动组件等属性信息,该些属性信息将在应用程 序运行过程中作为运行信息提供给系统进程。
[0085] 3、将获取的属性信息缓存于系统内存中
[0086] 将上述获取的属性信息以数据结构的形式存储于系统内存中,如以数据库、map列 表等方式进行存储,当应用程序运行时,其他进程需要获取应用程序的相应信息时,则通过 binder接口查询,以快速获取所需的运行信息。
[0087] 其中,解析应用程序安装文件的过程由系统的PMS执行,由于应用程序未安装到 系统中,当PMS向系统查验该应用程序程序是否安装时,该未安装应用程序会被系统查询 到不存在。因此,本发明采用预设注入的hook函数,对PMS执行查验的相关函数进行挂钩 拦截,在查验之前将查验参数修改为宿主程序的查验参数,查验结束之后再将查验参数修 改为所述应用程序的查验参数,以此通过系统查验,并由PMS将应用程序的安装文件解析, 获取应用程序的运行信息,以该些运行信息作为候选构造应用程序运行环境的基础。
[0088] S12、基于所述运行信息构造所述应用程序的运行环境,利用所述预注册的程序资 源及进程资源运行该应用程序;
[0089] 众所周知,宿主程序要调起未安装的应用程序,需要访问应用程序的资源,而未安 装的应用程序没有把其资源拷贝到宿主程序中,故而本发明采用以下方法访问应用程序的 资源:
[0090] Activity的工作主要由Contextlmpl完成,其具有一个成员变量mBase,系统通过 Contextlmpl中的获取资源的方法获取context,即应用程序的上下文。本发明通过自定义 实现所述Contextlmpl中的获取资源的方法,获取未安装应用程序的资源,具体代码如下:
[0091]
[0092]

[0093] 通过反射机制,调用AssetManager中的addAssetPath方法,将应用程序安装文件 中的资源加载到Resource中,通过Resource对象调用应用程序安装文件中的资源。在获 取应用程序安装文件资源之前,首先要由宿主程序新建DexClassLoader加载应用程序安 装包,然后新建AssetManager加载应用程序安装文件的资源,最后通过Resource对象读取 所述应用程序安装文件的资源。
[0094] Android操作系统有其不同于其他操作系统的原理,Android为开发者提供四大 组件,具体指 Activity、Service、Broadcast Receiver 以及 Content Provider 等组件。其 中,Activity组件通常用于实现用户界面以便应用程序能与用户进行人机交互,其代码可 以被封装在classes, dex文件中,且需要在配置文件中AndroidManifest. xml实现注册; Service通常用于以后台服务的形式执行应用程序,有其自己的计算逻辑,通过创建新的进 程启动,其代码也被封装在classes, dex文件中,且需要在配置文件中AndroidManifest. xml实现注册;Content Provider组件用于在进程间传输应用程序的数据信息,需要在配 置文件中AndroidManifest. xml预先注册;Broadcast Receiver组件的注册有两种方式, 一种是静态注册,即在配置文件中AndroidManifest. xml实现注册,另一种是动态注册,即 在程序使用过程中通过Context. registerReceiver注册。
[0095] 应用程序包含多个Activity,其启动过程实际上是应用程序中的默认activity 启动过程,然后由默认activity在内部调起其他activity,故本发明重点阐述未安装应用 程序的activity组件加载调度过程。
[0096] 应用程序的配置文件Androidmanafest. xml中,各个activity的注册 信息可以视为独立注册信息模块,视为"坑位"。Android系统在对应用程序进 行安装时,由PackageManageService (PMS)对APK安装包的各个组件进行校验, 而ActivityManagerSevice (AMS)则可以根据注册信息为活动组件建立进程入口 (ActivityThread),以确保活动组件的正常运行。
[0097] 通常,Activity活动组件应当预先在Androidmanafest. xml配置文件中进行坑位 注册,并且坑位与组件名称以及活动组件的其他属性之间应保持--对应性和确定性,这 样才能够确保这些活动组件的正常注册。这种情况下,整个应用程序应当在开发时便确定 了这些活动组件,由这些活动组件有机组合而成的应用程序继而作为一个整体提供给终端 进行安装。终端每一次安装均是基于一个完整的应用程序的基础上进行,其中的每一个活 动组件都在配置文件中进行了一一对应的注册表达,不存在任何不确定性。换言之,任何未 经在Androidmanifest. xml注册的Activity活动组件,常规情况下均不能够被调度为进程 运行。由此可知,每一次为应用程序扩展功能而提供新的活动组件,均需要将应用程序重新 进行打包,并以打包后的安装文件提供给客户端进行安装,每次安装均是全量的。
当前第2页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1