欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

基于安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的方法、裝置及終端的制作方法

文檔序號(hào):6633203閱讀:264來源:國知局
基于安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的方法、裝置及終端的制作方法
【專利摘要】本發(fā)明是關(guān)于一種安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的方法、裝置及移動(dòng)終端。其中,所述方法包括:獲取應(yīng)用程序安裝包中包含的各組件;構(gòu)造應(yīng)用程序運(yùn)行所需的運(yùn)行環(huán)境;在運(yùn)行環(huán)境下,分別加載各組件;若加載的組件為活動(dòng)Activity組件、廣播接收者Broadcast Receiver組件或服務(wù)Service組件,則在應(yīng)用程序管理服務(wù)PMS查驗(yàn)之前,將組件修改為已安裝應(yīng)用程序中的對(duì)應(yīng)組件,并在PMS根據(jù)所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件查驗(yàn)通過后,再次將已安裝應(yīng)用程序中的對(duì)應(yīng)組件修正回所述組件,啟動(dòng)組件;若加載的組件為內(nèi)容提供者Content Provider組件,則通過反射機(jī)制調(diào)用Content Provider組件。本發(fā)明實(shí)施例實(shí)現(xiàn)了應(yīng)用程序的免安裝運(yùn)行,簡(jiǎn)化了應(yīng)用程序使用的操作,能在一定程度上能解決因安裝平臺(tái)上存在的諸多漏洞所帶來的安全隱患問題。
【專利說明】基于安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的方法、裝置及終端

【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種計(jì)算機(jī)領(lǐng)域,特別是涉及一種安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的方法、裝置及終端。

【背景技術(shù)】
[0002]目前,安卓(Andr1d)智能手機(jī)已經(jīng)占據(jù)了市場(chǎng)上較大的份額。隨著安卓智能手機(jī)和移動(dòng)互聯(lián)網(wǎng)的普及,安卓平臺(tái)上的應(yīng)用程序和游戲已成為近年來產(chǎn)業(yè)發(fā)展的熱點(diǎn)。
[0003]大量的安卓應(yīng)用程序和游戲的出現(xiàn)讓用戶眼花繚亂,用戶要體驗(yàn)不同游戲帶來的樂趣,就需要下載這些游戲的客戶端應(yīng)用程序。用戶要想使用這些應(yīng)用程序,還需一一的將這些客戶端應(yīng)用程序安裝在手機(jī)上。每個(gè)應(yīng)用程序都作為一個(gè)獨(dú)立的應(yīng)用程序存儲(chǔ)在用戶設(shè)備上。
[0004]現(xiàn)有的安卓平臺(tái)上的應(yīng)用程序或游戲,下載后必須安裝后才能啟動(dòng)使用,操作繁瑣;另外,應(yīng)用程序管理只能依賴于安裝平臺(tái)本身的管理機(jī)制,比如權(quán)限管理、消息通知管理等,安卓平臺(tái)的諸多漏洞會(huì)帶來很大的安全性隱患。


【發(fā)明內(nèi)容】

[0005]鑒于上述問題,提出了本發(fā)明以便于提供一種克服上述問題或者至少部分地解決上述問題的基于安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的方法、裝置及終端。
[0006]依據(jù)本發(fā)明的第一個(gè)方面,提供了一種基于安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的方法,其特征在于,包括:
[0007]獲取應(yīng)用程序安裝包中包含的各組件;
[0008]構(gòu)造所述應(yīng)用程序運(yùn)行所需的運(yùn)行環(huán)境;
[0009]在所述運(yùn)行環(huán)境下,分別加載各所述組件;
[0010]其中,若加載的所述組件為活動(dòng)Activity組件、廣播接收者BroadcastReceiver組件或服務(wù)Service組件,則在應(yīng)用程序管理服務(wù)PMS查驗(yàn)之前,將所述組件修改為已安裝應(yīng)用程序中的對(duì)應(yīng)組件,并在PMS根據(jù)所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件查驗(yàn)通過后,再次將所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件修正回所述組件,啟動(dòng)所述組件;
[0011]若加載的所述組件為內(nèi)容提供者ContentProvider組件,則通過反射機(jī)制調(diào)用所述 ContentProvider 組件。
[0012]依據(jù)本發(fā)明的第二個(gè)方面,提供了一種基于安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的裝置,其特征在于,包括:
[0013]獲取模塊,用于獲取應(yīng)用程序安裝包中包含的各組件;
[0014]構(gòu)造模塊,用于構(gòu)造所述應(yīng)用程序運(yùn)行所需的運(yùn)行環(huán)境;
[0015]加載模塊,用于在所述運(yùn)行環(huán)境下,分別加載各所述組件;
[0016]運(yùn)行?!缞A,當(dāng)加載的所述組件為活動(dòng)Activity組件、廣播接收者BroadcastReceiver組件或服務(wù)Service組件時(shí),在應(yīng)用程序管理服務(wù)PMS查驗(yàn)之前,將所述組件修改為已安裝應(yīng)用程序中的對(duì)應(yīng)組件,并在PMS根據(jù)所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件查驗(yàn)通過后,再次將所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件修正回所述組件,啟動(dòng)所述組件;當(dāng)加載的所述組件為內(nèi)容提供者ContentProvider組件時(shí),通過反射機(jī)制調(diào)用所述ContentProvider 組件。
[0017]依據(jù)本發(fā)明的第三個(gè)方面,提供了一種移動(dòng)終端,所述移動(dòng)終端包括基于安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的裝置,其中,所述基于安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的裝置包括:
[0018]獲取模塊,用于獲取應(yīng)用程序安裝包中包含的各組件;
[0019]構(gòu)造模塊,用于構(gòu)造所述應(yīng)用程序運(yùn)行所需的運(yùn)行環(huán)境;
[0020]加載模塊,用于在所述運(yùn)行環(huán)境下,分別加載各所述組件;
[0021]運(yùn)行?!缞A,當(dāng)加載的所述組件為活動(dòng)Activity組件、廣播接收者BroadcastReceiver組件或服務(wù)Service組件時(shí),在應(yīng)用程序管理服務(wù)PMS查驗(yàn)之前,將所述組件修改為已安裝應(yīng)用程序中的對(duì)應(yīng)組件,并在PMS根據(jù)所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件查驗(yàn)通過后,再次將所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件修正回所述組件,啟動(dòng)所述組件;當(dāng)加載的所述組件為內(nèi)容提供者ContentProvider組件時(shí),通過反射機(jī)制調(diào)用所述ContentProvider 組件。
[0022]借由上述技術(shù)方案,本發(fā)明實(shí)施例提供的技術(shù)方案至少具有下列優(yōu)點(diǎn):
[0023]本發(fā)明實(shí)施例提供的技術(shù)方案通過構(gòu)造未安裝應(yīng)用程序運(yùn)行所需的運(yùn)行環(huán)境,以為應(yīng)用程序提供同安裝后的運(yùn)行環(huán)境相同的環(huán)境;通過第一次修改未安裝應(yīng)用程序中的組件,以避免因應(yīng)用程序管理服務(wù)器(Package Manager Service, PMS)查驗(yàn)未通過而影響組件的啟動(dòng);通過第二次修改未安裝應(yīng)用程序中的組件,是為了在PMS通過校驗(yàn)后,啟動(dòng)真正的未安裝應(yīng)用程序中的組件,進(jìn)而實(shí)現(xiàn)了應(yīng)用程序的免安裝運(yùn)行,簡(jiǎn)化了應(yīng)用程序使用的操作;此外,由于應(yīng)用程序無需安裝在本地,且在給定的運(yùn)行環(huán)境內(nèi)運(yùn)行的,能有效的進(jìn)行權(quán)限的攔截、程序行為的監(jiān)控等,在一定程度上能解決因安裝平臺(tái)上存在的諸多漏洞所帶來的安全隱患問題。
[0024]上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,并可依照說明書的內(nèi)容予以實(shí)施,以下以本發(fā)明的較佳實(shí)施例并配合附圖詳細(xì)說明如后。

【專利附圖】

【附圖說明】
[0025]通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:
[0026]圖1示出了本發(fā)明實(shí)施例一提供的一種基于安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的方法的流程示意圖;
[0027]圖2示出了本發(fā)明實(shí)施例一提供的一種基于安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的方法中步驟102的實(shí)現(xiàn)流程示意圖;
[0028]圖3示出了本發(fā)明實(shí)施例二提供的一種基于安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的裝置的結(jié)構(gòu)示意圖;
[0029]圖4示出了本發(fā)明實(shí)施例三提供的一種移動(dòng)終端的實(shí)現(xiàn)結(jié)構(gòu)示意圖。

【具體實(shí)施方式】
[0030]為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0031]如圖1所示,本發(fā)明實(shí)施例一提供的一種基于安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的方法的流程示意圖。本實(shí)施例提供的所述方法的執(zhí)行主體可以安裝在安卓設(shè)備上應(yīng)用程序,例如免安裝沙箱應(yīng)用程序(以下簡(jiǎn)稱沙箱程序)。該沙箱程序?yàn)槲窗惭b的應(yīng)用程序安裝包提供了一個(gè)運(yùn)行的環(huán)境,以實(shí)現(xiàn)應(yīng)用程序的免安裝。簡(jiǎn)單的說,本實(shí)施例提供的所述方法就是為了提供一種應(yīng)用程序運(yùn)行框架,該運(yùn)行框架將未安裝應(yīng)用程序加載到自己的內(nèi)部去執(zhí)行。具體的,如圖1所示,本實(shí)施例所述的方法包括:
[0032]步驟101、獲取應(yīng)用程序安裝包中包含的各組件。
[0033]其中,組件分為四種類型,這四種類型分別為:活動(dòng)(Activity)組件、廣播接收者(Broadcast Receiver)組件、服務(wù) Service 組件和 Content Provider 組件。不是所有的應(yīng)用程序都必須包含所有這四種類型的組件,有的應(yīng)用程序可能由上述一種組件或多種組件組建。各組件都需要注冊(cè)才能使用,即每一個(gè)組件都需要在配置文件AndroidManifest.xml中進(jìn)行配置。因此,應(yīng)用程序安裝包的配置文件AndroidManifest.xml中有列出應(yīng)用程序所包含的所有組件。由此可知,本步驟101可通過讀取所述應(yīng)用程序安裝包的AndroidManifest.xml文件,來獲取應(yīng)用程序安裝包中所包含的所有組件。
[0034]這里需要說明的是:由于應(yīng)用程序安裝包沒有在本地進(jìn)行安裝,因此,就不會(huì)有應(yīng)用程序管理服務(wù)(Package Manager Service,簡(jiǎn)稱PMS)安裝應(yīng)用程序的過程。其實(shí)PMS安裝應(yīng)用程序的過程就是解析AndroidManifest.xml的過程,并從里面得到應(yīng)用程序的相關(guān)信息,例如得到應(yīng)用程序的組件Activity組件、Service組件、Broadcast Receiver組件和Content Provider組件等信息,有了這些信息后,通過活動(dòng)管理服務(wù)(Activity ManagerService,簡(jiǎn)稱AMS)就可以在系統(tǒng)中正常地運(yùn)行該應(yīng)用程序了。因?yàn)闆]有上述PMS安裝應(yīng)用程序的過程,所以本步驟可采用反射機(jī)制來獲取所述應(yīng)用程序安裝包中包含的各組件。
[0035]其中,本實(shí)施例中所采用的反射機(jī)制可以為Java反射機(jī)制,Java反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法;這種動(dòng)態(tài)獲取信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能即為JAVA語言的反射機(jī)制。不同語言都有其相對(duì)應(yīng)的反射機(jī)制,例如,C語言和C++語言均有其對(duì)應(yīng)的反射機(jī)制。
[0036]步驟102、構(gòu)造所述應(yīng)用程序運(yùn)行所需的運(yùn)行環(huán)境。
[0037]由于應(yīng)用程序安裝包APK沒有安裝,因此就無法通過沙箱程序的Context去取到APK中的資源,比如圖片、文本等。APK在被加載運(yùn)行時(shí)所采用的上下文是沙箱程序的上下文(因?yàn)樯诚涑绦蚴前惭b在安卓設(shè)備上的),用別人的Context是無法得到自己的資源的。由此可知,沙箱程序除了要能加載應(yīng)用程序中的各組件外,還要為應(yīng)用程序構(gòu)造其所需的運(yùn)行環(huán)境。
[0038]一個(gè)應(yīng)用程序的運(yùn)行只有一個(gè)主進(jìn)程ActivityThread, ActivityThread對(duì)象描述的是當(dāng)前正在運(yùn)行的應(yīng)用程序進(jìn)程。因此,本實(shí)施例提供的所述方法,需構(gòu)造出所述應(yīng)用程序的ActivityThread,以使所述Activity Thread執(zhí)行各所述組件的啟動(dòng)操作。
[0039]我們知道Android應(yīng)用程序在運(yùn)行的過程中,是通過一個(gè)稱為Asset Manager資源管理器來讀取打包在APK文件里面的資源文件的。應(yīng)用程序的每一個(gè)activity組件都關(guān)聯(lián)一個(gè)contextlmpl對(duì)象,這個(gè)contextlmpl對(duì)象就是用來描述activity組件的運(yùn)行上下文環(huán)境的。調(diào)用這個(gè)Contextlmpl對(duì)象的成員函數(shù)init來執(zhí)行初始化Activity組件運(yùn)行上下文環(huán)境的工作,其中就包括創(chuàng)建用來訪問應(yīng)用程序資源的Resources對(duì)象和AssetManager對(duì)象的工作。其中,Contextlmpl.1nit函數(shù)就定義在文件frameworks/base/core/java/android/app/Contextlmpl.java 中。Contextlmpl.1nit 函數(shù)中的參數(shù)packagelnfo指向的是一個(gè)LoadedApk對(duì)象,這個(gè)LoadedApk對(duì)象描述的是當(dāng)前正在啟動(dòng)組件所屬的Apk。用來訪問應(yīng)用程序資源的Resources對(duì)象是通過調(diào)用參數(shù)packagelnfo所指向的是一個(gè)LoadedApk對(duì)象的成員函數(shù)getResources來創(chuàng)建的。由此可知,為了創(chuàng)建Resources對(duì)象,以提取或訪問應(yīng)用程序資源,本實(shí)施例還需分別為應(yīng)用中的各組件構(gòu)建一個(gè) loaded APK 對(duì)象。
[0040]除上述需構(gòu)建的內(nèi)容以外,本發(fā)明實(shí)施例還需要為應(yīng)用程序構(gòu)造其運(yùn)行所需的類加載器,還需為應(yīng)用程序構(gòu)造其運(yùn)行所需的資源環(huán)境。
[0041]綜上所述,如圖2所示,本步驟102可具體包括如下步驟:
[0042]步驟S1、構(gòu)造所述應(yīng)用程序運(yùn)行所需的資源環(huán)境,以在啟動(dòng)各所述組件時(shí)調(diào)取相應(yīng)的資源。
[0043]具體的,可采用如下方式實(shí)現(xiàn):
[0044]對(duì)資源Resources類的構(gòu)造函數(shù)中的成員變量massets進(jìn)行修改,以在啟動(dòng)各所述組件時(shí)通過所述massets來調(diào)取相應(yīng)的資源;和/或
[0045]對(duì)資源管理器Asset Manager中的Asset Path函數(shù)進(jìn)行修改,修改后的所述Asset Path函數(shù)指向所述應(yīng)用程序安裝包中的資源文件,以在啟動(dòng)各所述組件時(shí)通過所述Asset Manager調(diào)取所述Asset Path函數(shù)來獲取所述資源文件中的對(duì)應(yīng)資源。
[0046]其中,Resources類的構(gòu)造函數(shù)定義在文件 frameworks/base/core/java/android/content/res/Resources.java 中。因?yàn)?Resources 類的構(gòu)造函數(shù)將參數(shù) assets所指向的一個(gè)AssetManager對(duì)象保存在成員變量mAssets中,即mAssets = assets,使得Resources類的構(gòu)造函數(shù)可以通過mAssets來訪問應(yīng)用程序的資源。因此,本實(shí)施例可通過對(duì)資源類的構(gòu)造函數(shù)中的成員變量massets進(jìn)行修改,來實(shí)現(xiàn)通過massets調(diào)取應(yīng)用程序所需的資源。其中,上述實(shí)現(xiàn)方式可采用反射機(jī)制來實(shí)現(xiàn)。
[0047]當(dāng)然,本實(shí)施例還可對(duì)資源管理器Asset Manager中的Asset Path函數(shù)進(jìn)行修改,如通過AssetManager對(duì)象的成員函數(shù)addAssetPath來添加指定的應(yīng)用程序資源文件路徑(如:路徑為 /system/app/Music.apk)到 Asset Path 函數(shù)中。由于 addAssetPath 是隱藏API我們無法直接調(diào)用,所以只能通過反射機(jī)制來實(shí)現(xiàn)。
[0048]步驟S2、構(gòu)造類加載器,以加載各所述組件中的相應(yīng)加載類。
[0049]具體的,所述構(gòu)造類加載器,可采用如下方式實(shí)現(xiàn):
[0050]將所述應(yīng)用程序的路徑添加到類加載器中的路徑列表pathlist中,構(gòu)造根據(jù)所述應(yīng)用程序路徑查找加載類的類加載器;和/或
[0051]對(duì)類加載器中的m parent成員進(jìn)行修改,構(gòu)造首先用parent找加載類的類加載器。
[0052]構(gòu)造首先用parent找加載類的類加載器的目的是:系統(tǒng)在找一個(gè)加載類的時(shí)候,首先調(diào)的是findloadedclassO函數(shù),緊接著就會(huì)去調(diào)用mparentfindclass O函數(shù)。如果本實(shí)施例直接將class loader構(gòu)造為首先用parent找加載類的類加載器,這樣系統(tǒng)在找這個(gè)類的時(shí)候,就直接調(diào)用mparentfindclass O函數(shù)去找了,省去了調(diào)用findloadedclassO函數(shù)找類的步驟。
[0053]步驟S3、構(gòu)造主線程Activity Thread,以使所述Activity Thread執(zhí)行各所述組件的啟動(dòng)操作。
[0054]步驟S4、分別為各所述組件構(gòu)造一個(gè)加載安卓安裝包loaded APK對(duì)象。
[0055]具體的,本步驟可采用如下方式實(shí)現(xiàn):
[0056]通過反射機(jī)制反射Activity Thread里的packageinfo,以分別為各所述組件構(gòu)造一個(gè)加載安卓安裝包loaded APK對(duì)象。
[0057]這里需要補(bǔ)充的是:若所述應(yīng)用程序?yàn)樾璋惭b自校驗(yàn)的應(yīng)用程序,則上述構(gòu)造所述應(yīng)用程序運(yùn)行所需的運(yùn)行環(huán)境的步驟中,還需包括如下步驟:
[0058]通過反射機(jī)制或鉤子hook函數(shù)接管所述應(yīng)用程序運(yùn)行時(shí)所需的安裝自校驗(yàn)操作。
[0059]這里需要補(bǔ)充的是:術(shù)語“鉤子”涵蓋了用于通過攔截在軟件組件之間傳遞的函數(shù)調(diào)用、消息、或事件來改變或增加操作系統(tǒng)、應(yīng)用程序、或其他軟件組件的行為的技術(shù)。而處理這種被攔截的函數(shù)調(diào)用、事件或消息的代碼就被稱為鉤子hook函數(shù)。鉤子通常用于各種目標(biāo),包括對(duì)功能進(jìn)行調(diào)試和對(duì)功能進(jìn)行擴(kuò)展。其示例可以包括在鍵盤或鼠標(biāo)事件傳遞到應(yīng)用程序之前攔截它們,或者攔截系統(tǒng)調(diào)用(system call),以監(jiān)視或修改應(yīng)用程序或其他組件的功能等等。本實(shí)施例即可采用鉤子hook函數(shù)接管所述應(yīng)用程序運(yùn)行時(shí)所需的安裝自校驗(yàn)操作。
[0060]步驟103、在所述運(yùn)行環(huán)境下,分別加載各所述組件。
[0061]步驟104、若加載的所述組件為活動(dòng)Activity組件、廣播接收者BroadcastReceiver組件或服務(wù)Service組件,則在應(yīng)用程序管理服務(wù)PMS查驗(yàn)之前,將所述組件修改為已安裝應(yīng)用程序中的對(duì)應(yīng)組件,并在PMS根據(jù)所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件查驗(yàn)通過后,再次將所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件修正回所述組件,啟動(dòng)所述組件。
[0062]具體的,本步驟可采用如下方法實(shí)現(xiàn):
[0063]在應(yīng)用程序管理服務(wù)PMS查驗(yàn)之前,將所述組件的第一查驗(yàn)參數(shù)修改為所述已安裝應(yīng)用程序中對(duì)應(yīng)組件的第二查驗(yàn)參數(shù);
[0064]在PMS根據(jù)所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件查驗(yàn)通過后,將修改后的所述組件的第二查驗(yàn)參數(shù)改回所述第一查驗(yàn)參數(shù),并啟動(dòng)所述組件。
[0065]本實(shí)施例通過兩次修改的方法,是為了在第一次修改后能通過PMS校驗(yàn);第二次改回后啟動(dòng)未安裝應(yīng)用程序中的組件,實(shí)現(xiàn)組件的啟動(dòng),進(jìn)而實(shí)現(xiàn)所述應(yīng)用程序的運(yùn)行。
[0066]這里需要補(bǔ)充的是:
[0067]Content Provider組件的激活:當(dāng)接收到ContentResolver發(fā)出的請(qǐng)求后,Content Provider組件即被激活。
[0068]Activity組件的激活可以通過傳遞一個(gè)Intent對(duì)象至startActivity O或Activity.startActivityForResult ()以載入(或指定新工作給)一個(gè) activity。相應(yīng)的activity可以通過調(diào)用getlntentO方法來查看激活它的intent。
[0069]Service組件的激活可以通過傳遞一個(gè)Intent對(duì)象至Context.startService ()或Context.bindService O,前者Android調(diào)用服務(wù)的onStart O方法并將Intent對(duì)象傳遞給它,后者Android調(diào)用服務(wù)的onBindO方法將這個(gè)Intent對(duì)象傳遞給它。
[0070]Broadcast Receiver組件的激活可以通過傳遞一個(gè)Intent對(duì)象至給Context.sendBroadcast O等,Android會(huì)調(diào)用所有對(duì)此廣播有興趣的廣播接收器的onReceive O方法,將intent傳遞給它們。
[0071]由上述內(nèi)容可知,上述查驗(yàn)參數(shù)具體為上述各組件激活所傳遞的intent對(duì)象。所述intent對(duì)象內(nèi)包含有包名和類名等。
[0072]進(jìn)一步,基于上述各組件的激活可知,本步驟中所述在應(yīng)用程序管理服務(wù)PMS查驗(yàn)之前,將所述組件的第一查驗(yàn)參數(shù)修改為所述已安裝應(yīng)用程序中對(duì)應(yīng)組件的第二查驗(yàn)參數(shù),對(duì)應(yīng)不同的組件的具體實(shí)現(xiàn)如下:
[0073]當(dāng)所述組件為activity組件時(shí),調(diào)用StartActivity O ,將所述activity組件的第一查驗(yàn)參數(shù)修改為已安裝應(yīng)用程序預(yù)先申明的activity組件的第二查驗(yàn)參數(shù),活動(dòng)管理服務(wù)ASM解析出修改后的所述activity組件的第二查驗(yàn)參數(shù),并將所述第二查驗(yàn)參數(shù)傳至所述PMS等待查驗(yàn);
[0074]當(dāng)所述組件為BroadcastReceiver組件時(shí),調(diào)用sendbroadcast O ,將所述BroadcastReceiver組件的第一查驗(yàn)參數(shù)修改為已安裝應(yīng)用程序預(yù)先申明的BroadcastReceiver組件的第二查驗(yàn)參數(shù),ASM解析出修改后的所述BroadcastReceiver組件的第二查驗(yàn)參數(shù),并將所述第二查驗(yàn)參數(shù)傳至所述PMS等待查驗(yàn);
[0075]當(dāng)所述組件為Service組件時(shí),調(diào)用startservice O或bindservice O ,將所述Service組件的第一查驗(yàn)參數(shù)修改為已安裝應(yīng)用程序預(yù)先申明的Service組件的第二查驗(yàn)參數(shù),ASM解析出修改后的所述Service組件的第二查驗(yàn)參數(shù),并將所述第二查驗(yàn)參數(shù)傳至所述PMS等待查驗(yàn)。
[0076]步驟105、若加載的所述組件為內(nèi)容提供者ContentProvider組件,貝U通過反射機(jī)制調(diào)用所述ContentProvider組件。
[0077]本實(shí)施例提供的技術(shù)方案通過構(gòu)造未安裝應(yīng)用程序運(yùn)行所需的運(yùn)行環(huán)境,以為應(yīng)用程序提供同安裝后的運(yùn)行環(huán)境相同的環(huán)境;通過第一次修改未安裝應(yīng)用程序中的組件,以避免因應(yīng)用程序管理服務(wù)器(Package Manager Service,PMS)查驗(yàn)未通過而影響組件的啟動(dòng);通過第二次修改未安裝應(yīng)用程序中的組件,是為了在PMS通過校驗(yàn)后,啟動(dòng)真正的未安裝應(yīng)用程序中的組件,進(jìn)而實(shí)現(xiàn)了應(yīng)用程序的免安裝運(yùn)行,簡(jiǎn)化了應(yīng)用程序使用的操作;此外,由于應(yīng)用程序無需安裝在本地,且在給定的運(yùn)行環(huán)境內(nèi)運(yùn)行的,能有效的進(jìn)行權(quán)限的攔截、程序行為的監(jiān)控等,在一定程度上能解決因安裝平臺(tái)上存在的諸多漏洞所帶來的安全隱患問題。
[0078]需要說明的是:對(duì)于前述的各方法實(shí)施例,為了簡(jiǎn)單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本發(fā)明,某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本發(fā)明所必須的。
[0079]如圖3所示,本發(fā)明實(shí)施例二提供的基于安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的裝置的結(jié)構(gòu)示意圖。本實(shí)施例提供的所述裝置可實(shí)現(xiàn)上述實(shí)施例一提供的所述方法。本實(shí)施例提供的所述裝置可具體表征為安裝在安卓設(shè)備上的應(yīng)用程序,例如沙箱程序。下載在安卓設(shè)備上的應(yīng)用程序安裝包均可在所述沙箱程序提供的運(yùn)行環(huán)境下實(shí)現(xiàn)免安裝運(yùn)行。具體的,本實(shí)施例提供的所述裝置包括:獲取模塊1、構(gòu)造模塊2、加載模塊3和運(yùn)行模塊4。其中,所述獲取模塊I用于獲取應(yīng)用程序安裝包中包含的各組件。所述構(gòu)造模塊2用于構(gòu)造所述應(yīng)用程序運(yùn)行所需的運(yùn)行環(huán)境。所述加載模塊3用于在所述運(yùn)行環(huán)境下,分別加載各所述組件。所述運(yùn)行模塊4當(dāng)加載的所述組件為活動(dòng)Activity組件、廣播接收者BroadcastReceiver組件或服務(wù)Service組件時(shí),在應(yīng)用程序管理服務(wù)PMS查驗(yàn)之前,將所述組件修改為已安裝應(yīng)用程序中的對(duì)應(yīng)組件,并在PMS根據(jù)所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件查驗(yàn)通過后,再次將所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件修正回所述組件,啟動(dòng)所述組件;當(dāng)加載的所述組件為內(nèi)容提供者ContentProvider組件時(shí),通過反射機(jī)制調(diào)用所述ContentProvider 組件。
[0080]本實(shí)施例提供的技術(shù)方案通過構(gòu)造未安裝應(yīng)用程序運(yùn)行所需的運(yùn)行環(huán)境,以為應(yīng)用程序提供同安裝后的運(yùn)行環(huán)境相同的環(huán)境;通過第一次修改未安裝應(yīng)用程序中的組件,以避免因應(yīng)用程序管理服務(wù)器(Package Manager Service,PMS)查驗(yàn)未通過而影響組件的啟動(dòng);通過第二次修改未安裝應(yīng)用程序中的組件,是為了在PMS通過校驗(yàn)后,啟動(dòng)真正的未安裝應(yīng)用程序中的組件,進(jìn)而實(shí)現(xiàn)了應(yīng)用程序的免安裝運(yùn)行,簡(jiǎn)化了應(yīng)用程序使用的操作;此外,由于應(yīng)用程序無需安裝在本地,且在給定的運(yùn)行環(huán)境內(nèi)運(yùn)行的,能有效的進(jìn)行權(quán)限的攔截、程序行為的監(jiān)控等,在一定程度上能解決因安裝平臺(tái)上存在的諸多漏洞所帶來的安全隱患問題。
[0081]進(jìn)一步的,所述構(gòu)造模塊可采用如下結(jié)構(gòu)實(shí)現(xiàn)。具體的所述構(gòu)造模塊包括:第一構(gòu)造單元、第二構(gòu)造單元、第三構(gòu)造單元和第四構(gòu)造模塊。其中,所述第一構(gòu)造單元、用于構(gòu)造所述應(yīng)用程序運(yùn)行所需的資源環(huán)境,以在啟動(dòng)各所述組件時(shí)調(diào)取相應(yīng)的資源。所述第二構(gòu)造單元,用于構(gòu)造類加載器,以加載各所述組件中的相應(yīng)加載類。所述第三構(gòu)造單元,用于構(gòu)造主線程Activity Thread,以使所述Activity Thread執(zhí)行各所述組件的啟動(dòng)操作。所述第四構(gòu)造單元,用于分別為各所述組件構(gòu)造一個(gè)加載安卓安裝包loaded APK對(duì)象。
[0082]其中,所述第四構(gòu)造單元還可具體用于通過反射機(jī)制反射Activity Thread里的packageinfo,以分別為各所述組件構(gòu)造一個(gè)加載安卓安裝包loaded APK對(duì)象。
[0083]再進(jìn)一步的,當(dāng)所述應(yīng)用程序?yàn)樾璋惭b自校驗(yàn)的應(yīng)用程序時(shí),所述構(gòu)造模塊,還包括:接管單元。其中,所述接管單元,用于通過反射機(jī)制或鉤子hook函數(shù)接管所述應(yīng)用程序運(yùn)行時(shí)所需的安裝自校驗(yàn)操作。
[0084]進(jìn)一步的,本實(shí)施例中所述的第一構(gòu)造單元具體用于:
[0085]對(duì)資源類的構(gòu)造函數(shù)中的成員變量massets進(jìn)行修改,以在啟動(dòng)各所述組件時(shí)通過所述massets來調(diào)取相應(yīng)的資源;和/或
[0086]對(duì)資源管理器Asset Manager中的Asset Path函數(shù)進(jìn)行修改,修改后的所述Asset Path函數(shù)指向所述應(yīng)用程序安裝包中的資源文件,以在啟動(dòng)各所述組件時(shí)通過所述Asset Manager調(diào)取所述Asset Path函數(shù)來獲取所述資源文件中的對(duì)應(yīng)資源。
[0087]進(jìn)一步的,本實(shí)施例中的所述第二構(gòu)造單元具體用于:
[0088]將所述應(yīng)用程序的路徑添加到類加載器中的路徑列表pathlist中,構(gòu)造根據(jù)所述應(yīng)用程序路徑查找加載類的類加載器;和/或
[0089]對(duì)類加載器中的m parent成員進(jìn)行修改,構(gòu)造首先用parent找加載類的類加載器。
[0090]進(jìn)一步的,本實(shí)施例中所述的運(yùn)行模塊可采用如下結(jié)構(gòu)實(shí)現(xiàn)。具體的,所述運(yùn)行模塊包括:第一運(yùn)行單元和第二運(yùn)行單元。其中,所述第一運(yùn)行單元,用于當(dāng)加載的所述組件為活動(dòng)Activity組件、廣播接收者Broadcast Receiver組件或服務(wù)Service組件時(shí),在應(yīng)用程序管理服務(wù)PMS查驗(yàn)之前,將所述組件修改為已安裝應(yīng)用程序中的對(duì)應(yīng)組件,并在PMS根據(jù)所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件查驗(yàn)通過后,再次將所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件修正回所述組件,啟動(dòng)所述組件。所述第二運(yùn)行單元,用于當(dāng)加載的所述組件為內(nèi)容提供者Content Provider組件時(shí),通過反射機(jī)制調(diào)用所述Content Provider組件。其中,所述第一運(yùn)行單元包括:第一修改子單元和第二修改子單元。所述第一修改子單元用于在應(yīng)用程序管理服務(wù)PMS查驗(yàn)之前,將所述組件的第一查驗(yàn)參數(shù)修改為所述已安裝應(yīng)用程序中對(duì)應(yīng)組件的第二查驗(yàn)參數(shù)。所述第二修改子單元,用于在PMS根據(jù)所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件查驗(yàn)通過后,將修改后的所述組件的第二查驗(yàn)參數(shù)改回所述第一查驗(yàn)參數(shù),并啟動(dòng)所述組件。
[0091]具體的,所述第一修改子單元可具體用于:
[0092]當(dāng)所述組件為activity組件時(shí),調(diào)用StartActivity O ,將所述activity組件的第一查驗(yàn)參數(shù)修改為已安裝應(yīng)用程序預(yù)先申明的activity組件的第二查驗(yàn)參數(shù),活動(dòng)管理服務(wù)ASM解析出修改后的所述activity組件的第二查驗(yàn)參數(shù),并將所述第二查驗(yàn)參數(shù)傳至所述PMS等待查驗(yàn);
[0093]當(dāng)所述組件為Broadcast Receiver組件時(shí),調(diào)用sendbroadcast O ,將所述Broadcast Receiver組件的第一查驗(yàn)參數(shù)修改為已安裝應(yīng)用程序預(yù)先申明的BroadcastReceiver組件的第二查驗(yàn)參數(shù),ASM解析出修改后的所述Broadcast Receiver組件的第二查驗(yàn)參數(shù),并將所述第二查驗(yàn)參數(shù)傳至所述PMS等待查驗(yàn);
[0094]當(dāng)所述組件為Service組件時(shí),調(diào)用startservice O或bindservice O ,將所述Service組件的第一查驗(yàn)參數(shù)修改為已安裝應(yīng)用程序預(yù)先申明的Service組件的第二查驗(yàn)參數(shù),ASM解析出修改后的所述Service組件的第二查驗(yàn)參數(shù),并將所述第二查驗(yàn)參數(shù)傳至所述PMS等待查驗(yàn)。
[0095]本發(fā)明實(shí)施例三提供了一種移動(dòng)終端。該移動(dòng)終端包括:基于安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的裝置。其中,所述基于安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的裝置用于:
[0096]獲取應(yīng)用程序安裝包中包含的各組件;
[0097]構(gòu)造所述應(yīng)用程序運(yùn)行所需的運(yùn)行環(huán)境;
[0098]在所述運(yùn)行環(huán)境下,分別加載各所述組件;
[0099]若加載的所述組件為活動(dòng)Activity組件、廣播接收者Broadcast Receiver組件或服務(wù)Service組件,則在應(yīng)用程序管理服務(wù)PMS查驗(yàn)之前,將所述組件修改為已安裝應(yīng)用程序中的對(duì)應(yīng)組件,并在PMS根據(jù)所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件查驗(yàn)通過后,再次將所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件修正回所述組件,啟動(dòng)所述組件;
[0100]若加載的所述組件為內(nèi)容提供者Content Provider組件,貝U通過反射機(jī)制調(diào)用所述 Content Provider 組件。
[0101]這里需要說明的是:本實(shí)施例中的所述基于安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的裝置可以具體采用上述實(shí)施例二中所提供的裝置,具體的實(shí)現(xiàn)結(jié)構(gòu)和工作原理可參見上述實(shí)施例中的相應(yīng)內(nèi)容,此處不再贅述。
[0102]本實(shí)施例中所述的基于安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的裝置可以是安裝在所述移動(dòng)終端上的應(yīng)用程序,也可以是設(shè)置在所述移動(dòng)終端中并與所述移動(dòng)終端中的處理器通信連接的具有上述功能的邏輯電路或芯片。
[0103]具體的,圖4示出了本實(shí)施例三提供的所述移動(dòng)終端的一種實(shí)現(xiàn)結(jié)構(gòu)示意圖。如圖4所示,本實(shí)施例三所述的移動(dòng)終端50包括:處理器51和存儲(chǔ)器53。其中,所述處理器51和所述存儲(chǔ)器53通過通信線路54完成相互間的通信。所述處理器51用于執(zhí)行應(yīng)用程序531。所述存儲(chǔ)器53用于存放所述應(yīng)用程序531。其中,所述應(yīng)用程序531為基于安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的裝置,該應(yīng)用程序用于:
[0104]獲取應(yīng)用程序安裝包中包含的各組件;
[0105]構(gòu)造所述應(yīng)用程序運(yùn)行所需的運(yùn)行環(huán)境;
[0106]在所述運(yùn)行環(huán)境下,分別加載各所述組件;
[0107]若加載的所述組件為活動(dòng)Activity組件、廣播接收者Broadcast Receiver組件或服務(wù)Service組件,則在應(yīng)用程序管理服務(wù)PMS查驗(yàn)之前,將所述組件修改為已安裝應(yīng)用程序中的對(duì)應(yīng)組件,并在PMS根據(jù)所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件查驗(yàn)通過后,再次將所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件修正回所述組件,啟動(dòng)所述組件;
[0108]若加載的所述組件為內(nèi)容提供者Content Provider組件,貝U通過反射機(jī)制調(diào)用所述 Content Provider 組件。
[0109]本實(shí)施例提供的技術(shù)方案通過構(gòu)造未安裝應(yīng)用程序運(yùn)行所需的運(yùn)行環(huán)境,以為應(yīng)用程序提供同安裝后的運(yùn)行環(huán)境相同的環(huán)境;通過第一次修改未安裝應(yīng)用程序中的組件,以避免因應(yīng)用程序管理服務(wù)器(Package Manager Service,PMS)查驗(yàn)未通過而影響組件的啟動(dòng);通過第二次修改未安裝應(yīng)用程序中的組件,是為了在PMS通過校驗(yàn)后,啟動(dòng)真正的未安裝應(yīng)用程序中的組件,進(jìn)而實(shí)現(xiàn)了應(yīng)用程序的免安裝運(yùn)行,簡(jiǎn)化了應(yīng)用程序使用的操作;此外,由于應(yīng)用程序無需安裝在本地,且在給定的運(yùn)行環(huán)境內(nèi)運(yùn)行的,能有效的進(jìn)行權(quán)限的攔截、程序行為的監(jiān)控等,在一定程度上能解決因安裝平臺(tái)上存在的諸多漏洞所帶來的安全隱患問題。
[0110]在上述實(shí)施例中,對(duì)各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒有詳述的部分,可以參見其他實(shí)施例的相關(guān)描述。
[0111]可以理解的是,上述方法及交換機(jī)中的相關(guān)特征可以相互參考。另外,上述實(shí)施例中的“第一”、“第二”等是用于區(qū)分各實(shí)施例,而并不代表各實(shí)施例的優(yōu)劣。
[0112]所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡(jiǎn)潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過程,在此不再贅述。
[0113]在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對(duì)任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對(duì)特定語言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
[0114]在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說明書的理解。
[0115]類似地,應(yīng)當(dāng)理解,為了精簡(jiǎn)本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循【具體實(shí)施方式】的權(quán)利要求書由此明確地并入該【具體實(shí)施方式】,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
[0116]本領(lǐng)域那些技術(shù)人員可以理解,可以對(duì)實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們?cè)O(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中。可以把實(shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來代替。
[0117]此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。
[0118]本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號(hào)處理器(DSP)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例提供的裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。
[0119]應(yīng)該注意的是上述實(shí)施例對(duì)本發(fā)明進(jìn)行說明而不是對(duì)本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對(duì)權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過同一個(gè)硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序。可將這些單詞解釋為名稱。
[0120]本發(fā)明公開了 Al、一種基于安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的方法,包括:
[0121]獲取應(yīng)用程序安裝包中包含的各組件;
[0122]構(gòu)造所述應(yīng)用程序運(yùn)行所需的運(yùn)行環(huán)境;
[0123]在所述運(yùn)行環(huán)境下,分別加載各所述組件;
[0124]若加載的所述組件為活動(dòng)Activity組件、廣播接收者Broadcast Receiver組件或服務(wù)Service組件,則在應(yīng)用程序管理服務(wù)PMS查驗(yàn)之前,將所述組件修改為已安裝應(yīng)用程序中的對(duì)應(yīng)組件,并在PMS根據(jù)所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件查驗(yàn)通過后,再次將所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件修正回所述組件,啟動(dòng)所述組件;
[0125]若加載的所述組件為內(nèi)容提供者Content Provider組件,貝U通過反射機(jī)制調(diào)用所述 Content Provider 組件。
[0126]A2、如Al所述的方法,所述構(gòu)造所述應(yīng)用程序運(yùn)行所需的運(yùn)行環(huán)境,包括:
[0127]構(gòu)造所述應(yīng)用程序運(yùn)行所需的資源環(huán)境,以在啟動(dòng)各所述組件時(shí)調(diào)取相應(yīng)的資源;
[0128]構(gòu)造類加載器,以加載各所述組件中的相應(yīng)加載類;
[0129]構(gòu)造主線程Activity Thread,以使所述Activity Thread執(zhí)行各所述組件的啟動(dòng)操作;
[0130]分別為各所述組件構(gòu)造一個(gè)加載安卓安裝包loaded APK對(duì)象。
[0131]A3、如A2所述的方法,所述分別為各所述組件構(gòu)造一個(gè)加載安卓安裝包loadedAPK對(duì)象,包括:
[0132]通過反射機(jī)制反射Activity Thread里的packageinfo,以分別為各所述組件構(gòu)造一個(gè)加載安卓安裝包loaded APK對(duì)象。
[0133]A4、如A2所述的方法,
[0134]若所述應(yīng)用程序?yàn)樾璋惭b自校驗(yàn)的應(yīng)用程序,則所述構(gòu)造所述應(yīng)用程序運(yùn)行所需的運(yùn)行環(huán)境,還包括:
[0135]通過反射機(jī)制或鉤子hook函數(shù)接管所述應(yīng)用程序運(yùn)行時(shí)所需的安裝自校驗(yàn)操作。
[0136]A5、如A2?A4中任一項(xiàng)所述的方法,所述構(gòu)造所述應(yīng)用程序運(yùn)行所需的資源環(huán)境,以在啟動(dòng)各所述組件時(shí)調(diào)取相應(yīng)的資源,包括:
[0137]對(duì)資源類的構(gòu)造函數(shù)中的成員變量massets進(jìn)行修改,以在啟動(dòng)各所述組件時(shí)通過所述massets來調(diào)取相應(yīng)的資源;和/或
[0138]對(duì)資源管理器Asset Manager中的Asset Path函數(shù)進(jìn)行修改,修改后的所述Asset Path函數(shù)指向所述應(yīng)用程序安裝包中的資源文件,以在啟動(dòng)各所述組件時(shí)通過所述Asset Manager調(diào)取所述Asset Path函數(shù)來獲取所述資源文件中的對(duì)應(yīng)資源。
[0139]A6、如A2?A4中任一項(xiàng)所述的方法,所述構(gòu)造類加載器,包括:
[0140]將所述應(yīng)用程序的路徑添加到類加載器中的路徑列表pathlist中,構(gòu)造根據(jù)所述應(yīng)用程序路徑查找加載類的類加載器;和/或
[0141]對(duì)類加載器中的m parent成員進(jìn)行修改,構(gòu)造首先用parent找加載類的類加載器。
[0142]A7、如Al?A4中任一項(xiàng)所述的方法,所述在PMS查驗(yàn)之前,將所述組件修改為已安裝應(yīng)用程序中的對(duì)應(yīng)組件,并在PMS根據(jù)所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件查驗(yàn)通過后,再次將所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件修正回所述組件,啟動(dòng)所述組件,包括:
[0143]在應(yīng)用程序管理服務(wù)PMS查驗(yàn)之前,將所述組件的第一查驗(yàn)參數(shù)修改為所述已安裝應(yīng)用程序中對(duì)應(yīng)組件的第二查驗(yàn)參數(shù);
[0144]在PMS根據(jù)所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件查驗(yàn)通過后,將修改后的所述組件的第二查驗(yàn)參數(shù)改回所述第一查驗(yàn)參數(shù),并啟動(dòng)所述組件。
[0145]A8、如A7所述的方法,所述查驗(yàn)參數(shù)為意圖1ntent對(duì)象。
[0146]A9、如A7所述的方法,所述在應(yīng)用程序管理服務(wù)PMS查驗(yàn)之前,將所述組件的第一查驗(yàn)參數(shù)修改為所述已安裝應(yīng)用程序中對(duì)應(yīng)組件的第二查驗(yàn)參數(shù),包括:
[0147]當(dāng)所述組件為activity組件時(shí),調(diào)用StartActivityO,將所述activity組件的第一查驗(yàn)參數(shù)修改為已安裝應(yīng)用程序預(yù)先申明的activity組件的第二查驗(yàn)參數(shù),活動(dòng)管理服務(wù)ASM解析出修改后的所述activity組件的第二查驗(yàn)參數(shù),并將所述第二查驗(yàn)參數(shù)傳至所述PMS等待查驗(yàn);
[0148]當(dāng)所述組件為Broadcast Receiver組件時(shí),調(diào)用sendbroadcast O ,將所述Broadcast Receiver組件的第一查驗(yàn)參數(shù)修改為已安裝應(yīng)用程序預(yù)先申明的BroadcastReceiver組件的第二查驗(yàn)參數(shù),ASM解析出修改后的所述Broadcast Receiver組件的第二查驗(yàn)參數(shù),并將所述第二查驗(yàn)參數(shù)傳至所述PMS等待查驗(yàn);
[0149]當(dāng)所述組件為Service組件時(shí),調(diào)用startservice O或bindservice O ,將所述Service組件的第一查驗(yàn)參數(shù)修改為已安裝應(yīng)用程序預(yù)先申明的Service組件的第二查驗(yàn)參數(shù),ASM解析出修改后的所述Service組件的第二查驗(yàn)參數(shù),并將所述第二查驗(yàn)參數(shù)傳至所述PMS等待查驗(yàn)。
[0150]本發(fā)明還公開了 B10、一種基于安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的裝置,包括:
[0151]獲取模塊,用于獲取應(yīng)用程序安裝包中包含的各組件;
[0152]構(gòu)造模塊,用于構(gòu)造所述應(yīng)用程序運(yùn)行所需的運(yùn)行環(huán)境;
[0153]加載模塊,用于在所述運(yùn)行環(huán)境下,分別加載各所述組件;
[0154]運(yùn)行模塊,當(dāng)加載的所述組件為活動(dòng)Activity組件、廣播接收者BroadcastReceiver組件或服務(wù)Service組件時(shí),在應(yīng)用程序管理服務(wù)PMS查驗(yàn)之前,將所述組件修改為已安裝應(yīng)用程序中的對(duì)應(yīng)組件,并在PMS根據(jù)所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件查驗(yàn)通過后,再次將所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件修正回所述組件,啟動(dòng)所述組件;當(dāng)加載的所述組件為內(nèi)容提供者ContentProvider組件時(shí),通過反射機(jī)制調(diào)用所述ContentProvider 組件。
[0155]B11、如BlO所述的裝置,所述構(gòu)造模塊,包括:
[0156]第一構(gòu)造單元、用于構(gòu)造所述應(yīng)用程序運(yùn)行所需的資源環(huán)境,以在啟動(dòng)各所述組件時(shí)調(diào)取相應(yīng)的資源;
[0157]第二構(gòu)造單元,用于構(gòu)造類加載器,以加載各所述組件中的相應(yīng)加載類;
[0158]第三構(gòu)造單元,用于構(gòu)造主線程Activity Thread,以使所述Activity Thread執(zhí)行各所述組件的啟動(dòng)操作;
[0159]第四構(gòu)造單元,用于分別為各所述組件構(gòu)造一個(gè)加載安卓安裝包loaded APK對(duì)象。
[0160]B12、如Bll所述的裝置,所述第四構(gòu)造單元,具體用于通過反射機(jī)制反射Activity Thread里的packageinfo,以分別為各所述組件構(gòu)造一個(gè)加載安卓安裝包loadedAPK對(duì)象。
[0161]B13、如Bll所述的裝置,當(dāng)所述應(yīng)用程序?yàn)樾璋惭b自校驗(yàn)的應(yīng)用程序時(shí),所述構(gòu)造模塊,還包括:
[0162]接管單元,用于通過反射機(jī)制或鉤子hook函數(shù)接管所述應(yīng)用程序運(yùn)行時(shí)所需的安裝自校驗(yàn)操作。
[0163]?B13中任一項(xiàng)所述的裝置,所述第一構(gòu)造單元,具體用于:
[0164]對(duì)資源類的構(gòu)造函數(shù)中的成員變量massets進(jìn)行修改,以在啟動(dòng)各所述組件時(shí)通過所述massets來調(diào)取相應(yīng)的資源;和/或
[0165]對(duì)資源管理器Asset Manager中的Asset Path函數(shù)進(jìn)行修改,修改后的所述Asset Path函數(shù)指向所述應(yīng)用程序安裝包中的資源文件,以在啟動(dòng)各所述組件時(shí)通過所述Asset Manager調(diào)取所述Asset Path函數(shù)來獲取所述資源文件中的對(duì)應(yīng)資源。
[0166]B15、如Bll?B13中任一項(xiàng)所述的裝置,所述第二構(gòu)造單元,具體用于:
[0167]將所述應(yīng)用程序的路徑添加到類加載器中的路徑列表pathlist中,構(gòu)造根據(jù)所述應(yīng)用程序路徑查找加載類的類加載器;和/或
[0168]對(duì)類加載器中的m parent成員進(jìn)行修改,構(gòu)造首先用parent找加載類的類加載器。
[0169]B16、如BlO?B13中任一項(xiàng)所述的裝置,所述運(yùn)行模塊,包括:
[0170]第一運(yùn)行單元,用于當(dāng)加載的所述組件為活動(dòng)Activity組件、廣播接收者Broadcast Receiver組件或服務(wù)Service組件時(shí),在應(yīng)用程序管理服務(wù)PMS查驗(yàn)之前,將所述組件修改為已安裝應(yīng)用程序中的對(duì)應(yīng)組件,并在PMS根據(jù)所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件查驗(yàn)通過后,再次將所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件修正回所述組件,啟動(dòng)所述組件;
[0171]第二運(yùn)行單元,用于當(dāng)加載的所述組件為內(nèi)容提供者Content Provider組件時(shí),通過反射機(jī)制調(diào)用所述Content Provider組件;
[0172]其中,所述第一運(yùn)行單元,包括:
[0173]第一修改子單元,用于在應(yīng)用程序管理服務(wù)PMS查驗(yàn)之前,將所述組件的第一查驗(yàn)參數(shù)修改為所述已安裝應(yīng)用程序中對(duì)應(yīng)組件的第二查驗(yàn)參數(shù);
[0174]第二修改子單元,用于在PMS根據(jù)所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件查驗(yàn)通過后,將修改后的所述組件的第二查驗(yàn)參數(shù)改回所述第一查驗(yàn)參數(shù),并啟動(dòng)所述組件。
[0175]B17、如B16所述的裝置,所述第一修改子單元,具體用于:
[0176]當(dāng)所述組件為activity組件時(shí),調(diào)用StartActivityO,將所述activity組件的第一查驗(yàn)參數(shù)修改為已安裝應(yīng)用程序預(yù)先申明的activity組件的第二查驗(yàn)參數(shù),活動(dòng)管理服務(wù)ASM解析出修改后的所述activity組件的第二查驗(yàn)參數(shù),并將所述第二查驗(yàn)參數(shù)傳至所述PMS等待查驗(yàn);
[0177]當(dāng)所述組件為Broadcast Receiver組件時(shí),調(diào)用sendbroadcast O,將所述Broadcast Receiver組件的第一查驗(yàn)參數(shù)修改為已安裝應(yīng)用程序預(yù)先申明的BroadcastReceiver組件的第二查驗(yàn)參數(shù),ASM解析出修改后的所述Broadcast Receiver組件的第二查驗(yàn)參數(shù),并將所述第二查驗(yàn)參數(shù)傳至所述PMS等待查驗(yàn);
[0178]當(dāng)所述組件為Service組件時(shí),調(diào)用startservice O或bindservice O ,將所述Service組件的第一查驗(yàn)參數(shù)修改為已安裝應(yīng)用程序預(yù)先申明的Service組件的第二查驗(yàn)參數(shù),ASM解析出修改后的所述Service組件的第二查驗(yàn)參數(shù),并將所述第二查驗(yàn)參數(shù)傳至所述PMS等待查驗(yàn)。
[0179]本發(fā)明還公開了 C18、一種移動(dòng)終端,包括:上述的BlO?B17中任一項(xiàng)所述的基于安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的裝置。
【權(quán)利要求】
1.一種基于安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的方法,其特征在于,包括: 獲取應(yīng)用程序安裝包中包含的各組件; 構(gòu)造所述應(yīng)用程序運(yùn)行所需的運(yùn)行環(huán)境; 在所述運(yùn)行環(huán)境下,分別加載各所述組件; 若加載的所述組件為活動(dòng)Activity組件、廣播接收者Broadcast Receiver組件或服務(wù)Service組件,則在應(yīng)用程序管理服務(wù)PMS查驗(yàn)之前,將所述組件修改為已安裝應(yīng)用程序中的對(duì)應(yīng)組件,并在PMS根據(jù)所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件查驗(yàn)通過后,再次將所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件修正回所述組件,啟動(dòng)所述組件; 若加載的所述組件為內(nèi)容提供者Content Provider組件,則通過反射機(jī)制調(diào)用所述Content Provider 組件。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述構(gòu)造所述應(yīng)用程序運(yùn)行所需的運(yùn)行環(huán)境,包括: 構(gòu)造所述應(yīng)用程序運(yùn)行所需的資源環(huán)境,以在啟動(dòng)各所述組件時(shí)調(diào)取相應(yīng)的資源; 構(gòu)造類加載器,以加載各所述組件中的相應(yīng)加載類; 構(gòu)造主線程Activity Thread,以使所述Activity Thread執(zhí)行各所述組件的啟動(dòng)操作; 分別為各所述組件構(gòu)造一個(gè)加載安卓安裝包loaded APK對(duì)象。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述分別為各所述組件構(gòu)造一個(gè)加載安卓安裝包loaded APK對(duì)象,包括: 通過反射機(jī)制反射Activity Thread里的packageinfo,以分別為各所述組件構(gòu)造一個(gè)加載安卓安裝包loaded APK對(duì)象。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于, 若所述應(yīng)用程序?yàn)樾璋惭b自校驗(yàn)的應(yīng)用程序,則所述構(gòu)造所述應(yīng)用程序運(yùn)行所需的運(yùn)行環(huán)境,還包括: 通過反射機(jī)制或鉤子hook函數(shù)接管所述應(yīng)用程序運(yùn)行時(shí)所需的安裝自校驗(yàn)操作。
5.根據(jù)權(quán)利要求1?4中任一項(xiàng)所述的方法,其特征在于,所述在PMS查驗(yàn)之前,將所述組件修改為已安裝應(yīng)用程序中的對(duì)應(yīng)組件,并在PMS根據(jù)所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件查驗(yàn)通過后,再次將所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件修正回所述組件,啟動(dòng)所述組件,包括: 在應(yīng)用程序管理服務(wù)PMS查驗(yàn)之前,將所述組件的第一查驗(yàn)參數(shù)修改為所述已安裝應(yīng)用程序中對(duì)應(yīng)組件的第二查驗(yàn)參數(shù); 在PMS根據(jù)所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件查驗(yàn)通過后,將修改后的所述組件的第二查驗(yàn)參數(shù)改回所述第一查驗(yàn)參數(shù),并啟動(dòng)所述組件。
6.一種基于安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的裝置,其特征在于,包括: 獲取模塊,用于獲取應(yīng)用程序安裝包中包含的各組件; 構(gòu)造模塊,用于構(gòu)造所述應(yīng)用程序運(yùn)行所需的運(yùn)行環(huán)境; 加載模塊,用于在所述運(yùn)行環(huán)境下,分別加載各所述組件; 運(yùn)行模塊,當(dāng)加載的所述組件為活動(dòng)Activity組件、廣播接收者Broadcast Receiver組件或服務(wù)Service組件時(shí),在應(yīng)用程序管理服務(wù)PMS查驗(yàn)之前,將所述組件修改為已安裝應(yīng)用程序中的對(duì)應(yīng)組件,并在PMS根據(jù)所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件查驗(yàn)通過后,再次將所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件修正回所述組件,啟動(dòng)所述組件;當(dāng)加載的所述組件為內(nèi)容提供者ContentProvider組件時(shí),通過反射機(jī)制調(diào)用所述Content Provider組件。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述構(gòu)造模塊,包括: 第一構(gòu)造單元、用于構(gòu)造所述應(yīng)用程序運(yùn)行所需的資源環(huán)境,以在啟動(dòng)各所述組件時(shí)調(diào)取相應(yīng)的資源; 第二構(gòu)造單元,用于構(gòu)造類加載器,以加載各所述組件中的相應(yīng)加載類; 第三構(gòu)造單元,用于構(gòu)造主線程Activity Thread,以使所述Activity Thread執(zhí)行各所述組件的啟動(dòng)操作; 第四構(gòu)造單元,用于分別為各所述組件構(gòu)造一個(gè)加載安卓安裝包loaded APK對(duì)象。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,當(dāng)所述應(yīng)用程序?yàn)樾璋惭b自校驗(yàn)的應(yīng)用程序時(shí),所述構(gòu)造模塊,還包括: 接管單元,用于通過反射機(jī)制或鉤子hook函數(shù)接管所述應(yīng)用程序運(yùn)行時(shí)所需的安裝自校驗(yàn)操作。
9.根據(jù)權(quán)利要求6?8中任一項(xiàng)所述的裝置,其特征在于,所述運(yùn)行模塊,包括: 第一運(yùn)行單元,用于當(dāng)加載的所述組件為活動(dòng)Activity組件、廣播接收者BroadcastReceiver組件或服務(wù)Service組件時(shí),在應(yīng)用程序管理服務(wù)PMS查驗(yàn)之前,將所述組件修改為已安裝應(yīng)用程序中的對(duì)應(yīng)組件,并在PMS根據(jù)所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件查驗(yàn)通過后,再次將所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件修正回所述組件,啟動(dòng)所述組件; 第二運(yùn)行單元,用于當(dāng)加載的所述組件為內(nèi)容提供者Content Provider組件時(shí),通過反射機(jī)制調(diào)用所述Content Provider組件; 其中,所述第一運(yùn)行單元,包括: 第一修改子單元,用于在應(yīng)用程序管理服務(wù)PMS查驗(yàn)之前,將所述組件的第一查驗(yàn)參數(shù)修改為所述已安裝應(yīng)用程序中對(duì)應(yīng)組件的第二查驗(yàn)參數(shù); 第二修改子單元,用于在PMS根據(jù)所述已安裝應(yīng)用程序中的對(duì)應(yīng)組件查驗(yàn)通過后,將修改后的所述組件的第二查驗(yàn)參數(shù)改回所述第一查驗(yàn)參數(shù),并啟動(dòng)所述組件。
10.一種移動(dòng)終端,其特征在于,包括:上述權(quán)利要求6?9中任一項(xiàng)所述的基于安卓平臺(tái)的應(yīng)用程序免安裝運(yùn)行的裝置。
【文檔編號(hào)】G06F9/445GK104375861SQ201410614467
【公開日】2015年2月25日 申請(qǐng)日期:2014年11月4日 優(yōu)先權(quán)日:2014年11月4日
【發(fā)明者】楊威, 蔣旭憲 申請(qǐng)人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
余庆县| 张北县| 宣威市| 丰台区| 庄河市| 梁平县| 轮台县| 东至县| 南通市| 施秉县| 宁晋县| 金溪县| 肇庆市| 洱源县| 精河县| 洛宁县| 襄垣县| 吐鲁番市| 玉溪市| 九龙坡区| 海盐县| 綦江县| 金昌市| 都江堰市| 赣州市| 布尔津县| 建德市| 垣曲县| 焦作市| 炎陵县| 名山县| 措勤县| 三台县| 长乐市| 同德县| 余干县| 泸州市| 元江| 崇文区| 丽水市| 乾安县|