CN102486735A - 一种手机软件动态加载方法及装置 - Google Patents
一种手机软件动态加载方法及装置 Download PDFInfo
- Publication number
- CN102486735A CN102486735A CN2010105782098A CN201010578209A CN102486735A CN 102486735 A CN102486735 A CN 102486735A CN 2010105782098 A CN2010105782098 A CN 2010105782098A CN 201010578209 A CN201010578209 A CN 201010578209A CN 102486735 A CN102486735 A CN 102486735A
- Authority
- CN
- China
- Prior art keywords
- party application
- function
- fset
- file
- ext
- 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
Links
Images
Landscapes
- Stored Programmes (AREA)
- Telephonic Communication Services (AREA)
Abstract
本发明公开了一种手机软件动态加载方法及装置,用于解决在,例如MTK Feature Phone,手机上动态加载和运行第三方软件的技术问题。本发明在手机的只读存储器中烧结通用的动态加载程序,并向第三方公开第三方应用程序需要遵循的程序入口函数、Native API导入结构及第三方应用程序的编译链接的方式,通用动态加载程序依据上述预设的接口加载运行第三方应用程序。通过本发明的技术方案解决了在手机上动态加载和运行第三方应用程序的技术问题,使得用户能够在如MTK feature phone手机上面运行各种第三方应用程序,使用户在不换手机的前提下,有了更多新的用户体验。
Description
技术领域
本发明涉及手机终端技术领域,尤其涉及一种手机软件动态加载方法及装置。
背景技术
对于一些非智能手机,例如MTK Feature Phone(台湾联发科技手机),其应用程序都是在出厂前烧录进手机里面,不能让用户自己安装、更新和删除第三方提供的新的手机软件,这样就限制了用户的个性化需求,不利于这类手机的普及和应用。
发明内容
有鉴于此,本发明的主要目的在于提供一种手机软件动态加载的方法及装置,用于解决在,如MTK Feature Phone,手机上动态加载和运行第三方软件的技术问题。
为达到上述目的,本发明的技术方案是这样实现的:
一种手机软件动态加载方法,包括:
获取所述第三方应用程序的文件句柄,将所述第三方应用程序载入到内存中;
将第三方应用程序需要的本地应用程序接口(Native API)函数导出到函数映射结构类型(EXT_FSET)实例中;
将第三方应用程序在内存中的载入地址及EXT_FSET结构实例地址作为动态加载函数的参数传入动态加载函数,并执行动态加载函数。
进一步地,在载入所述第三方应用程序之前,还包括第三方应用程序的生成过程,具体为:
在编写第三方应用程序时,按照动态加载接口编写第三方应用程序的入口函数,将所述EXT_FSET结构类型的指针作为所述入口函数的参数;
对第三方应用程序的源代码文件进行编译链接,生成第三方应用程序的可执行文件或包含所述第三方应用程序的可执行文件和资源文件的安装包;
若生成的是安装包,则在载入所述第三方应用程序之前还包括解包的过程。
进一步地,在对所述第三方应用程序的源代码文件进行编译链接时,将包含入口函数的代码段置于所生成的可执行文件起始位置。
进一步地,所述动态加载函数通过第三方应用程序的可执行文件在内存中的起始地址调用第三方应用程序的入口函数,并将所述EXT_FSET结构实例地址作为参数传入所述第三方应用程序的入口函数。
基于本发明实施例,本发明还提出一种手机软件动态加载装置,该装置包括:
应用载入模块,用于获取所述第三方应用程序的文件句柄,将所述第三方应用程序载入到手机内存中;
API导出模块,用于将第三方应用程序需要的手机Native API导出到函数映射结构类型EXT_FSET实例当中;
跳转执行模块,用于在第三方应用程序的可执行文件载入成功及Native API导出成功后,以存储所述第三方应用程序的可执行文件的内存地址及函数映射结构类型EXT_FSET实例的地址为参数,通过动态加载函数执行跳转操作后运行所述第三方应用程序。
进一步地,所述装置还包括第三方应用程序生成模块,该模块用于生成第三方应用程序,该模块进一步包括:
编制模块,用于编制第三方应用程序,并按照动态加载接口编写第三方应用程序的入口函数,所述入口函数的参数包括所述EXT_FSET结构类型的指针;
编译链接模块,用于对第三方应用程序的源代码文件进行编译链接,生成第三方应用程序的可执行文件或包含所述第三方应用程序的可执行文件和资源文件的安装包。
进一步地,所述编译链接模块在对所述第三方应用程序的源代码文件进行编译链接时,将包含入口函数的代码段置于所生成的可执行文件起始位置。
进一步地,所述跳转执行模块所执行的动态加载函数以存储所述第三方应用程序的可执行文件的内存地址及函数映射结构类型EXT_FSET实例的地址为参数,通过第三方应用程序的可执行文件在内存中的起始地址调用第三方应用程序的入口函数,并将EXT_FSET结构实例地址作为参数传入所述第三方应用程序的入口函数,从而将所述第三方应用程序运行起来。
本发明在手机的只读存储器中烧结通用的动态加载程序,并向第三方公开第三方应用程序需要遵循的程序入口函数、Native API导入结构及第三方应用程序的编译链接的方式,通用动态加载程序依据上述预设的接口加载运行第三方应用程序。通过本发明的技术方案解决了在,如MTK Feature Phone,手机上动态加载和运行第三方应用程序的技术问题,使得用户能够在如MTK featurephone手机上面安装各种第三方应用程序,使用户在不换手机的前提下,有了更多新的用户体验。
附图说明
图1为本发明手机软件动态加载方法的流程图;
图2为本发明手机软件动态加载装置的结构示意图。
具体实施方式
本发明的基本思想是:在手机出厂时,在手机的只读存储器中烧结通用的动态加载程序,通过该通用动态加载程序提供的动态加载接口加载运行第三方应用程序。
为使本发明的目的、技术方案和优点更加清楚明白,以下举实施例并参照附图,对本发明进一步详细说明。
图1为本发明手机软件动态加载的方法流程图,具体步骤如下:
步骤101:按照动态加载接口编写第三方应用程序的入口函数;
为了在类似MTK Feature Phone手机上动态加载第三方应用程序,第三方应用程序首先需要按照本发明提供的动态加载接口来编写;
本发明提供的动态加载接口的核心内容包括:第三方应用程序的程序入口的定义,以及如何将手机提供的本地应用程序接口(Native API)函数指针导入到第三方应用程序中。所述Native API指手机芯片原厂商提供的用于实现手机界面控制、本地应用控制(如短信、电话、多媒体等)、及系统事件处理等功能的函数。
本发明一优选实施例中,对第三方应用程序的程序入口的定义如下:
#pragma arm section code=″DL_entry_sec″
void DL_entry(EXT_FSET*fset)
{
//以下省略第三方应用程序入口函数的具体执行代码
...
}
#pragma arm section code
其中,DL_entry_sec为第三方应用程序的程序入口函数所在的代码段的名称;DL_entry为第三方应用程序的程序入口函数;fset为传入第三方应用程序的程序入口函数的指针参数;EXT_FSET为一结构类型,本发明命名为函数映射结构类型,该结构实质上是一个指针集合,用于映射手机提供的Native API函数,以供第三方应用程序调用;EXT_FSET需要对第三方应用程序公开,第三方应用程序只有依照该接口定义的映射关系才能正确地调用手机提供的Native API;第三方应用程序所在文件的文件名为DL_test.c。
基于上述第三方应用程序的程序入口函数的定义,所述EXT_FSET结构类型的定义示例如下:
typedef struct
{
//Phone native apis
UI_funcs*ui_funcs;
Event_funcs*event_funcs;
...
}EXT_FSET;
UI_funcs、event_funcs分别代表手机native API里面的图形接口(UI)函数指针集合和事件(event)函数指针集合。
以UI_funcs为例,定义如下:
typedef struct
{
void(*goto_mainmenu)(void);
void(*mmi_gfx_entry_menuscreen)(void);
...
}UI_funcs;
各个函数指针的集合就是函数指针的结构,里面的每一个指针与手机Native API构成映射关系,第三方应用程序通过访问该结构的各个成员即可调用对应的手机Native API。
步骤102:对第三方应用程序进行编译链接生成可执行文件,在编译链接时,通过编译链接参数指定包含入口函数的代码段,并将包含入口函数的代码段置于运行域的起始位置;
本发明优选实施例中,在编译链接时所使用的参数如下:
在编译时加入以下参数:/ropi/rwpi
在链接时加入以下参数:-entry DL_test.o(DL_entry_sec)-firstDL_test.o(DL_entry_sec)-rwpi-ropi。
其中,ropi参数用于指定被编译或链接的为一个段,在这个段中代码和只读数据的地址在运行的时候可以改变。rwpi参数用于指定被编译或链接的为一个段,在这个段中的可读/写的数据地址在运行的时候可以改变。entry参数用于指定执行链接的目标文件中唯一的初始化入口点。First参数用于将被选择的输入段放在运行域的起始位置。本发明通过entry参数指定链接后生成的第三方应用程序的初始化入口点位于DL_entry_sec标识的代码段;通过First参数将DL_entry_sec所标识的代码段指定为第三方应用程序运行时的起始点。
DL_test.o是DL_test.c(程序入口函数所在文件)编译生成的目标(obj)文件,对目标文件进行链接后获得可执行二进制BIN文件。
本发明优选实施例中,若第三方应用程序还需要一些资源文件,例如:图标(icon)、音频(audio)、视频(video)、图像(image)类型的文件等,可将上述编译链接后生成的可执行文件和资源文件一起打包,打包后生成可动态加载的程序包。
以上步骤为生成可动态加载的第三方应用程序的过程,在生成第三方应用程序后,即可通过以下动态加载过程在手机中动态加载并运行第三方应用程序。
步骤103:把编译链接生成的第三方应用程序的可执行文件存入手机的内存或外存;
优选地,若之前对编译链接后生成的可执行文件和资源文件进行了打包操作,则在执行该步骤之前,还需要进行解包操作,并将解出的资源文件和可执行BIN文件存放在手机的内存或外存的指定文件目录下。
步骤104:获取需要加载的第三方应用程序的可执行文件的文件句柄,通过该文件句柄获取第三方应用程序可执行文件的大小,并申请相同大小的内存空间,然后将第三方应用程序的可执行文件读入到新申请的内存空间中;
步骤105:将第三方应用程序需要的手机Native API导出到EXT_FSET结构实例中;
步骤106:将存放第三方应用程序的可执行文件的内存地址及存放NativeAPI指针的EXT_FSET结构实例的内存地址作为动态加载函数的参数,执行动态加载函数;
步骤107:动态加载函数通过第三方应用程序的可执行文件在内存中的起始地址调用第三方应用程序的入口函数,并将EXT_FSET结构实例地址作为参数传入所述第三方应用程序的入口函数。
具体动态加载程序实例如下:
//第三方应用程序入口函数类型定义(DL_FUNC为DL_entry的类型定义)
typedef void(*DL_FUNC)(EXT_FSET*fset);
//动态加载函数dl_jump_cmd定义
void dl_jump_cmd(DL_FUNC addr,EXT_F SET*fset)
{
//通过dl_jump_cmd跳转后,第三方应用程序开始执行
addr(fset);
}
//jump_to_bin为存放第三方应用程序的可执行文件的内存起始地址
//fset为EXT_FSET结构实例的指针
dl_jump_cmd(jump_to_bin,fset);
图2为本发明手机软件动态加载装置200的结构示意图,该装置包括:
应用载入模块201,用于获取所述第三方应用程序的文件句柄,将所述第三方应用程序载入到手机内存中;所述第三方应用程序需要按照动态加载接口编写入口函数;
API导出模块202,用于将第三方应用程序需要的手机Native API导出到函数映射结构类型EXT_FSET实例当中;
跳转执行模块203,用于在第三方应用程序的可执行文件载入成功及NativeAPI导出成功后,以存储所述第三方应用程序的可执行文件的内存地址及函数映射结构类型EXT_FSET实例的地址为参数,通过动态加载函数执行跳转操作后运行所述第三方应用程序。
优选地,所述装置还进一步包括第三方应用程序生成模块220,该模块用于生成第三方应用程序,该模块进一步包括:
编制模块221,用于编制第三方应用程序,并按照动态加载接口编写第三方应用程序的入口函数,所述入口函数的参数包括所述EXT_FSET结构类型的指针;
编译链接模块222,用于对第三方应用程序的源代码文件进行编译链接,生成第三方应用程序的可执行文件或包含所述第三方应用程序的可执行文件和资源文件的安装包。所述编译链接模块在对所述第三方应用程序的源代码文件进行编译链接时,将包含入口函数的代码段置于所生成的可执行文件起始位置。
所述跳转执行模块203所执行的动态加载函数以存储所述第三方应用程序的可执行文件的内存地址及函数映射结构类型EXT_FSET实例的地址为参数,通过第三方应用程序的可执行文件在内存中的起始地址调用第三方应用程序的入口函数,并将EXT_FSET结构实例地址作为参数传入所述第三方应用程序的入口函数,从而将所述第三方应用程序运行起来。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (8)
1.一种手机软件动态加载方法,其特征在于,包括:
获取所述第三方应用程序的文件句柄,将所述第三方应用程序载入到内存中;
将第三方应用程序需要的本地应用程序接口(Native API)函数导出到函数映射结构类型(EXT_FSET)实例中;
将第三方应用程序在内存中的载入地址及EXT_FSET结构实例地址作为动态加载函数的参数传入动态加载函数,并执行动态加载函数。
2.根据权利要求1所述的方法,其特征在于,在载入所述第三方应用程序之前,还包括第三方应用程序的生成过程,具体为:
在编写第三方应用程序时,按照动态加载接口编写第三方应用程序的入口函数,将所述EXT_FSET结构类型的指针作为所述入口函数的参数;
对第三方应用程序的源代码文件进行编译链接,生成第三方应用程序的可执行文件或包含所述第三方应用程序的可执行文件和资源文件的安装包;
若生成的是安装包,则在载入所述第三方应用程序之前还包括解包的过程。
3.根据权利要求2所述的方法,其特征在于,在对所述第三方应用程序的源代码文件进行编译链接时,将包含入口函数的代码段置于所生成的可执行文件起始位置。
4.根据权利要求1所述的方法,其特征在于,所述动态加载函数通过第三方应用程序的可执行文件在内存中的起始地址调用第三方应用程序的入口函数,并将所述EXT_FSET结构实例地址作为参数传入所述第三方应用程序的入口函数。
5.一种手机软件动态加载装置,其特征在于,该装置包括:
应用载入模块,用于获取所述第三方应用程序的文件句柄,将所述第三方应用程序载入到手机内存中;
API导出模块,用于将第三方应用程序需要的手机Native API导出到函数映射结构类型EXT_FSET实例当中;
跳转执行模块,用于在第三方应用程序的可执行文件载入成功及Native API导出成功后,以存储所述第三方应用程序的可执行文件的内存地址及函数映射结构类型EXT_FSET实例的地址为参数,通过动态加载函数执行跳转操作后运行所述第三方应用程序。
6.根据权利要求5所述的装置,其特征在于,所述装置还包括第三方应用程序生成模块,该模块用于生成第三方应用程序,该模块进一步包括:
编制模块,用于编制第三方应用程序,并按照动态加载接口编写第三方应用程序的入口函数,所述入口函数的参数包括所述EXT_FSET结构类型的指针;
编译链接模块,用于对第三方应用程序的源代码文件进行编译链接,生成第三方应用程序的可执行文件或包含所述第三方应用程序的可执行文件和资源文件的安装包。
7.根据权利要求6所述的装置,其特征在于,所述编译链接模块在对所述第三方应用程序的源代码文件进行编译链接时,将包含入口函数的代码段置于所生成的可执行文件起始位置。
8.根据权利要求5所述的装置,其特征在于,所述跳转执行模块所执行的动态加载函数以存储所述第三方应用程序的可执行文件的内存地址及函数映射结构类型EXT_FSET实例的地址为参数,通过第三方应用程序的可执行文件在内存中的起始地址调用第三方应用程序的入口函数,并将EXT_FSET结构实例地址作为参数传入所述第三方应用程序的入口函数,从而将所述第三方应用程序运行起来。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010105782098A CN102486735A (zh) | 2010-12-02 | 2010-12-02 | 一种手机软件动态加载方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010105782098A CN102486735A (zh) | 2010-12-02 | 2010-12-02 | 一种手机软件动态加载方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102486735A true CN102486735A (zh) | 2012-06-06 |
Family
ID=46152233
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010105782098A Pending CN102486735A (zh) | 2010-12-02 | 2010-12-02 | 一种手机软件动态加载方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102486735A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102902748A (zh) * | 2012-09-18 | 2013-01-30 | 上海移远通信技术有限公司 | 文件系统建立方法、管理方法及其ram和通信芯片 |
CN103793875A (zh) * | 2014-02-25 | 2014-05-14 | 厦门美图之家科技有限公司 | 一种支持第三方应用的图像处理系统 |
CN105740660A (zh) * | 2016-01-20 | 2016-07-06 | 广州彩瞳网络技术有限公司 | 一种应用安全性的检测方法及装置 |
CN107193748A (zh) * | 2017-06-01 | 2017-09-22 | 网易(杭州)网络有限公司 | 程序文件执行方法、装置、存储介质和处理器 |
CN108874417A (zh) * | 2018-05-22 | 2018-11-23 | 上海康斐信息技术有限公司 | 一种嵌入式设备的软件升级方法及系统 |
CN109558143A (zh) * | 2017-09-22 | 2019-04-02 | 北京国双科技有限公司 | 一种集群中部署应用的方法及装置 |
CN110045998A (zh) * | 2019-04-22 | 2019-07-23 | 腾讯科技(深圳)有限公司 | 加载动态库的方法及装置 |
CN110569040A (zh) * | 2019-09-17 | 2019-12-13 | 深圳市优创亿科技有限公司 | 一种在嵌入式系统内安装、运行应用程序的方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101441566A (zh) * | 2008-11-18 | 2009-05-27 | 腾讯科技(深圳)有限公司 | 一种嵌入式平台和在嵌入式平台上动态链接程序的方法 |
CN101668283A (zh) * | 2008-09-01 | 2010-03-10 | 沃勤网络科技(上海)有限公司 | 一种手机嵌入式系统中动态加载的方法 |
-
2010
- 2010-12-02 CN CN2010105782098A patent/CN102486735A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101668283A (zh) * | 2008-09-01 | 2010-03-10 | 沃勤网络科技(上海)有限公司 | 一种手机嵌入式系统中动态加载的方法 |
CN101441566A (zh) * | 2008-11-18 | 2009-05-27 | 腾讯科技(深圳)有限公司 | 一种嵌入式平台和在嵌入式平台上动态链接程序的方法 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102902748A (zh) * | 2012-09-18 | 2013-01-30 | 上海移远通信技术有限公司 | 文件系统建立方法、管理方法及其ram和通信芯片 |
CN103793875A (zh) * | 2014-02-25 | 2014-05-14 | 厦门美图之家科技有限公司 | 一种支持第三方应用的图像处理系统 |
CN105740660A (zh) * | 2016-01-20 | 2016-07-06 | 广州彩瞳网络技术有限公司 | 一种应用安全性的检测方法及装置 |
CN105740660B (zh) * | 2016-01-20 | 2019-02-15 | 广州优视网络科技有限公司 | 一种应用安全性的检测方法及装置 |
CN107193748A (zh) * | 2017-06-01 | 2017-09-22 | 网易(杭州)网络有限公司 | 程序文件执行方法、装置、存储介质和处理器 |
CN109558143A (zh) * | 2017-09-22 | 2019-04-02 | 北京国双科技有限公司 | 一种集群中部署应用的方法及装置 |
CN108874417A (zh) * | 2018-05-22 | 2018-11-23 | 上海康斐信息技术有限公司 | 一种嵌入式设备的软件升级方法及系统 |
CN110045998A (zh) * | 2019-04-22 | 2019-07-23 | 腾讯科技(深圳)有限公司 | 加载动态库的方法及装置 |
CN110569040A (zh) * | 2019-09-17 | 2019-12-13 | 深圳市优创亿科技有限公司 | 一种在嵌入式系统内安装、运行应用程序的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102486735A (zh) | 一种手机软件动态加载方法及装置 | |
CN102289374B (zh) | 一种构建跨平台软件运行环境的方法及装置 | |
US8468498B2 (en) | Build system redirect | |
US9569184B2 (en) | Generating native code from intermediate language code for an application | |
CN102971688B (zh) | 跨平台应用程序框架 | |
CN107402788B (zh) | 资源打包管理方法与装置 | |
Brinkmann | Making musical apps | |
CN103970563B (zh) | 动态加载安卓类的方法 | |
CN112286504B (zh) | 移动APP中基于ReactNative实现小程序开发并加载的方法 | |
CN102023885A (zh) | 一种存储Java卡运行时环境字节码的方法及系统 | |
CN102681893B (zh) | 可执行程序的跨平台实现方法及移动终端 | |
CN104731622B (zh) | 一种应用程序的加载方法、装置和移动终端 | |
CN103309684A (zh) | 动态加载应用的方法及装置 | |
CN103761107A (zh) | 软件包定制的装置及方法 | |
KR20140021091A (ko) | 하이브리드 웹 어플리케이션의 네이티브 기능을 수행하는 자바스크립트 코드의 동적 로딩 장치와 방법 | |
TW202403541A (zh) | 第三方行動應用程式中引入小程序的系統、方法、裝置及介質 | |
CN106775879B (zh) | 基于安卓系统客户端的vr应用免安装方法及其系统 | |
CN103514069A (zh) | 测试Android系统HAL层API的方法及系统 | |
CN103150161A (zh) | 基于MapReduce 计算模型的任务封装方法及装置 | |
Paananen | Smartphone Cross-Platform Frameworks: A case study | |
CN104133669B (zh) | 一种桌面应用的控制方法及终端设备 | |
Hindrikes et al. | Xamarin. Forms Projects: Build multiplatform mobile apps and a game from scratch using C# and Visual Studio 2019 | |
CN113626130A (zh) | 视频应用程序的处理方法、装置、计算机设备及存储介质 | |
KR20140005014A (ko) | 멀티 플랫폼 게임 제작에서의 그래픽 콘텐츠 최적화 방법 | |
RU2786200C1 (ru) | Система и способ установки персонализированного приложения на мобильное устройство |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20120606 |