CN105975290A - 一种解析apk文件的方法和装置 - Google Patents

一种解析apk文件的方法和装置 Download PDF

Info

Publication number
CN105975290A
CN105975290A CN201510657009.4A CN201510657009A CN105975290A CN 105975290 A CN105975290 A CN 105975290A CN 201510657009 A CN201510657009 A CN 201510657009A CN 105975290 A CN105975290 A CN 105975290A
Authority
CN
China
Prior art keywords
apk file
file
activity
apk
class
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
CN201510657009.4A
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.)
Leshi Zhixin Electronic Technology Tianjin Co Ltd
Original Assignee
Leshi Zhixin Electronic Technology Tianjin 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 Leshi Zhixin Electronic Technology Tianjin Co Ltd filed Critical Leshi Zhixin Electronic Technology Tianjin Co Ltd
Priority to CN201510657009.4A priority Critical patent/CN105975290A/zh
Publication of CN105975290A publication Critical patent/CN105975290A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本发明提供一种解析运行APK文件的方法和装置,方法包括:下载一需要更新的卡片的APK文件;创建代理的Activity类;获取APK文件的信息接口以获取APK文件的路径和APK文件的Activity信息;通过Dex类加载器,根据APK文件的路径和APK文件的Activity信息解析APK文件,并将解析APK文件后的虚拟机可执行文件存放至预设位置;启动本地已经安装好的卡片实例mContext;通过卡片实例mContext启动对应代理的Activity类,运行对应解析好的虚拟机可执行文件。本发明在启动卡片实例mContext时,自动运行用于更新该卡片的解析好的虚拟机可执行文件,实现自动快速上线。

Description

一种解析APK文件的方法和装置
技术领域
本发明涉及家用电器技术领域,特别是涉及一种解析APK文件的方法和装置。
背景技术
智能电视的出现让大屏观看体验大幅提升,是家庭的娱乐中心。智能电视可以整合网络资源,提供更多专为观看电视节目设计的功能与服务,例如提供节目相关信息、相关明星介绍、相关视频等服务,增强了用户的观看体验。
目前,智能电视提供功能与服务都是基于后缀为.apk的应用,且智能电视系统中的应用都是在.apk的文件安装后运行的。现有技术中,当用户想要安装某个应用时,用户需要到应用市场下载该应用的APK(Android Package,安卓安装包)文件,然后安装该APK文件,安装成功后该应用便可以运行。
但是,现有技术还存在以下缺点:对于智能电视系统中已经上线的某应用,当该应用上线新互动功能时,只能依赖用户手动选择更新,应用的新互动功能才能够在智能电视上线,影响了一个应用的新互动功能上线时间,进而影响了用户的体验。
发明内容
本发明实施例提供一种解析APK文件的方法和装置,用以解决现有技术必须依赖用户手动更新,应用的新互动功能才能够在智能电视上线的缺陷,从而实现自动快速上线应用的新互动功能,提高用户的体验。
为了解决上述问题,本发明实施例公开了一种解析运行APK文件的方法,包括以下步骤:下载APK文件,所述APK文件对应一需要更新的卡片;创建代理的Activity类,所述代理的Activity类继承Android(安卓)标准SDK(Software Development Kit,软件开发工具包)中的Activity类;获取APK文件的信息接口,并通过所述APK文件的信息接口获取所述APK文件的路径和所述APK文件的Activity信息;通过Dex类加载器,根据所述APK文件的路径和所述APK文件的Activity信息解析所述APK文件,并将解析所述APK文件后的虚拟机可执行文件存放至预设位置;启动本地已经安装好的卡片实例mContext;通过所述卡片实例mContext启动对应代理的Activity类,运行对应解析好的虚拟机可执行文件。
为了解决上述问题,本发明实施例还公开了一种解析运行APK文件的装置,包括:文件下载模块,用于下载APK文件,所述APK文件对应一需要更新的卡片;类创建模块,用于创建代理的Activity类,所述代理的Activity类继承Android标准SDK中的Activity类;路径和信息获取模块,用于获取APK文件的信息接口,并通过所述APK文件的信息接口获取所述APK文件的路径和所述APK文件的Activity信息;文件解析模块,用于通过Dex类加载器,根据所述APK文件的路径和所述APK文件的Activity信息解析所述APK文件,并将解析所述APK文件后的虚拟机可执行文件存放至预设位置;启动模块,用于启动本地已经安装好的卡片实例mContext;运行模块,用于通过所述卡片实例mContext启动对应代理的Activity类,运行对应解析好的虚拟机可执行文件。
本发明实施例提供的一种解析运行APK文件的方法和装置,在下载需要更新的卡片对应的APK文件后,创建继承Android标准SDK中的Activity类的代理的Activity类,以及在获取APK文件的信息接口,并通过APK文件的信息接口获取APK文件的路径和APK文件的Activity信息后,通过Dex类加载器,根据APK文件的路径和APK文件的Activity信息解析APK文件,并将解析APK文件后的虚拟机可执行文件存放至预设位置。进而在启动本地已经安装好的卡片实例mContext时,通过卡片实例mContext启动对应代理的Activity类,代理的Activity类运行对应解析好的虚拟机可执行文件。从而当启动任一卡片实例mContext时,自动运行该卡片实例mContext对应解析好的虚拟机可执行文件,解决了现有技术需要用户手动安装的缺陷,实现自动快速上线卡片的新互动功能,提高了用户体验。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例一种解析运行APK文件的方法的步骤流程图;
图2是本发明实施例另一种解析运行APK文件的方法的步骤流程图;
图3是本发明实施例一种解析运行APK文件的装置的结构框图;
图4是本发明实施例另一种解析运行APK文件的装置的结构框图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例的解析运行APK文件的方法和装置可以应用于智能电视。参照图1,示出了本发明实施例一种解析运行APK文件的方法的步骤流程图。
本发明实施例的解析运行APK文件的方法可以包括以下步骤:
步骤S1,下载APK文件,APK文件对应一需要更新的卡片。
步骤S1中下载的APK文件用于更新对应需要更新的卡片的互动功能。具体地,在本发明的一个实施例中,卡片为一个插件/APK。
步骤S2,创建代理的Activity类,代理的Activity类继承Android标准SDK中的Activity类。
具体地,Activity是Android组件中最基本也是最为常用的四大组件之一,其中,四大组件分别为Activity、Service(服务)、Content Provider(内容提供者)和BroadcastReceiver(广播接收器)。Activity是一个应用程序组件,Activity提供一个屏幕,用户可以用该屏幕来交互以完成某项任务。Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,Activity可以通过setContentView(View)方法来显示指定控件。在一个Android应用中,一个Activity通常就是一个单独的屏幕,该屏幕上面可以显示一些控件,也可以监听并处理用户的事件,并做出响应。Activity之间通过Intent(意图)机制进行通信。
需要说明的是,代理的Activity类用于为其它对象提供一种代理,以控制对该对象的访问。Android标准SDK,提供了在Windows/Linux/Mac平台上开发Android应用的开发组件,包含了在Android平台上开发移动应用程序的各种工具集。
步骤S3,获取APK文件的信息接口,并通过APK文件的信息接口获取APK文件的路径和APK文件的Activity信息。
其中,APK文件的Activity信息可以为APK文件的Activity参数。
步骤S4,通过Dex类加载器,根据APK文件的路径和APK文件的Activity信息解析APK文件,并将解析APK文件后的虚拟机可执行文件存放至预设位置。
其中,Dex类加载器可以动态的解析加载dex文件,dex文件是一种经过android打包工具优化后的Class(类)文件,将APK文件解压后即可获得dex文件。
步骤S5,启动本地已经安装好的卡片实例mContext。
具体地,在本发明的一个实施例中,当用户在智能电视屏幕上点击卡片实例mContext时,智能电视启动卡片实例mContext。卡片实例mContext为当前启动的对象,例如,当前启动卡片列表时,卡片实例mContext为卡片列表这个对象。其中,卡片列表为卡片APK,该卡片APK可以展示至少一个卡片的互动功能入口,用户可以通过卡片的互动功能入口进入任一卡片,从而可以使用卡片的互动功能。
步骤S6,通过卡片实例mContext启动对应代理的Activity类,运行对应解析好的虚拟机可执行文件。
其中,在运行对应解析好的虚拟机可执行文件后,屏幕即可显示APK文件的Activity屏幕界面,通过该APK文件的Activity屏幕界面,用户可以使用该卡片的新互动功能。
根据本发明实施例一,在下载需要更新的卡片对应的APK文件后,创建继承Android标准SDK中的Activity类的代理的Activity类,以及在获取APK文件的信息接口,并通过APK文件的信息接口获取APK文件的路径和APK文件的Activity信息后,通过Dex类加载器,根据APK文件的路径和APK文件的Activity信息解析APK文件,并将解析APK文件后的虚拟机可执行文件存放至预设位置。进而在启动本地已经安装好的卡片实例mContext时,通过卡片实例mContext启动对应代理的Activity类,运行对应解析好的虚拟机可执行文件。从而当启动任一卡片实例mContext时,自动运行用于更新该卡片互动功能的解析好的虚拟机可执行文件,从而解决了现有技术需要用户手动安装的缺陷,实现自动快速上线卡片的新互动功能,提高了用户的体验。
实施例二
参照图2,示出了本发明实施例另一种解析运行APK文件的方法的步骤流程图。该解析运行APK文件的方法可以包括以下步骤:
步骤S21,下载APK文件,APK文件对应一需要更新的卡片。
步骤S22,创建代理的Activity类,代理的Activity类继承Android标准SDK中的Activity类。
具体地,在本发明的一个实施例中,代理的Activity类可以为DLProxyActivity类。DLProxyActivity类是Android系统真实的实例,因此DLProxyActivity类需要继承Android标准SDK里的Activity类。同时DLProxyActivity类需要实现如下的所有方法:
protected void onCreate(Bundle savedInstanceState)
protected void onStart()
protected void onRestart()
protected void onResume()
protected void onPause()
protected void onStop()
protected void onDestroy()
public void attach(Plugin remoteActivity){
mRemoteActivity=remoteActivity;
}
其中,remoteActivity为BaseActivity类的实现。具体地,DLProxyActivity类的生命周期方法中会调用Apk文件的Activity类的生命周期方法,Apk文件的Activity类要继承自BaseActivity类。BaseActivity类要实现以下Android系统Activity类的生命周期方法:
protected void onCreate(Bundle savedInstanceState)
protected void onStart()
protected void onRestart()
protected void onResume()
protected void onPause()
protected void onStop()
protected void onDestroy()
其中,当一个Activity类被创建的时候,DLProxyActivity类的生命周期方法中会依次调用:
protected void onCreate(Bundle savedInstanceState)
protected void onStart()
protected void onRestart()
protected void onResume()
当一个Activity销毁的时候,DLProxyActivity类的生命周期方法中会依次调用:
protected void onPause()
protected void onStop()
protected void onDestroy()
步骤S23,获取APK文件的信息接口,并通过APK文件的信息接口获取APK文件的路径和APK文件的Activity信息;其中,获取APK文件的信息接口具体可以为:
步骤S231,通过Android标准SDK获取APK文件的信息接口。
其中,APK文件的信息接口,具体可以为:
mContext.getPackageManager().getPackageArchiveInfo(apkPath,PackageManager.GET_ACTIVITIES|)
其中,apkPath为apk文件的路径,PackageManager.GET_ACTIVITIES返回APK文件的Activity信息。
步骤S24,通过Dex类加载器,根据APK文件的路径和APK文件的Activity信息解析APK文件,并将解析APK文件后的虚拟机可执行文件存放至预设位置。
Dex类加载器的接口,具体可以为:
dalvik.system.DexClassLoader.DexClassLoader(String dexPath,StringoptimizedDirectory,String libraryPath,ClassLoader parent)
其中,dexpath为apk文件的路径,optimizedDirectory为预设位置,libraryPath为解析加载APK文件后动态链接库文件的存放位置,ClassLoaderparent为所需的父类加载器,即Dex类加载器的接口相关的父类加载器。
在APK文件的信息接口获取apk文件的路径后,解压apk文件后获得dex文件,dex文件的路径与apk文件的路径相同,Dex类加载器即可通过Dex类加载器的接口解析加载dex文件以获得虚拟机可执行文件,并将虚拟机可执行文件存放在optimizedDirectory。需要说明的是,Dex是DalvikVM executes的全称,即Android的Dalvik(用于Android平台的Java虚拟机)执行程序,是Dalvik字节码。
步骤S25,启动本地已经安装好的卡片实例mContext。
具体地,在本发明的一个实施例中,当用户在智能电视屏幕上点击卡片实例mContext时,智能电视启动卡片实例mContext。智能电视中启动卡片实例mContext的程序如下:
Intent.setClass(mContext,activityClass);
context.startActivity(Intent);
其中,上述程序通过Intent.setClass(mContext,activityClass)指定activityClass例如DLProxyActivity类,通知卡片实例mContext启动该activityClass,进而跳转到activityClass,并将Android系统默认的信息传递至activityClass,执行activityClass。
步骤S26,通过卡片实例mContext启动对应代理的Activity类,以运行对应解析好的虚拟机可执行文件;其中,运行对应解析好的虚拟机可执行文件,包括:
步骤S261,通过对应代理的Activity类加载代理的实现类ProxyImpl。
步骤S262,通过代理的实现类ProxyImpl,根据虚拟机可执行文件,创建对应APK文件的Activity对象。
其中,代理的实现类ProxyImpl可以通过调用BaseActivity类中的以下方法来创建和启动虚拟机可执行文件对应APK文件的Activity对象:
protected void onCreate(Bundle savedInstanceState)
protected void onStart()
protected void onRestart()
protected void onResume()
其中,代理的实现类ProxyImpl可以创建BaseActivityManager来负责解析加载BaseActivity类。进一步地,代理的实现类ProxyImpl解析加载BaseActivity类后,可以通过代理的Activity类的attach方法将BaseActivity类传递给代理的Activity类,代理的Activity类的attach方法具体可以为:
public void attach(Plugin remoteActivity){
mRemoteActivity=remoteActivity;
}
其中,remoteActivity为BaseActivity类的实现。
步骤S263,运行APK文件的Activity对象。
步骤S263中,可以通过虚拟机运行APK文件的Activity对象,此时,智能电视的屏幕显示APK文件的Activity屏幕界面,通过该APK文件的Activity屏幕界面,用户可以使用卡片的新互动功能。
根据本发明实施例二,在下载需要更新的卡片对应的APK文件后,创建继承Android标准SDK中的Activity类的代理的Activity类,例如DLProxyActivity类,以及在通过Android标准SDK获取APK文件的信息接口,并通过APK文件的信息接口获取APK文件的路径和APK文件的Activity信息后,通过Dex类加载器,根据APK文件的路径和APK文件的Activity信息解析APK文件中的dex文件,并将解析APK文件中的dex文件后,获得的虚拟机可执行文件存放至预设位置,例如optimizedDirectory。进而在通过Intent机制启动本地已经安装好的卡片实例mContext时,通过卡片实例mContext启动对应代理的Activity类,并通过对应代理的Activity类加载代理的实现类ProxyImpl,以及通过代理的实现类ProxyImpl,根据虚拟机可执行文件,创建对应APK文件的Activity对象,最终虚拟机运行APK文件的Activity对象。从而当启动任一卡片实例mContext时,虚拟机自动运行用于更新该卡片互动功能的APK文件的Activity对象,从而解决了现有技术需要用户手动安装的缺陷,实现自动快速上线卡片的新互动功能,提高了用户的体验。
实施例三
参照图3,示出了本发明实施例三的一种解析运行APK文件的装置的结构框图。
本发明实施例的解析运行APK文件的装置,可以包括:
文件下载模块1,用于下载APK文件,APK文件对应一需要更新的卡片。
文件下载模块1中下载的APK文件用于更新对应需要更新的卡片的互动功能。具体地,在本发明的一个实施例中,卡片为一个插件/APK。
类创建模块2,用于创建代理的Activity类,代理的Activity类继承Android标准SDK中的Activity类。
具体地,Activity是Android组件中最基本也是最为常用的四大组件之一,其中,四大组件分别为Activity、Service(服务)、Content Provider(内容提供者)和BroadcastReceiver(广播接收器)。Activity是一个应用程序组件,Activity提供一个屏幕,用户可以用该屏幕来交互以完成某项任务。Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,Activity可以通过setContentView(View)方法来显示指定控件。在一个Android应用中,一个Activity通常就是一个单独的屏幕,该屏幕上面可以显示一些控件,也可以监听并处理用户的事件,并做出响应。Activity之间通过Intent(意图)机制进行通信。
需要说明的是,代理的Activity类用于为其它对象提供一种代理,以控制对该对象的访问。Android标准SDK,提供了在Windows/Linux/Mac平台上开发Android应用的开发组件,包含了在Android平台上开发移动应用程序的各种工具集。
路径和信息获取模块3,用于获取APK文件的信息接口,并通过APK文件的信息接口获取APK文件的路径和APK文件的Activity信息。
其中,APK文件的Activity信息可以为APK文件的Activity参数。
文件解析模块4,用于通过Dex类加载器,根据APK文件的路径和APK文件的Activity信息解析APK文件,并将解析APK文件后的虚拟机可执行文件存放至预设位置。
其中,Dex类加载器可以动态的解析加载dex文件,dex文件是一种经过android打包工具优化后的Class(类)文件,将APK文件解压后即可获得dex文件。
启动模块5,用于启动本地已经安装好的卡片实例mContext。
具体地,在本发明的一个实施例中,当用户在智能电视屏幕上点击卡片实例mContext时,启动模块5启动卡片实例mContext。卡片实例mContext为当前启动的对象,例如,启动模块5当前启动卡片列表时,卡片实例mContext为卡片列表这个对象。其中,卡片列表为卡片APK,该卡片APK可以展示至少一个卡片的互动功能入口,用户可以通过卡片的互动功能入口进入任一卡片,从而可以使用卡片的互动功能。
运行模块6,用于通过卡片实例mContext启动对应代理的Activity类,运行对应解析好的虚拟机可执行文件。
其中,在运行模块6运行对应解析好的虚拟机可执行文件后,屏幕即可显示APK文件的Activity屏幕界面,通过该APK文件的Activity屏幕界面,用户可以使用该卡片的新互动功能。
根据本发明实施例三,在文件下载模块下载需要更新的卡片对应的APK文件后,类创建模块创建继承Android标准SDK中的Activity类的代理的Activity类,以及在路径和信息获取模块获取APK文件的信息接口,并通过APK文件的信息接口获取APK文件的路径和APK文件的Activity信息后,文件解析模块通过Dex类加载器,根据APK文件的路径和APK文件的Activity信息解析APK文件,并将解析APK文件后的虚拟机可执行文件存放至预设位置。进而在启动模块启动本地已经安装好的卡片实例mContext时,运行模块通过卡片实例mContext启动对应代理的Activity类,运行对应解析好的虚拟机可执行文件。从而当启动任一卡片实例mContext时,自动运行用于更新该卡片互动功能的解析好的虚拟机可执行文件,从而解决了现有技术需要用户手动安装的缺陷,实现自动快速上线卡片的新互动功能,提高了用户的体验。
实施例四
参照图4,示出了本发明实施例四的另一种解析运行APK文件的装置的结构框图。该解析运行APK文件的装置,可以包括:
文件下载模块21,用于下载APK文件,APK文件对应一需要更新的卡片。
类创建模块22,用于创建代理的Activity类,代理的Activity类继承Android标准SDK中的Activity类。
具体地,在本发明的一个实施例中,代理的Activity类可以为DLProxyActivity类。DLProxyActivity类是Android系统真实的实例,因此DLProxyActivity类需要继承Android标准SDK里的Activity类。同时DLProxyActivity类需要实现如下的所有方法:
protected void onCreate(Bundle savedInstanceState)
protected void onStart()
protected void onRestart()
protected void onResume()
protected void onPause()
protected void onStop()
protected void onDestroy()
public void attach(Plugin remoteActivity){
mRemoteActivity=remoteActivity;
}
其中,remoteActivity为BaseActivity类的实现。具体地,DLProxyActivity类的生命周期方法中会调用Apk文件的Activity类的生命周期方法,Apk文件的Activity类要继承自BaseActivity类。BaseActivity类要实现以下Android系统Activity类的生命周期方法:
protected void onCreate(Bundle savedInstanceState)
protected void onStart()
protected void onRestart()
protected void onResume()
protected void onPause()
protected void onStop()
protected void onDestroy()
其中,当一个Activity类被创建的时候,DLProxyActivity类的生命周期方法中会依次调用:
protected void onCreate(Bundle savedInstanceState)
protected void onStart()
protected void onRestart()
protected void onResume()
当一个Activity销毁的时候,DLProxyActivity类的生命周期方法中会依次调用:
protected void onPause()
protected void onStop()
protected void onDestroy()
路径和信息获取模块23,用于获取APK文件的信息接口,并通过APK文件的信息接口获取APK文件的路径和APK文件的Activity信息。
其中,APK文件的信息接口,具体可以为:
mContext.getPackageManager().getPackageArchiveInfo(apkPath,PackageManager.GET_ACTIVITIES|)
其中,apkPath为apk文件的路径,PackageManager.GET_ACTIVITIES返回APK文件的Activity信息。
具体地,路径和信息获取模块23可以通过Android标准SDK获取APK文件的信息接口。
文件解析模块24,用于通过Dex类加载器,根据APK文件的路径和APK文件的Activity信息解析APK文件,并将解析APK文件后的虚拟机可执行文件存放至预设位置。
Dex类加载器的接口,具体可以为:
dalvik.system.DexClassLoader.DexClassLoader(String dexPath,StringoptimizedDirectory,String libraryPath,ClassLoader parent)
其中,dexpath为apk文件的路径,optimizedDirectory为预设位置,libraryPath为解析加载APK文件后动态链接库文件的存放位置,ClassLoaderparent为所需的父类加载器,即Dex类加载器的接口相关的父类加载器。
在APK文件的信息接口获取apk文件的路径后,文件解析模块24解压apk文件后获得dex文件,dex文件的路径与apk文件的路径相同,Dex类加载器即可通过Dex类加载器的接口解析加载dex文件以获得虚拟机可执行文件,并将虚拟机可执行文件存放在optimizedDirectory。需要说明的是,Dex是DalvikVM executes的全称,即Android的Dalvik(用于Android平台的Java虚拟机)执行程序,是Dalvik字节码。
启动模块25,用于启动本地已经安装好的卡片实例mContext。
具体地,在本发明的一个实施例中,当用户在智能电视屏幕上点击卡片实例mContext时,启动模块25启动卡片实例mContext。启动模块25中启动卡片实例mContext的程序如下:
Intent.setClass(mContext,activityClass);
context.startActivity(Intent);
其中,上述程序通过Intent.setClass(mContext,activityClass)指定activityClass例如DLProxyActivity类,通知卡片实例mContext启动该activityClass,进而跳转到activityClass,并将Android系统默认的信息传递至activityClass,执行activityClass。
运行模块26,用于通过卡片实例mContext启动对应代理的Activity类,运行对应解析好的虚拟机可执行文件;包括:
加载单元261,用于通过对应代理的Activity类加载代理的实现类ProxyImpl。
对象创建单元262,用于通过代理的实现类ProxyImpl,根据虚拟机可执行文件,创建对应APK文件的Activity对象。
其中,代理的实现类ProxyImpl可以通过调用BaseActivity类中的以下方法来创建和启动虚拟机可执行文件对应APK文件的Activity对象:
protected void onCreate(Bundle savedInstanceState)
protected void onStart()
protected void onRestart()
protected void onResume()
其中,代理的实现类ProxyImpl可以创建BaseActivityManager来负责解析加载BaseActivity类。进一步地,代理的实现类ProxyImpl解析加载BaseActivity类后,可以通过代理的Activity类的attach方法将BaseActivity类传递给代理的Activity类,代理的Activity类的attach方法具体可以为:
public void attach(Plugin remoteActivity){
mRemoteActivity=remoteActivity;
}
其中,remoteActivity为BaseActivity类的实现。
运行单元263,用于运行APK文件的Activity对象。
其中,运行单元263可以为虚拟机,此时,智能电视的屏幕显示APK文件的Activity屏幕界面,通过该APK文件的Activity屏幕界面,用户可以使用卡片的新互动功能。
根据本发明实施例四,在文件下载模块下载需要更新的卡片对应的APK文件后,类创建模块创建继承Android标准SDK中的Activity类的代理的Activity类,例如DLProxyActivity类,以及在路径和信息获取模块通过Android标准SDK获取APK文件的信息接口,并通过APK文件的信息接口获取APK文件的路径和APK文件的Activity信息后,文件解析模块通过Dex类加载器,根据APK文件的路径和APK文件的Activity信息解析APK文件中的dex文件,并将解析APK文件中的dex文件后,获得的虚拟机可执行文件存放至预设位置,例如optimizedDirectory。进而在启动模块通过Intent机制,启动本地已经安装好的卡片实例mContext时,运行模块通过卡片实例mContext启动对应代理的Activity类,进而加载单元通过对应代理的Activity类加载代理的实现类ProxyImpl,以及对象创建单元通过代理的实现类ProxyImpl,根据虚拟机可执行文件,创建对应APK文件的Activity对象,最终运行单元例如虚拟机运行APK文件的Activity对象。从而当启动任一卡片实例mContext时,虚拟机自动运行用于更新该卡片互动功能的APK文件的Activity对象,从而解决了现有技术需要用户手动安装的缺陷,实现自动快速上线卡片的新互动功能,用户体验更好。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (10)

1.一种解析运行APK文件的方法,其特征在于,包括以下步骤:
下载APK文件,所述APK文件对应一需要更新的卡片;
创建代理的Activity类,所述代理的Activity类继承Android标准SDK中的Activity类;
获取APK文件的信息接口,并通过所述APK文件的信息接口获取所述APK文件的路径和所述APK文件的Activity信息;
通过Dex类加载器,根据所述APK文件的路径和所述APK文件的Activity信息解析所述APK文件,并将解析所述APK文件后的虚拟机可执行文件存放至预设位置;
启动本地已经安装好的卡片实例mContext;
通过所述卡片实例mContext启动对应代理的Activity类,运行对应解析好的虚拟机可执行文件。
2.根据权利要求1所述的方法,其特征在于,所述运行对应解析好的虚拟机可执行文件,包括:
通过所述对应代理的Activity类加载代理的实现类ProxyImpl;
通过所述代理的实现类ProxyImpl,根据所述虚拟机可执行文件,创建对应所述APK文件的Activity对象;
运行所述APK文件的Activity对象。
3.根据权利要求1所述的方法,其特征在于,通过所述Android标准SDK获取所述APK文件的信息接口。
4.根据权利要求3所述的方法,其特征在于,所述APK文件的信息接口,具体为:
mContext.getPackageManager().getPackageArchiveInfo(apkPath,PackageManager.GET_ACTIVITIES|)
其中,apkPath为所述apk文件的路径,PackageManager.GET_ACTIVITIES返回所述APK文件的Activity信息。
5.根据权利要求1所述的方法,其特征在于,所述Dex类加载器的接口,具体为:
dalvik.system.DexClassLoader.DexClassLoader(String dexPath,StringoptimizedDirectory,String libraryPath,ClassLoader parent)
其中,dexpath为所述apk文件的路径,optimizedDirectory为所述预设位置,libraryPath为解析加载所述APK文件后动态链接库文件的存放位置,ClassLoader parent为所需的父类加载器。
6.一种解析APK文件的装置,其特征在于,包括:
文件下载模块,用于下载APK文件,所述APK文件对应一需要更新的卡片;
类创建模块,用于创建代理的Activity类,所述代理的Activity类继承Android标准SDK中的Activity类;
路径和信息获取模块,用于获取APK文件的信息接口,并通过所述APK文件的信息接口获取所述APK文件的路径和所述APK文件的Activity信息;
文件解析模块,用于通过Dex类加载器,根据所述APK文件的路径和所述APK文件的Activity信息解析所述APK文件,并将解析所述APK文件后的虚拟机可执行文件存放至预设位置;
启动模块,用于启动本地已经安装好的卡片实例mContext;
运行模块,用于通过所述卡片实例mContext启动对应代理的Activity类,运行对应解析好的虚拟机可执行文件。
7.根据权利要求6所述的装置,其特征在于,所述运行模块包括:
加载单元,用于通过所述对应代理的Activity类加载代理的实现类ProxyImpl;
对象创建单元,用于通过所述代理的实现类ProxyImpl,根据所述虚拟机可执行文件,创建对应所述APK文件的Activity对象;
运行单元,用于运行所述APK文件的Activity对象。
8.根据权利要求6所述的装置,其特征在于,所述路径和信息获取模块通过所述Android标准SDK获取所述APK文件的信息接口。
9.根据权利要求7所述的装置,其特征在于,所述APK文件的信息接口,具体为:
mContext.getPackageManager().getPackageArchiveInfo(apkPath,PackageManager.GET_ACTIVITIES|)
其中,apkPath为所述apk文件的路径,PackageManager.GET_ACTIVITIES返回所述APK文件的Activity信息。
10.根据权利要求6所述的装置,其特征在于,所述Dex类加载器的接口,具体为:
dalvik.system.DexClassLoader.DexClassLoader(String dexPath,StringoptimizedDirectory,String libraryPath,ClassLoader parent)
其中,dexpath为所述apk文件的路径,optimizedDirectory为所述预设位置,libraryPath为解析加载所述APK文件后动态链接库文件的存放位置,ClassLoader parent为所需的父类加载器。
CN201510657009.4A 2015-10-13 2015-10-13 一种解析apk文件的方法和装置 Pending CN105975290A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510657009.4A CN105975290A (zh) 2015-10-13 2015-10-13 一种解析apk文件的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510657009.4A CN105975290A (zh) 2015-10-13 2015-10-13 一种解析apk文件的方法和装置

Publications (1)

Publication Number Publication Date
CN105975290A true CN105975290A (zh) 2016-09-28

Family

ID=56988436

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510657009.4A Pending CN105975290A (zh) 2015-10-13 2015-10-13 一种解析apk文件的方法和装置

Country Status (1)

Country Link
CN (1) CN105975290A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107193544A (zh) * 2017-04-01 2017-09-22 北京五八信息技术有限公司 一种应用程序组件化开发方法及装置
CN109151591A (zh) * 2018-11-20 2019-01-04 四川长虹电器股份有限公司 智能电视应用启动的方法
CN109684846A (zh) * 2018-12-28 2019-04-26 微梦创科网络科技(中国)有限公司 一种文件提取方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103530156A (zh) * 2013-10-17 2014-01-22 北京奇虎科技有限公司 动态加载和调用程序的方法及装置
CN104731625A (zh) * 2015-03-27 2015-06-24 北京奇虎科技有限公司 一种加载插件的方法、装置和移动终端
CN104731622A (zh) * 2015-03-27 2015-06-24 北京奇虎科技有限公司 一种应用程序的加载方法、装置和移动终端

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103530156A (zh) * 2013-10-17 2014-01-22 北京奇虎科技有限公司 动态加载和调用程序的方法及装置
CN104731625A (zh) * 2015-03-27 2015-06-24 北京奇虎科技有限公司 一种加载插件的方法、装置和移动终端
CN104731622A (zh) * 2015-03-27 2015-06-24 北京奇虎科技有限公司 一种应用程序的加载方法、装置和移动终端

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107193544A (zh) * 2017-04-01 2017-09-22 北京五八信息技术有限公司 一种应用程序组件化开发方法及装置
CN107193544B (zh) * 2017-04-01 2021-01-15 北京五八信息技术有限公司 一种应用程序组件化开发方法及装置
CN109151591A (zh) * 2018-11-20 2019-01-04 四川长虹电器股份有限公司 智能电视应用启动的方法
CN109684846A (zh) * 2018-12-28 2019-04-26 微梦创科网络科技(中国)有限公司 一种文件提取方法及装置

Similar Documents

Publication Publication Date Title
US9600264B2 (en) Generating a customized set of tasks for migration of a deployed software solution
CN100442712C (zh) 一种实现网络终端设备配置自动更新的方法及系统
CN104427388A (zh) 一种智能电视操作系统
CN106686420A (zh) 直播应用程序的管理方法及装置
US20140237373A1 (en) Method of provisioning a cloud-based render farm
CN108536451A (zh) 应用程序的埋点注入方法和装置
US20100180270A1 (en) Extensibility for business accelerator authoring tools
CN105740144A (zh) 一种Android移动终端的自动化测试方法及系统
CN109308241A (zh) 监听应用程序启动流程方法、装置、终端设备和存储介质
CN105975290A (zh) 一种解析apk文件的方法和装置
CN106502713A (zh) 一种软件升级方法和系统
CN106371881A (zh) 一种用于服务器内程序版本更新的方法和系统
CN103401713A (zh) 一种软件发布的系统和方法
CN108319554A (zh) 应用功能的测试方法、计算机可读存储介质和终端设备
CN105979384A (zh) 一种智能电视互动功能卡片的框架管理方法和装置
CN106815037B (zh) 应用功能的执行方法及装置
CN113032281A (zh) 一种代码覆盖率实时获取方法及装置
CN115129574A (zh) 一种代码测试方法和装置
US10606221B2 (en) Identifying home automation correlated events and creating portable recipes
CN111857771A (zh) 基于深度学习的操作系统补丁自动安装方法及系统
CN111045695A (zh) WebLogic中间件部署装置、方法及设备和介质
CN115167872A (zh) 服务模块部署方法、装置、电子设备及计算机可读介质
CN115543793A (zh) 一种目标服务器的系统部署方法、装置和运维中台
CN105100227B (zh) 一种基于教育资源公共服务平台的软件升级方法及系统
CN114443294A (zh) 大数据服务组件部署方法、系统、终端及存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20160928

WD01 Invention patent application deemed withdrawn after publication