WO2015055074A1 - 动态加载和调用程序的方法及装置 - Google Patents
动态加载和调用程序的方法及装置 Download PDFInfo
- Publication number
- WO2015055074A1 WO2015055074A1 PCT/CN2014/087413 CN2014087413W WO2015055074A1 WO 2015055074 A1 WO2015055074 A1 WO 2015055074A1 CN 2014087413 W CN2014087413 W CN 2014087413W WO 2015055074 A1 WO2015055074 A1 WO 2015055074A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- program
- calling
- called
- call
- loading
- 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.)
- Ceased
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Definitions
- a computer program comprising computer readable code causing the computing device to perform a dynamic loading and calling procedure in the present invention when the computer readable code is run on a computing device Methods.
- a computer readable medium storing a computer program as described above is provided.
- FIG. 1 is a flow chart showing a method of dynamically loading and calling a program according to an embodiment of the present invention
- the APK package In order to avoid the illegal tampering of the APK package, or the data error during the network transmission, the APK package needs to be legally authenticated.
- the specific steps include: extracting the package information of the APK package (PackageInfo); obtaining the signature (Signature) object according to the PackageInfo; obtaining the MD5 value of the Signature; comparing whether the MD5 value is consistent with the legal signature, if the agreement is the same, the authentication is passed, and the following steps are continued. If it is inconsistent, the authentication error will be returned, the error message will be returned, and the loading will stop.
- PluginActivity determines whether the baseActivity is empty by determining whether the baseActivity is empty. If it is determined that the baseActivity is not empty, it is determined that the Activity is called by the calling program in the form of a plugin. For the calling program, the calling program calls the called program as a plug-in after the called program determines that the instance of the called program is not empty.
- the loading module 802 is adapted to determine that the called program is successfully loaded when it is determined that the instance of the called program is not empty.
- the called program determines that the called program is called in the form of a plugin by determining that the instance of the called program is not empty.
- the calling module 805 of the calling program calls the method corresponding to the instantiated calling program, after the called program determines that the instance of the called program is not empty, the called program is called in the form of a plug-in.
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)
- Telephonic Communication Services (AREA)
Abstract
本发明公开了一种动态加载和调用程序的方法及装置,其中方法包括:调用程序接收主系统发起的调用请求;所述调用程序根据所述主系统发起的调用请求加载被调用程序,生成相关句柄及文件,并得到所述调用程序的实例;所述调用程序将所述调用程序的实例赋值给所述被调用程序的实例,对所述被调用程序进行实例化;所述调用程序发起对实例化的所述被调用程序的调用请求;所述调用程序接收所述主系统根据程序的生命周期对所述调用程序对应的方法的调用,并根据对实例化的所述被调用程序的调用请求和所述程序的生命周期调用实例化的所述被调用程序对应的方法。利用本发明提供的方案,只需下载程序包即可加载和调用APK,简化了用户使用程序的方式。
Description
本发明涉及插件处理技术领域,尤其涉及一种动态加载和调用程序的方法及装置。
类加载器(class loader)是JavaTM中的一个很重要的概念。类加载器负责加载Java类的字节代码到Java虚拟机(Virtual Machine)中。同时,类加载器是Java语言的一个创新,也是Java语言流行的重要原因之一。它使得Java类可以被动态加载到Java虚拟机中并执行。类加载器从JDK 1.0就出现了,在Web容器和OSGI(Open Service Gateway Initiative,是一种面向Java的动态模型系统)中得到了广泛的使用。
Java虚拟机使用Java类的方式如下:Java源程序(.java文件)在经过Java编译器编译之后被转换成Java字节代码(.class文件)。类加载器负责读取Java字节代码,并转换成java.lang.Class类的一个实例。每个这样的实例用来表示一个Java类。通过此实例的newInstance()方法就可以创建出该类的一个对象。
Java中的类加载器大致分为两类,一类是系统提供的,另一类是由Java应用开发人员编写的。系统提供的类加载器主要有下面三个:
◆引导加载器(Bootstrap class loader):用来加载Java核心库,它是由原生代码来实现的,并不继承于Java.lang.ClassLoader。
◆扩展加载器(Extensions class loader):用来加载Java扩展库。JavaVM的实现会提供一个扩展库目录。该类加载器在此目录中查找并加载相关的Java类。
◆系统加载器(System class loader):根据设定的环境变量来加载Java类。Java应用的类都是由它完成加载的。
除了系统提供的类加载器以外,开发人员可以通过继承
java.lang.ClassLoader类的方式实现自己的类加载器,以满足特殊的需求。
以在智能手机的安卓(Android)平台上加载APK(Android Package)格式的程序包为例。在加载APK之前,系统必须先安装APK,具体安装过程包括:首先要把该APK下载到本地,然后调用系统安装程序,用户逐步确认后系统复制该APK安装包到data/app目录下,解压并扫描安装包,把dex文件(Dalvik字节码)保存到dalvik-cache目录下,并在data/data目录下创建对应的应用数据目录。上述安装APK的步骤繁琐复杂,用户需要反复点击和确认后才能实现APK的加载,不利于APK的推广。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的动态加载和调用程序的方法和相应的动态加载和调用程序的装置。
根据本发明的一个方面,提供了一种动态加载和调用程序的方法,包括:调用程序接收主系统发起的调用请求;所述调用程序根据所述主系统发起的调用请求加载被调用程序,生成相关句柄及文件,并得到所述调用程序的实例;所述调用程序将所述调用程序的实例赋值给所述被调用程序的实例,对所述被调用程序进行实例化;所述调用程序发起对实例化的所述被调用程序的调用请求;所述调用程序接收所述主系统根据程序的生命周期对所述调用程序对应的方法的调用,并根据对实例化的所述被调用程序的调用请求和所述程序的生命周期调用实例化的所述被调用程序对应的方法。
根据本发明的另一方面,提供了一种动态加载和调用程序的装置,所述装置设置于调用程序中,且所述装置包括:调用请求接收模块,适于接收主系统发起的调用请求;加载模块,适于根据所述主系统发起的调用请求加载被调用程序,生成相关句柄及文件,并得到所述调用程序的实例;赋值模块,适于将所述调用程序的实例赋值给所述被调用程序的实例,对所述被调用程序进行实例化;调用请求发起模块,
适于发起对实例化的所述被调用程序的调用请求;调用模块,适于接收所述主系统根据程序的生命周期对所述调用程序对应的方法的调用,并根据对实例化的所述被调用程序的调用请求和所述程序的生命周期调用实例化的所述被调用程序对应的方法。
根据本发明的又一个方面,提供了一种计算机程序,包括计算机可读代码,当所述计算机可读代码在计算设备上运行时,导致所述计算设备执行本发明中的动态加载和调用程序的方法。
根据本发明的再一个方面,提供了一种计算机可读介质,其中存储了如上所述的计算机程序。
本发明的有益效果为:
根据本发明提供的动态加载和调用程序的方案,主系统利用调用程序作为媒介实现对被调用程序的加载和调用,具体地,在主系统发起对调用程序的调用请求之后,调用程序加载被调用程序;在加载过程中,将调用程序的实例赋值给被调用程序的实例;之后调用程序能够发起对被调用程序的调用请求;通过主系统调用调用程序对应的方法,调用程序进而调用被调用程序对应的方法,实现了被调用程序的加载和调用。利用本发明提供的方案,跳过背景技术中繁琐复杂的APK安装步骤,只需下载程序包即可加载和调用APK。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的动态加载和调用程序的方法的流程示意图;
图2示出了本发明实施例一个应用场景的方法流程示意图;
图3示出了本发明实施例的调用程序的抽象父类的定义示意图;
图4示出了本发明实施例的APK包(插件)的抽象父类的定义示意图;
图5示出了本发明实施例中调用程序以插件形式调用APK包的生命周期时序示意图;
图6示出了本发明实施例中调用程序以插件形式调用APK资源加载时序示意图;
图7示出了根据本发明一个实施例的动态加载和调用程序的装置的结构示意框图;
图8示出了根据本发明另一个实施例的动态加载和调用程序的装置的结构示意框图;
图9示意性地示出了用于执行根据本发明的方法的计算设备的框图;以及
图10示意性地示出了用于保持或者携带实现根据本发明的方法的程序代码的存储模块。
下面结合附图和具体的实施方式对本发明作进一步的描述。
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
为了解决现有技术中在加载和调用程序包之前必须先安装程序包的技术问题,本发明提供了一种动态加载和调用程序的方法,跳过上述繁琐复杂的安装步骤,通过相应的机制只需下载程序包即可加载和调用。图1示出了根据本发明一个实施例的动态加载和调用程序的方法的流程示意图。如图1所示,本实施例包括如下步骤:
步骤S101,调用程序接收主系统发起的调用请求。
其中,主系统指的是系统平台,例如手机平台;调用程序可以为
已安装的用于调用插件的应用,例如手机卫士等软件都可以作为调用程序。由于调用程序为已安装的应用,所以在主系统的Manifest.xml中已经注册过,因此主系统可以先发起对调用程序的调用请求,调用程序接收主系统发起的该调用请求。
步骤S102,调用程序根据主系统发起的调用请求加载被调用程序,生成相关句柄及文件,并得到调用程序的实例。
调用程序使用Java中的类加载器加载被调用程序,在加载过程中会在相应的目录下生成句柄及文件,并得到加载后的对象以及调用程序的实例。
步骤S103,调用程序将调用程序的实例赋值给被调用程序的实例,对被调用程序进行实例化。
调用程序将上述调用程序的实例赋值给被调用程序的实例,以调用者的实例作为被调用者的实例,对被调用程序进行实例化。
步骤S104,调用程序发起对实例化的被调用程序的调用请求。
在将调用程序的实例赋值给被调用程序的实例之后,调用程序通过invoke方法发起对被调用程序的调用请求。
步骤S105,调用程序接收主系统根据程序的生命周期对调用程序对应的方法的调用,并根据对实例化的被调用程序的调用请求和所述程序的生命周期调用实例化的被调用程序对应的方法。
根据本实施例提供的动态加载和调用程序的方法,主系统利用调用程序作为媒介实现对被调用程序的加载和调用,具体地,在主系统发起对调用程序的调用请求之后,调用程序加载被调用程序;在加载过程中,将调用程序的实例赋值给被调用程序的实例;之后调用程序能够发起对被调用程序的调用请求;通过主系统调用调用程序对应的方法,调用程序进而调用被调用程序对应的方法,实现了被调用程序的加载和调用。利用本实施例提供的方法,跳过背景技术中繁琐复杂的APK安装步骤,只需下载程序包即可加载和调用APK。
下面以本发明提供的方法应用于智能手机的安卓平台上加载和调用APK程序包的场景为例,进一步的详述本发明的技术方案。在以下实施例中,被调用程序为未安装的APK包,也可称为APK插件。
图2示出了本发明实施例一个应用场景的方法流程示意图。该应用场景是在Android平台上通过对系统运行过程的模拟和优化,实现动
态加载APK包及其所有逻辑和资源,动态调用该APK包中的组件(Activity)和服务(Services)等,如此便可实现Android平台的插件化编程。
如图2所示,该方法包括步骤:
步骤S201,启动软件,该软件为用于调用插件的调用程序,例如手机卫士等软件。
步骤S202,收集Android系统平台的信息,包括Android的版本、终端厂商信息、终端型号等。
由于Android系统的开放性,各家终端厂商所使用的系统基本都经过了二次开发,使得市场上的Android终端比较繁杂,收集这些信息的意义在于能够准确地获取与其适配的APK包。
步骤S203,在收集完相关信息后,将这些信息传至云端服务器,由云端服务器返回适配结果。
这样做的目的是为了使适配规则更加准确、灵活。在云端服务器返回的适配结果集里面会包含APK包的URL地址。
步骤S204,根据APK包的URL地址下载APK包。
步骤S205,对下载得到的APK包进行合法性鉴权。
为了避免APK包被非法篡改,或者在网络传输过程中数据出错,需要对APK包进行合法性鉴权。具体步骤包括:提取APK包的包信息(PackageInfo);根据PackageInfo获取签名(Signature)对象;取得Signature的MD5值;比较其MD5值与合法签名是否一致,如一致,则鉴权通过,继续下面步骤;如不一致,则鉴权错误,返回错误信息,停止加载。
步骤S206,动态加载和调用APK包。
为了方便调用APK包提供的功能,规避过多的使用反射机制,本发明将调用APK包提供的功能抽象为两个抽象父类。其中调用程序的抽象父类为CallPluginActivity,APK包的抽象父类为PluginActivity。CallPluginActivity和PluginActivity均为抽象类,需要子类实现其相应的方法,因此本文后续描述的CallPluginActivity均也代表CallPluginActivity的实现类,PluginActivity均也代表PluginActivity的实现类,后面将不再赘述。
本实施例中,调用程序为已经安装的用于调用插件的应用。APK
包(插件)为已经下载,可以作为插件调用,也可以和普通APK一样正常安装的Android应用。
调用程序的抽象父类CallPluginActivity主要是为了向APK包(插件)中的PluginActivity提供实例,即上下文Context,并完成APK包的合法性鉴权和通过反射机制加载APK包(插件)。在本发明实施例的一个例子中,调用程序的抽象父类的定义如图3所示。其中,onCreate()方法由Android系统调用用于发起对调用程序的调用请求。checkApk()方法用于对APK包进行合法性鉴权。LoadAPK()方法用于判断是否需要加载APK并生成DexClassLoader和PackageInfo等句柄及文件,并通过反射方法得到对应的PluginActivity实例(变量名为:pluginActivity)。getOtherResources()方法用于通过反射方法加载APK包的资源并生成Resources句柄(变量名为:pluginRes)。为了实现对应的功能,需要在子类中重写父类定义的如下方法:
重写以下方法替换当前CallPluginActivity的资源、样式为APK包中的资源、样式:
本文中代码后“//...”的内容是代码的注释内容。
重写以下方法便于反射调用APK包(插件)中的PluginActivity、PluginService等组件:
+startActivity(Intent):void//启动一个Activity,当Activity关闭时,不返回任何信息
+startActivityForResult(Intent,int):void//启动一个Activity,当Activity关闭时,会有一个返回值
+onActivityResult(int,int,Intent):void//当以startActivityForResult函数启动的Activity完成时,会有一个Intent作为返回值
+startService(Intent):void//启动一个服务(android.app.Service)
重写以下方法使APK包(插件)中的PluginActivity的生命周期与调用程序CallPluginActivity的生命周期一致,如onStart、onResume方法,其他方法以此类推。
重写父类onResume方法,调用invoke方法。
+onRestoreInstanceState(Bundle):void//当Activity之前被销毁再被
重建时,可以从Bundle参数中恹复保存的状态
+onStart():void
+onRestart():void//当Activity从停止状态返回到前台时,收到一个onRestart()的调用,系统还会调用onStart()方法,该方法在Activity变得可见时都会发生(不管是被重启还是第一次被创建)
+onResume():void//每次Activity进入前台时,系统都会调用该方法,包括第一次创建时
+onSaveInstanceState(Bundle):void//当Activity要停止时,系统调用该方法,Activity可以用一个键-值对集合保存状态信息
+onPause():void//当系统调用onPause()时,在技术上意味着Activity仍是部分可见的,而其他情况下意味着用户正在离开Activity,并且将到达关闭(Stopped)状态
+onStop():void//当Activity收到onStop()方法的调用时,该Activity将不再可见,并且释放不需要的资源
+onDestroy():void//Activity的第一个生命周期回调函数是onCreate(),而它的最后一个回调函数是onDestroy();系统调用该方法作为一个最终信号,表明Activity实例将要被完全从系统内存中清除
APK包(插件)的抽象父类的主要功能是完成APK包(插件)的构建和提供符合Android标准的Activity和Service等。在本发明实施例的一个例子中,APK包(插件)的抽象父类的定义如图4所示。其中,onCreate()方法由调用程序调用,用于发起对APK包(插件)的调用请求。setCallActivity()由调用程序反射调用并设置自身的实例(pluginActivity)为APK包(插件)的实例(baseActivity)。具体实现方法如下:
为了实现APK包(插件)子类对应的功能,需要在子类中重写父类定义的如下方法。
重写以下方法使APK包(插件)中的PluginActivity的生命周期受调用程序CallPluginActivity的生命周期控制,如:onStart、onResume方法,其他方法以此类推;以baseActivity变量是否为空来判断PluginActivity是由调用程序以插件形式启动,还是以Android正常启动(非插件调用的方式):
+onCreate(Bundle):void
+onRestoreInstanceState(Bundle):void
+onStart():void
+onRestart():void
+onResume():void
+onSavelnstanceState(Bundle):void
+onPause():void
+onStop():void
+onDestroy():void
关于以上方法的注释参见前文的描述。其中,在onCreate()方法里,可以执行基本的应用程序启动逻辑(这些逻辑只在Activity的整个生命活动中发生一次)。
以baseActivity变量是否为空来判断PluginActivity是否由调用程序以插件形式调用,如果是插件形式,则调用baseActivity对应方法,正常启动的话调用其父类对应方法,其他方法以此类推:
+getResources():Resources
+getTheme():Theme
+getAssets():AssetManager
+startActivity(Intent):void
+startActivityForResult(Intent,int):void
+startService(Intent):void
+onActivityResult(int,int,Intent):void
关于以上方法的注释参见前文的描述。
总而言之,调用程序与APK包(插件)之间调用的总策略为:
CallPluginActivity通过判断pluginActivity是否为空来确定是否成功加载APK包(插件)及其资源;如果判断出pluginActivity不为空,则确定成功加载APK包(插件)及其资源,并实例化对应的Activity。也即,调用程序在判断被调用程序的实例不为空时,确定成功加载了被调用程序。
PluginActivity通过判断baseActivity是否为空来确定本Activity是否由调用程序以插件的形式调用;如果判断出baseActivity不为空,则确定本Activity是由调用程序以插件的形式调用。对于调用程序来说,调用程序在被调用程序确定被调用程序的实例不为空后,以插件的形式调用被调用程序。
图5示出了本发明实施例中调用程序以插件形式调用APK包的生命周期时序示意图。如图5所示,主要包括如下步骤:
步骤S501,由Android系统调用CallPluginActivity的onCreate()方法,即Android系统发起对CallPluginActivity的调用请求。
步骤S502,CallPluginActivity执行checkApk()方法,对APK包(插件)进行合法性鉴权。有关合法性鉴权的具体步骤可参见上述实施例的描述。
步骤S503,CallPluginActivity执行LoadAPK()方法判断是否需要加载APK包(插件)并生成DexClassLoader和PackageInfo等句柄及文件,并通过反射方法得到对应的PluginActivity实例(变量名为:pluginActivity)。
步骤S504,CallPluginActivity反射调用PluginActivity的setCallActivity方法,设置自身实例到PluginActivity中(变量名为:baseActivity),利用CallPluginActivity自身的上下文Context充当PluginActivity的上下文Context。
步骤S505,CallPluginActivity通过invoke方法反射调用PluginActivity的onCreate()方法,即CallPluginActivity发起对PluginActivity的调用请求。
步骤S506,由Android系统根据Activity生命周期调用CallPluginActivity对应的方法,方法如下:
+onRestoreInstanceState(Bundle):void
+onStart():void
+onRestart():void
+onResume():void
+onSaveInstanceState(Bundle):void
+onPause():void
+onStop():void
+onDestroy():void
关于以上方法的注释参见前文的描述。
步骤S507,由CallPluginActivity根据Activity生命周期通过invoke方法反射调用PluginActivity对应的方法,方法同步骤S506。
图6示出了本发明实施例中调用程序以插件形式调用APK资源加载时序示意图。如图6所示,主要包括如下步骤:
步骤S601,由主系统根据程序的生命周期或者调用程序自身调用调用程序中的资源加载方法,加载调用程序或被调用程序的资源。
具体地,由Android系统根据Activity生命周期或者CallPluginActivity自身调用getResources、getTheme、getAssets等资源加载方法,加载调用程序或APK包(插件)资源。调用程序接收主系统根据程序的生命周期对调用程序中的资源加载方法的调用,加载调
用程序的资源或被调用程序的资源。或者,调用程序自身调用调用程序中的资源加载方法,加载调用程序的资源或被调用程序的资源。
步骤S602,由调用程序根据程序的生命周期调用被调用程序中的资源加载方法,加载被调用程序的资源。
具体地,由CallPluginActivity根据Activity生命周期通过invoke方法反射调用PluginActivity的getResources、getTheme、getAssets等资源加载方法,加载APK包(插件)资源。本步骤中,在调用程序发起对实例化的被调用程序的调用请求后,调用程序根据对实例化的被调用程序的调用请求,和,主系统调用调用程序中的资源加载方法时根据的程序的生命周期,调用被调用程序中的资源加载方法,加载被调用程序的资源。
另外,调用程序还可以以插件形式调用APK包(插件)内部PluginActivity,其时序主要包括:
首先,由主系统通过调用程序反射调用被调用程序中的组件和服务对应的方法。也即,调用程序接收主系统对被调用程序中的组件和服务对应的方法的反射调用。具体地,由Android系统通过CallPluginActivity反射调用APK包(插件)中的Activity和Service对应的方法,常用方法有:startActivity、startActivityForResult、startService、onActivityResult等。
然后,由主系统调用调用程序中的除了上述组件和服务以外的其他组件和服务对应的方法。也即,调用程序接收主系统对调用程序中的除了所述组件和服务以外的其他组件和服务对应的方法的调用。具体地,由Android系统直接调用CallPluginActivity中的除了APK包(插件)中的Activity和Service以外的其他Activity和Service对应的方法,常用方法与上个步骤相同。
最后,由调用程序调用调用程序和被调用程序中均不存在的组件和服务对应的方法。具体地,由CallPluginActivity调用调用程序和APK包(插件)中均不存在的Activity和Service对应的方法,常用方法与上个步骤相同。例如,要打开一个文本编辑器,若对应的Activity在调用程序和插件中都没有实现,那么就再调用系统其他的可以支持文本编辑的Activity。
另外,本发明实施例还提供了如下常用事件监听接口,该接口主
要用于Android的系统事件的传递,例如电量、信号、网络监听等。
<action
android:name=″android.net.conn.CONNECTIVITY_CHANGE″/>
//监听网络连接状态变化的接口
<action
android:name=″android.intent.action.BATTERY_CHANGED″/>
//监听充电状态或者电池电量变化的接口
<action android:name=″android.intent.action.SCREEN_OFF″/>
//监听屏幕被关闭的接口
<action android:name=″android.intent.action.SCREEN_ON″/>
//监听屏幕被打开的接口
<action android:name=″android.intent.action.SIG_STR″/>
//监听电话的信号强度变化的接口
<action android:name=″android.intent.action.SERVICE_STATE″/>
//监听电话服务的状态变化的接口
根据上述实施例提供的方法,实现了在Android平台上动态加载和调用APK包(插件)及其所有逻辑和资源,动态调用该APK中的Activity和Service,进而实现了Android平台的插件化编程。与现有的动态加载jar包的方案相比,本发明至少具有优点:
1.将jar文件改为APK文件,简化了签名流程;
2.Activity的生命周期由调用程序负责;
3.通过本发明提供的方法可以调用APK中的Activity的所有布局、图片、样式等资源文件,以及该Activity的自身的所有逻辑;
4.本发明跳过了繁琐复杂的安装步骤,无需安装只需下载APK即可完成加载和调用;
5.本发明中,APK即是插件又是独立的APK,可以单独安装使用,提升了便利性;
6.通常情况下,Android程序为了兼容大多数系统版本,如:Android2.2、Android 4.0.3、Android 4.1、Android 4.2等,一般都会使用较低版本的SDK,如:SDK Api Level 8即Android 2.2,这样的程序在Android4.XX系统中不能充分发挥高版本Android系统的特性,而本发明提供的动态加载APK包(插件)的方法可以根据Android系统版本加载相
应的插件,充分发挥系统特性。
图7示出了根据本发明一个实施例的动态加载和调用程序的装置的结构示意框图。本实施例中,该动态加载和调用程序的装置设置于调用程序中,用于实现前述动态加载和调用程序的方法。本实施例的动态加载和调用程序的装置包括:
调用请求接收模块701,适于接收主系统发起的调用请求;加载模块702,适于根据主系统发起的调用请求加载被调用程序,生成相关句柄及文件,并得到调用程序的实例;赋值模块703,适于将调用程序的实例赋值给被调用程序的实例,对被调用程序进行实例化;调用请求发起模块704,适于发起对实例化的被调用程序的调用请求;以及调用模块705,适于接收主系统根据程序的生命周期对调用程序对应的方法的调用,并根据对实例化的被调用程序的调用请求和所述程序的生命周期调用实例化的被调用程序对应的方法。
根据本实施例提供的设置于调用程序中的动态加载和调用程序的装置,调用程序作为主系统和被调用程序之间的媒介,实现了对被调用程序的加载和调用,具体地,在接收到主系统发起的对调用程序的调用请求之后,调用程序加载被调用程序;在加载过程中,将调用程序的实例赋值给被调用程序的实例;之后调用程序能够发起对被调用程序的调用请求;通过主系统调用调用程序对应的方法,调用程序进而调用被调用程序对应的方法,实现了被调用程序的加载和调用。利用本实施例提供的方法,跳过背景技术中繁琐复杂的APK安装步骤,只需下载程序包即可加载和调用APK。
图8示出了根据本发明一个实施例的动态加载和调用程序的装置的结构示意框图。本实施例对图7所示实施例中的动态加载和调用程序的装置进行了优化。
如图8所示,优化后的动态加载和调用程序的装置包括:调用请求接收模块801,适于接收主系统发起的调用请求;加载模块802,适于根据主系统发起的调用请求加载被调用程序,生成相关句柄及文件,并得到调用程序的实例;赋值模块803,适于将调用程序的实例赋值给被调用程序的实例,对被调用程序进行实例化;调用请求发起模块804,适于发起对实例化的被调用程序的调用请求;以及调用模块805,适于接收主系统根据程序的生命周期对调用程序对应的方法的调用,并根
据对实例化的被调用程序的调用请求和所述程序的生命周期调用实例化的被调用程序对应的方法。其中,主系统指的是系统平台,例如手机平台;调用程序可以为已安装的用于调用插件的应用,例如手机卫士等软件;被调用程序可以为未安装的APK插件。
其中,调用请求接收模块801适于接收主系统发起的调用请求,由于调用程序在主系统的Manifest.xml中已经注册过,因此主系统可以先发起对调用程序的调用请求,调用程序通过调用请求接收模块801接收主系统发起的调用请求。
可选地,本实施例的动态加载和调用程序的装置还包括:鉴权模块806,适于在加载模块802根据主系统发起的调用请求加载被调用程序之前,对被调用程序进行合法性鉴权。
在上述Android系统平台上动态加载和调用APK包(插件)的应用场景中,主系统为Android系统,主系统通过调用CallPluginActivity的onCreate()方法发起对CallPluginActivity的调用请求,CallPluginActivity通过调用请求接收模块801接收主系统发起的调用请求。鉴权模块806执行checkApk()方法,对APK包(插件)进行合法性鉴权。加载模块802执行LoadAPK()方法判断是否需要加载APK包(插件)并生成DexClassLoader和PackageInfo等句柄及文件,并通过反射方法得到对应的PluginActivity实例(变量名为:pluginActivity)。赋值模块803反射调用PluginActivity的setCallActivity方法,设置自身实例到PluginActivity中(变量名为:baseActivity),利用CallPluginActivity自身的上下文Context充当PluginActivity的上下文Context。调用请求发起模块804通过反射调用PluginActivity的onCreate()方法发起对被调用程序的调用请求。主系统根据Activity生命周期调用CallPluginActivity对应的方法,调用程序通过调用模块805接收主系统的调用,并根据Activity生命周期通过invoke方法反射调用PluginActivity对应的方法。
其中,加载模块802适于判断被调用程序的实例不为空时,确定成功加载了被调用程序。被调用程序通过判断被调用程序的实例不为空来确定被调用程序以插件的形式被调用。相应地,调用程序的调用模块805在调用实例化的被调用程序对应的方法时,在被调用程序确定被调用程序的实例不为空后,以插件的形式调用被调用程序。
为了能够使调用程序以插件形式调用APK资源,主系统根据程序的生命周期调用调用程序中的资源加载方法,加载调用程序的资源或被调用程序的资源。相应地,调用模块805包括:第一调用加载模块8051,适于接收主系统根据程序的生命周期对调用程序中的资源加载方法调用,加载调用程序的资源或被调用程序的资源;以及第二调用加载模块8052,适于根据对实例化的被调用程序的调用请求和所述程序的生命周期,调用被调用程序中的资源加载方法,加载被调用程序的资源。
具体地,主系统根据Activity生命周期调用getResources、getTheme、getAssets等资源加载方法,加载调用程序的资源或APK包(插件)资源。调用程序通过第一调用加载模块8051接收主系统根据程序的生命周期对调用程序中的资源加载方法调用,加载调用程序的资源或被调用程序的资源;然后,第二调用加载模块8052根据对实例化的被调用程序的调用请求和所述程序的生命周期,调用被调用程序中的资源加载方法,加载被调用程序的资源。具体地,第二调用加载模块8052根据Activity生命周期通过invoke方法反射调用PluginActivity的getResources、getTheme、getAssets等资源加载方法,加载APK包(插件)资源。
为了能够使调用程序以插件形式调用APK包(插件)内部PluginActivity,调用模块805进一步包括:第一调用接收模块8053,适于接收主系统对被调用程序中的组件和服务对应的方法的反射调用;以及第二调用接收模块8054,适于接收主系统对调用程序中的除了所述组件和服务以外的其他组件和服务对应的方法的调用。具体地,主系统通过第一调用接收模块8053反射调用APK包(插件)中的Activity和Service对应的方法,常用方法有:startActivity、startActivityForResult、startService、onActivityResult等。主系统通过第二调用接收模块8054直接调用CallPluginActivity中的除了 APK包(插件)中的Activity和Service以外的其他Activity和Service对应的方法,常用方法与上述相同。调用模块805进一步包括:子调用模块8055,适于调用调用程序和被调用程序中均不存在的组件和服务对应的方法。具体地,子调用模块8055调用调用程序和APK包(插件)中均不存在的Activity和Service对应的方法,常用方法与上述相同。
根据本实施例提供的动态加载和调用程序的装置,主系统利用调用程序作为媒介实现对被调用程序的加载和调用,具体地,在主系统发起对调用程序的调用请求之后,调用请求接收模块801接收主系统发起的调用请求;加载模块802加载被调用程序;在加载过程中,赋值模块803将调用程序的实例赋值给被调用程序的实例;之后调用请求发起模块804发起对被调用程序的调用请求;通过主系统调用调用程序对应的方法,调用模块805调用被调用程序对应的方法,实现了被调用程序的加载和调用。利用本实施例提供的装置,在加载和调用程序时跳过上述背景技术中繁琐复杂的APK安装步骤,只需下载程序包即可实现加载和调用APK。
在Android系统平台上动态加载和调用APK包(插件)的应用场景中,通过本发明提供的装置可以调用APK中的Activity的所有布局、图片、样式等资源文件,以及该Activity的自身的所有逻辑;APK即是插件又是独立的APK,可以单独安装使用,提升了便利性。本发明提供的动态加载APK包(插件)的装置可以根据Android系统版本加载相应的插件,充分发挥系统特性。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切
地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用徼处理器或者数字信号处理器(DSP)来实现根据本发明实施例的动态加载和调用程序的装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
例如,图9示意性地示出了可以实现根据本发明的动态加载和调用程序的方案的计算设备,例如移动终端。该移动终端传统上包括处理器910和以存储器920形式的计算机程序产品或者计算机可读介质。
存储器920可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、或者ROM之类的电子存储器。存储器920具有用于执行上述方法中的任何方法步骤的程序代码931的存储空间930。例如,用于程序代码的存储空间930可以包括分别用于实现上面的方法中的各种步骤的各个程序代码931。这些程序代码可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。这些计算机程序产品包括诸如硬盘,紧致盘(CD)、存储卡或者软盘之类的程序代码载体。这样的计算机程序产品通常为如图10所示意的便携式或者固定存储单元。该存储单元可以具有与图9的移动终端中的存储器920类似布置的存储段、存储空间等。程序代码可以例如以适当形式进行压缩。通常,存储单元包括计算机可读代码931’,即可以由例如诸如910之类的处理器读取的代码,这些代码当由移动终端运行时,导致该移动终端执行上面所描述的方法中的各个步骤。
本文中所称的“一个实施例”、“实施例”或者“一个或者多个实施例”意味着,结合实施例描述的特定特征、结构或者特性包括在本发明的至少一个实施例中。此外,请注意,这里“在一个实施例中”的词语例子不一定全指同一个实施例。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
此外,还应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。
Claims (16)
- 一种动态加载和调用程序的方法,包括:调用程序接收主系统发起的调用请求;所述调用程序根据所述主系统发起的调用请求加载被调用程序,生成相关句柄及文件,并得到所述调用程序的实例;所述调用程序将所述调用程序的实例赋值给所述被调用程序的实例,对所述被调用程序进行实例化;所述调用程序发起对实例化的所述被调用程序的调用请求;所述调用程序接收所述主系统根据程序的生命周期对所述调用程序对应的方法的调用,并根据对实例化的所述被调用程序的调用请求和所述程序的生命周期调用实例化的所述被调用程序对应的方法。
- 根据权利要求1所述的方法,其中,所述调用程序为已安装的用于调用插件的应用,所述被调用程序为未安装的APK插件。
- 根据权利要求1或2所述的方法,其中,所述调用程序根据所述主系统发起的调用请求加载被调用程序的步骤包括:所述调用程序判断所述被调用程序的实例不为空时,确定成功加载了所述被调用程序。
- 根据权利要求3所述的方法,其中,所述调用程序调用实例化的所述被调用程序对应的方法的步骤包括:所述调用程序在所述被调用程序确定所述被调用程序的实例不为空后,以插件的形式调用所述被调用程序。
- 根据权利要求1-4任一项所述的方法,其中,所述调用程序接收所述主系统根据程序的生命周期对所述调用程序对应的方法的调用,并根据对实例化的所述被调用程序的调用请求和所述程序的生命周期调用实例化的所述被调用程序对应的方法的步骤包括:所述调用程序接收所述主系统根据程序的生命周期对所述调用程序中的资源加载方法的调用,加载所述调用程序的资源或所述被调用程序的资源;所述调用程序根据对实例化的所述被调用程序的调用请求和所述程序的生命周期,调用所述被调用程序中的资源加载方法,加载所述被调用程序的资源。
- 根据权利要求1-4任一项所述的方法,其中,所述调用程序接收所述主系统根据程序的生命周期对所述调用程序对应的方法的调用,并根据对实例化的所述被调用程序的调用请求和所述程序的生命周期调用实例化的所述被调用程序对应的方法的步骤包括:所述调用程序接收所述主系统对所述被调用程序中的组件和服务对应的方法的反射调用;所述调用程序接收所述主系统对所述调用程序中的除了所述组件和服务以外的其他组件和服务对应的方法的调用;以及所述调用程序调用所述调用程序和所述被调用程序中均不存在的组件和服务对应的方法。
- 根据权利要求1-6任一项所述的方法,其中,在所述调用程序根据所述主系统发起的调用请求加载被调用程序的步骤之前,所述方法还包括:所述调用程序对所述被调用程序进行合法性鉴权。
- 一种动态加载和调用程序的装置,所述装置设置于调用程序中,且所述装置包括:调用请求接收模块,适于接收主系统发起的调用请求;加载模块,适于根据所述主系统发起的调用请求加载被调用程序,生成相关句柄及文件,并得到所述调用程序的实例;赋值模块,适于将所述调用程序的实例赋值给所述被调用程序的实例,对所述被调用程序进行实例化;调用请求发起模块,适于发起对实例化的所述被调用程序的调用请求;调用模块,适于接收所述主系统根据程序的生命周期对所述调用程序对应的方法的调用,并根据对实例化的所述被调用程序的调用请求和所述程序的生命周期调用实例化的所述被调用程序对应的方法。
- 根据权利要求8所述的装置,其中,所述调用程序为已安装的用于调用插件的应用,所述被调用程序为未安装的APK插件。
- 根据权利要求8或9所述的装置,其中,所述加载模块,适于判断所述被调用程序的实例不为空时,确定成功加载了所述被调用程序,生成相关句柄及文件,并得到所述调用程序的实例。
- 根据权利要求10所述的装置,其中,所述调用模块在调用实 例化的所述被调用程序对应的方法时,在所述被调用程序确定所述被调用程序的实例不为空后,以插件的形式调用所述被调用程序。
- 根据权利要求8-11任一项所述的装置,其中,所述调用模块包括:第一调用加载模块,适于接收所述主系统根据程序的生命周期对所述调用程序中的资源加载方法调用,加载所述调用程序的资源或所述被调用程序的资源;第二调用加载模块,适于根据对实例化的所述被调用程序的调用请求和所述程序的生命周期,调用所述被调用程序中的资源加载方法,加载所述被调用程序的资源。
- 根据权利要求8-11任一项所述的装置,其中,所述调用模块包括:第一调用接收模块,适于接收所述主系统对所述被调用程序中的组件和服务对应的方法的反射调用;第二调用接收模块,适于接收所述主系统对所述调用程序中的除了所述组件和服务以外的其他组件和服务对应的方法的调用;子调用模块,适于调用所述调用程序和所述被调用程序中均不存在的组件和服务对应的方法。
- 根据权利要求8-13任一项所述的装置,其中,所述装置还包括:鉴权模块,适于在所述加载模块根据所述主系统发起的调用请求加载被调用程序之前,对所述被调用程序进行合法性鉴权。
- 一种计算机程序,包括计算机可读代码,当所述计算机可读代码在计算设备上运行时,导致所述计算设备执行根据权利要求1-7中的任一个所述的动态加载和调用程序的方法。
- 一种计算机可读介质,其中存储了如权利要求15所述的计算机程序。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201310487438.2A CN103530156B (zh) | 2013-10-17 | 2013-10-17 | 动态加载和调用程序的方法及装置 |
| CN201310487438.2 | 2013-10-17 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| WO2015055074A1 true WO2015055074A1 (zh) | 2015-04-23 |
Family
ID=49932196
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| PCT/CN2014/087413 Ceased WO2015055074A1 (zh) | 2013-10-17 | 2014-09-25 | 动态加载和调用程序的方法及装置 |
Country Status (2)
| Country | Link |
|---|---|
| CN (1) | CN103530156B (zh) |
| WO (1) | WO2015055074A1 (zh) |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN105159803A (zh) * | 2015-09-17 | 2015-12-16 | 成都中科创达软件有限公司 | 一种应用程序的恢复方法及系统 |
| CN113886854A (zh) * | 2021-10-14 | 2022-01-04 | 广州九尾信息科技有限公司 | 一种基于安卓平台权限监控与管理的方法和装置 |
Families Citing this family (28)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN103530156B (zh) * | 2013-10-17 | 2016-11-16 | 北京奇虎科技有限公司 | 动态加载和调用程序的方法及装置 |
| CN104216741A (zh) * | 2014-08-25 | 2014-12-17 | 华中科技大学 | 基于APK动态加载的Android插件化实现方法、装置及交互方法 |
| CN104239054A (zh) * | 2014-09-12 | 2014-12-24 | 广州市久邦数码科技有限公司 | 一种基于安卓系统的插件加载方法及其系统 |
| CN105630518A (zh) * | 2014-10-28 | 2016-06-01 | 北京娜迦信息科技发展有限公司 | Android应用软件资源更新的方法和装置 |
| CN104375861B (zh) * | 2014-11-04 | 2017-06-09 | 北京奇虎科技有限公司 | 基于安卓平台的应用程序免安装运行的方法、装置及终端 |
| CN104317625A (zh) * | 2014-11-09 | 2015-01-28 | 刘鹏 | 一种apk文件的动态加载方法 |
| CN104360884A (zh) * | 2014-11-18 | 2015-02-18 | 久邦计算机技术(广州)有限公司 | 一种基于安卓系统的插件资源包加载方法 |
| CN104461663B (zh) * | 2014-12-30 | 2018-04-20 | 北京奇虎科技有限公司 | 一种加载其它移动端应用的方法、装置和移动终端 |
| CN104507158B (zh) * | 2014-12-30 | 2018-10-23 | 北京奇虎科技有限公司 | 一种建立无线局域网连接的方法、装置和移动终端 |
| CN104580715B (zh) * | 2014-12-30 | 2017-08-25 | 北京奇虎科技有限公司 | 一种移动端应用客户端装置和移动终端 |
| CN104714828B (zh) * | 2015-03-31 | 2017-06-09 | 北京奇虎科技有限公司 | 应用安装、运行方法及装置 |
| CN104731600A (zh) * | 2015-03-31 | 2015-06-24 | 上海盈方微电子有限公司 | 一种将安卓系统服务插件化的实现方法 |
| CN105183457B (zh) * | 2015-08-13 | 2018-11-06 | 北京金山安全软件有限公司 | 一种监听界面生命周期回调的方法及装置 |
| CN105068819A (zh) * | 2015-09-10 | 2015-11-18 | 北京金山安全软件有限公司 | 一种应用程序的调用方法、装置及终端 |
| CN105975290A (zh) * | 2015-10-13 | 2016-09-28 | 乐视致新电子科技(天津)有限公司 | 一种解析apk文件的方法和装置 |
| CN105511902B (zh) * | 2015-11-09 | 2019-11-12 | Tcl集团股份有限公司 | 一种安卓平台模块动态加载的方法及系统 |
| CN105511935B (zh) * | 2015-12-09 | 2019-07-09 | 网易(杭州)网络有限公司 | 资源索引值的获取方法及装置 |
| CN105955787B (zh) * | 2016-05-18 | 2019-11-22 | 深圳市掌玩网络技术有限公司 | 一种用于Android系统的插件加载方法及装置 |
| CN106293817A (zh) * | 2016-08-01 | 2017-01-04 | 乐视控股(北京)有限公司 | 一种替换插件的方法及装置 |
| CN106686420A (zh) * | 2016-12-09 | 2017-05-17 | 广州华多网络科技有限公司 | 直播应用程序的管理方法及装置 |
| CN106775879B (zh) * | 2016-12-22 | 2020-09-11 | 福建天泉教育科技有限公司 | 基于安卓系统客户端的vr应用免安装方法及其系统 |
| CN106817373A (zh) * | 2017-01-23 | 2017-06-09 | 重庆邮电大学 | 一种面向私有云平台的取证方法 |
| CN111309407B (zh) * | 2020-02-21 | 2023-07-11 | 咪咕文化科技有限公司 | 集成第三方库的处理方法及装置 |
| CN111475227B (zh) * | 2020-04-02 | 2022-02-01 | 深圳创维-Rgb电子有限公司 | 业务插件加载实现方法、装置和终端设备 |
| CN112241473B (zh) * | 2020-09-07 | 2025-01-17 | 上海连尚网络科技有限公司 | 一种用于为应用配置数据的方法与设备 |
| CN112199151B (zh) * | 2020-09-07 | 2023-10-24 | 成都安易迅科技有限公司 | 一种应用程序的运行方法及装置 |
| CN113419760B (zh) * | 2021-06-24 | 2024-11-08 | 广联达科技股份有限公司 | 打开/保存工程文件的方法、装置、计算机设备和介质 |
| CN113568679A (zh) * | 2021-07-20 | 2021-10-29 | 深圳Tcl新技术有限公司 | 插件加载方法、装置、存储介质及电子设备 |
Citations (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2001050250A2 (en) * | 2000-01-06 | 2001-07-12 | Sun Microsystems, Inc. | Memory efficient program pre-execution verifier and method |
| CN102999352A (zh) * | 2012-11-15 | 2013-03-27 | 中国科学院声学研究所 | 一种嵌入式系统组件加载方法 |
| CN103309741A (zh) * | 2013-06-17 | 2013-09-18 | 腾讯科技(深圳)有限公司 | 调用插件功能的方法和装置 |
| CN103530156A (zh) * | 2013-10-17 | 2014-01-22 | 北京奇虎科技有限公司 | 动态加载和调用程序的方法及装置 |
Family Cites Families (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US8370824B2 (en) * | 2007-10-23 | 2013-02-05 | International Business Machines Corporation | Dynamic class loading |
| CN101924798B (zh) * | 2010-09-08 | 2012-11-21 | 北京大学 | 一种基于文件类型的Android构件透明加载方法及系统 |
-
2013
- 2013-10-17 CN CN201310487438.2A patent/CN103530156B/zh active Active
-
2014
- 2014-09-25 WO PCT/CN2014/087413 patent/WO2015055074A1/zh not_active Ceased
Patent Citations (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2001050250A2 (en) * | 2000-01-06 | 2001-07-12 | Sun Microsystems, Inc. | Memory efficient program pre-execution verifier and method |
| CN102999352A (zh) * | 2012-11-15 | 2013-03-27 | 中国科学院声学研究所 | 一种嵌入式系统组件加载方法 |
| CN103309741A (zh) * | 2013-06-17 | 2013-09-18 | 腾讯科技(深圳)有限公司 | 调用插件功能的方法和装置 |
| CN103530156A (zh) * | 2013-10-17 | 2014-01-22 | 北京奇虎科技有限公司 | 动态加载和调用程序的方法及装置 |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN105159803A (zh) * | 2015-09-17 | 2015-12-16 | 成都中科创达软件有限公司 | 一种应用程序的恢复方法及系统 |
| CN113886854A (zh) * | 2021-10-14 | 2022-01-04 | 广州九尾信息科技有限公司 | 一种基于安卓平台权限监控与管理的方法和装置 |
Also Published As
| Publication number | Publication date |
|---|---|
| CN103530156B (zh) | 2016-11-16 |
| CN103530156A (zh) | 2014-01-22 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN103530156B (zh) | 动态加载和调用程序的方法及装置 | |
| US9811360B2 (en) | Dynamic determination of application server runtime classloading | |
| CN104699616B (zh) | 一种应用测试的方法、装置及系统 | |
| CN104714828B (zh) | 应用安装、运行方法及装置 | |
| CN102622241B (zh) | 一种软件升级方法及装置 | |
| CN112083968B (zh) | 一种宿主中插件加载方法及装置 | |
| US8539506B2 (en) | Dynamic injection of code into running process | |
| WO2017050094A1 (zh) | 加载应用程序的方法及装置 | |
| CN106055368B (zh) | 应用更新方法和装置 | |
| CN104731622B (zh) | 一种应用程序的加载方法、装置和移动终端 | |
| CN106569880B (zh) | 一种Android应用间动态共享资源的方法及系统 | |
| CN103853586A (zh) | 一种在uefi层实现无线网卡驱动的方法 | |
| CN114490103A (zh) | 一种操作系统接口调用方法、装置以及电子设备 | |
| CN107220074A (zh) | 对支撑层软件功能的访问、升级方法及装置 | |
| CN116643778B (zh) | 一种应用程序优化方法及电子设备 | |
| CN106909409A (zh) | 一种运行应用程序的apk插件的方法及装置 | |
| WO2017041499A1 (zh) | 一种软件升级方法、系统和计算机可读存储介质 | |
| CN104636122B (zh) | 一种能力组件的共享方法和设备 | |
| CN104615933A (zh) | 防软件反编译的方法、防反编译软件启动的方法和装置 | |
| WO2018032653A1 (zh) | 一种Java卡应用的功能实现方法及装置 | |
| CN113703857A (zh) | 一种启动应用的方法、装置及计算机可读存储介质 | |
| CN106909406A (zh) | 一种加载应用程序的apk插件的方法及装置 | |
| Yim et al. | Treble: Fast software updates by creating an equilibrium in an active software ecosystem of globally distributed stakeholders | |
| WO2019157891A1 (zh) | 应用安装方法、应用安装包的生成方法 | |
| CN110852139B (zh) | 生物特征识别方法、装置、设备以及存储介质 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| 121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 14854408 Country of ref document: EP Kind code of ref document: A1 |
|
| NENP | Non-entry into the national phase |
Ref country code: DE |
|
| 122 | Ep: pct application non-entry in european phase |
Ref document number: 14854408 Country of ref document: EP Kind code of ref document: A1 |





