應用程序運行控制的方法及裝置的制造方法
【專利摘要】本發明提供了應用程序運行控制的方法及裝置,該方法包括:響應于啟動目標應用程序的操作指令,運行目標應用程序,其中,目標應用程序的運行包名不同于原生應用程序的運行包名;當目標應用程序通過調用其所需系統資源執行相應的運行操作時,將目標應用程序的運行包名修改為原生應用程序的運行包名;將所需系統資源分配至修改運行包名后的目標應用程序,以執行目標應用程序的相應運行操作。通過本發明,從根本上實現各類目標應用程序在終端設備中正常運行的目的;同時,在保證目標應用程序與原生應用程序分別獨立運行互不干擾的同時,實現了目標應用程序具有原生應用程序的所有功能的目的。
【專利說明】
應用程序運行控制的方法及裝置
技術領域
[0001]本發明涉及計算機技術領域,具體而言,本發明涉及一種應用程序運行控制的方法,及一種應用程序運行控制的裝置。
【背景技術】
[0002]隨著時代的發展,各種終端設備已成為人們生活中必不可少的工具,各種功能強大的終端操作系統及終端應用程序不斷涌現,為用戶帶來了更加便捷的體驗。現有技術中,應用程序在終端設備的系統環境中僅可以唯一的形式安裝并運行,如對于一種即時通信類應用程序,在一臺終端設備中僅可以安裝并運行一個該即時通信類應用程序,用戶僅可以通過唯一的賬號登錄并對其執行相關操作。但是,隨著即時通信類應用程序的普及,越來越多的用戶希望在一臺終端設備中通過多個賬號登錄一種即時通信類應用程序以實現對不同好友信息的區分管理及交流。現有技術中,具有通過多個域賬號在不同操作系統之間的切換來實現在一臺終端設備中通過多個賬號登錄一種即時通信類應用程序的解決方案。但是,該方案是基于多操作系統才可以實現,并不具有普適性。
[0003]同時,現有技術中還可以利用沙箱技術,使得目標應用程序可實現原生應用程序的全部功能及相應服務,但是,在沙箱中運行的目標應用程序依賴于原生應用程序的運行,無法獨立于原生應用程序獨自運行于終端設備中,另一種方式是通過修改應用程序配置文件的包名實現雙開技術,但是,該方式無法實現所有種類應用程序的雙開,比如一些通過開發者注冊賬號的應用程序。
[0004]因此,需要一種控制目標應用程序運行的解決方案,使得各類目標應用程序可實現原生應用程序的全部功能及相應服務,且目標應用程序完全獨立于原生應用程序運行于終端設備中,以解決現有技術中在一臺終端設備中僅可以安裝并運行一個應用程序,用戶僅可以通過唯一的賬號登錄并對其執行相關操作帶來的局限性問題。
【發明內容】
[0005]為克服上述技術問題或者至少部分地解決上述技術問題,特提出以下技術方案:
[0006]本發明的實施例提出了一種應用程序運行控制的方法,包括:
[0007]響應于啟動目標應用程序的操作指令,運行目標應用程序,其中,目標應用程序的運行包名不同于原生應用程序的運行包名;
[0008]當目標應用程序通過調用其所需系統資源執行相應的運行操作時,將目標應用程序的運行包名修改為原生應用程序的運行包名;
[0009]將所需系統資源分配至修改運行包名后的目標應用程序,以執行目標應用程序的相應運行操作。
[0010]優選地,當目標應用程序通過調用其所需系統資源執行相應的運行操作時,將目標應用程序的運行包名修改為原生應用程序的運行包名,包括:
[0011]通過鉤子函數對目標應用程序的進程進行監控以掛鉤目標應用程序調用系統資源的資源名稱;
[0012]在調用系統資源的預設接口中,將目標應用程序的運行包名修改為原生應用程序的運行包名。
[0013]優選地,將目標應用程序的運行包名修改為原生應用程序的運行包名,包括:
[0014]在調用系統資源的預設接口中判斷預設接口的各參數是否帶有目標應用程序的運行包名;
[0015]若帶有,在調用系統資源的預設接口中將參數中帶有的目標應用程序的運行包名修改為原生應用程序的運行包名。
[0016]可選地,還包括:
[0017]創建目標應用程序寫入數據的存儲地址;
[0018]當目標應用程序執行數據寫入操作時,將數據相應地寫入目標應用程序寫入數據的存儲地址。
[0019]優選地,調用系統資源的預設接口,包括調用以下任一項與目標應用程序之間的交互接口:
[0020]Activity 組件;
[0021]Service 組件;
[0022]Broadcast Receiver組件;
[0023]Content Provider組件;
[0024]NotifyServer 中間件。
[0025]優選地,對應同一原生應用程序的運行包名的不同目標應用程序可具有不同的運行包名。
[0026]本發明的另一實施例提出了一種應用程序運行控制的裝置,包括:
[0027]運行模塊,用于響應于啟動目標應用程序的操作指令,運行目標應用程序,其中,目標應用程序的運行包名不同于原生應用程序的運行包名;
[0028]修改模塊,用于當目標應用程序通過調用其所需系統資源執行相應的運行操作時,將目標應用程序的運行包名修改為原生應用程序的運行包名;
[0029]執行模塊,用于將所需系統資源分配至修改運行包名后的目標應用程序,以執行目標應用程序的相應運行操作。
[0030 ]優選地,修改模塊,包括:
[0031 ] 掛鉤單元,用于通過鉤子函數對目標應用程序的進程進行監控以掛鉤目標應用程序調用系統資源的資源名稱;
[0032]修改單元,用于在調用系統資源的預設接口中,將目標應用程序的運行包名修改為原生應用程序的運行包名。
[0033]優選地,修改單元,包括:
[0034]判斷子單元,用于在調用系統資源的預設接口中判斷預設接口的各參數是否帶有目標應用程序的運行包名;
[0035]修改子單元,用于若帶有,在調用系統資源的預設接口中將參數中帶有的目標應用程序的運行包名修改為原生應用程序的運行包名。
[0036]可選地,還包括:
[0037]創建模塊,用于創建目標應用程序寫入數據的存儲地址;
[0038]寫入模塊,用于當目標應用程序執行數據寫入操作時,將數據相應地寫入目標應用程序寫入數據的存儲地址。
[0039]優選地,調用系統資源的預設接口,包括調用以下任一項與目標應用程序之間的交互接口:
[0040]Activity 組件;
[0041]Service 組件;
[0042]Broadcast Receiver組件;
[0043]Content Provider組件;
[0044]NotifyServer 中間件。
[0045]優選地,對應同一原生應用程序的運行包名的不同目標應用程序可具有不同的運行包名。
[0046]本發明的實施例中,提出了一種應用程序運行控制的方案,響應于啟動目標應用程序的操作指令,運行目標應用程序,其中,目標應用程序的運行包名不同于原生應用程序的運行包名,為目標應用程序獨立于原生應用程序在終端設備中正常的運行提供了必要的前提保障;當目標應用程序通過調用其所需系統資源執行相應的運行操作時,將目標應用程序的運行包名修改為原生應用程序的運行包名,通過在系統調用資源的過程中修改目標應用程序的運行包名,保障了各類目標應用程序均可實現在終端設備中的正常運行,避免了因開發者注冊信息等原因導致目標應用程序無法實現在終端設備中運行的情況,從根本上實現各類目標應用程序在終端設備中正常運行的目的;將所需系統資源分配至修改運行包名后的目標應用程序,以執行目標應用程序的相應運行操作,最終實現目標應用程序在終端設備中正常運行,在保證目標應用程序與原生應用程序分別獨立運行互不干擾的同時,實現了目標應用程序具有原生應用程序的所有功能的目的;進一步地,突破了原生應用程序在同一終端設備中僅可使用唯一的賬戶進行登錄使用的局限,提高了用戶體驗。
[0047]本發明附加的方面和優點將在下面的描述中部分給出,這些將從下面的描述中變得明顯,或通過本發明的實踐了解到。
【附圖說明】
[0048]本發明上述的和/或附加的方面和優點從下面結合附圖對實施例的描述中將變得明顯和容易理解,其中:
[0049]圖1為本發明中一個實施例的應用程序運行控制的方法的流程圖;
[0050]圖2為本發明中一個優選實施例的應用程序運行控制的方法的流程圖;
[0051 ]圖3a、圖3b和圖3c為本發明中一個具體應用場景下的應用程序運行控制的方法的示意圖;
[0052]圖4為本發明中另一實施例的應用程序運行控制的裝置的結構示意圖;
[0053]圖5為本發明中另一優選實施例的應用程序運行控制的裝置的結構示意圖。
【具體實施方式】
[0054]下面詳細描述本發明的實施例,所述實施例的示例在附圖中示出,其中自始至終相同或類似的標號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施例是示例性的,僅用于解釋本發明,而不能解釋為對本發明的限制。
[0055]本技術領域技術人員可以理解,除非特意聲明,這里使用的單數形式“一”、“一個”、“所述”和“該”也可包括復數形式。應該進一步理解的是,本發明的說明書中使用的措辭“包括”是指存在所述特征、整數、步驟、操作、元件和/或組件,但是并不排除存在或添加一個或多個其他特征、整數、步驟、操作、元件、組件和/或它們的組。應該理解,當我們稱元件被“連接”或“耦接”到另一元件時,它可以直接連接或耦接到其他元件,或者也可以存在中間元件。此外,這里使用的“連接”或“親接”可以包括無線連接或無線耦接。這里使用的措辭“和/或”包括一個或更多個相關聯的列出項的全部或任一單元和全部組合。
[0056]本技術領域技術人員可以理解,除非另外定義,這里使用的所有術語(包括技術術語和科學術語),具有與本發明所屬領域中的普通技術人員的一般理解相同的意義。還應該理解的是,諸如通用字典中定義的那些術語,應該被理解為具有與現有技術的上下文中的意義一致的意義,并且除非像這里一樣被特定定義,否則不會用理想化或過于正式的含義來解釋。
[0057]本發明下述實施例描述的應用程序運行控制方法所實施的應用場景,是安裝在移動終端上的基于Android操作系統的運行環境,且該運行環境允許應用程序修改Android操作系統的系統源碼。
[0058]圖1為本發明中一個實施例的應用程序運行控制的方法的流程圖。
[0059]本發明的實施例中,各步驟所執行的內容概述如下:步驟S110:響應于啟動目標應用程序的操作指令,運行目標應用程序,其中,目標應用程序的運行包名不同于原生應用程序的運行包名;步驟S120:當目標應用程序通過調用其所需系統資源執行相應的運行操作時,將目標應用程序的運行包名修改為原生應用程序的運行包名;步驟S130:將所需系統資源分配至修改運行包名后的目標應用程序,以執行目標應用程序的相應運行操作。
[0060]本發明的實施例中,提出了一種應用程序運行控制的方法,響應于啟動目標應用程序的操作指令,運行目標應用程序,其中,目標應用程序的運行包名不同于原生應用程序的運行包名,為目標應用程序獨立于原生應用程序在終端設備中正常的運行提供了必要的前提保障;當目標應用程序通過調用其所需系統資源執行相應的運行操作時,將目標應用程序的運行包名修改為原生應用程序的運行包名,通過在系統調用資源的過程中修改目標應用程序的運行包名,保障了各類目標應用程序均可實現在終端設備中的正常運行,避免了因開發者注冊信息等原因導致目標應用程序無法實現在終端設備中運行的情況,從根本上實現各類目標應用程序在終端設備中正常運行的目的;將所需系統資源分配至修改運行包名后的目標應用程序,以執行目標應用程序的相應運行操作,最終實現目標應用程序在終端設備中正常運行,在保證目標應用程序與原生應用程序分別獨立運行互不干擾的同時,實現了目標應用程序具有原生應用程序的所有功能的目的;進一步地,突破了原生應用程序在同一終端設備中僅可使用唯一的賬戶進行登錄使用的局限,提高了用戶體驗。以下針對各個步驟的具體實現做進一步的說明:
[0061]步驟S110:響應于啟動目標應用程序的操作指令,運行目標應用程序,其中,目標應用程序的運行包名不同于原生應用程序的運行包名。
[0062]其中,對應同一原生應用程序的運行包名的不同目標應用程序可具有不同的運行包名。例如,在終端設備中,可運行多個具有不同運行包名的目標應用程序,該多個具有不同運行包名的目標應用程序對應同一原生應用程序的運行包名。
[0063]具體地,在終端設備中,響應于啟動目標應用程序的操作指令,運行目標應用程序,其中,目標應用程序的運行包名不同于原生應用程序的運行包名,目標應用程序與原生應用程序可在終端設備中同時運行,且原生目標應用程序與其對應的原生應用程序讀取相同的系統可讀和系統只讀文件。
[0064]Android操作系統有其不同于其他操作系統的原理,Android為開發者提供四大組件,具體指Activity、Service、Broadcast Receiver以及Content Provider等組件。Android應用程序以APK安裝包的形式提供給用戶進行安裝,APK安裝包中,具有用于封裝實現各個組件的程序代碼的classes, dex代碼文件以及用于表達應用程序所用的各個組件的注冊信息以及權限申請信息等內容的Androidmanifest.xml配置文件。
[0065]Android對進程的管理,以包名為單位,每個應用程序分配一個唯一的包名,由于應用程序的安裝過程就是PackageManagerServi ce (PMS)解析Androidmanifest.xml文件的過程,而本發明中目標應用程序的包名不同于原生應用程序的包名,因此,當本地已安裝原生應用程序的情況下,目標應用程序也可同時安裝在本地,實現通過ActivityManagerService(AMS)正常運行目標應用程序。在Android操作系統中,PMS主要負責對系統的所有apk進行管理,管理其中的如Acti viey、Service等組件,從apk中解析其中的組件,保存到相關結構中后,可以通過相關的接口查詢系統安裝組件,apk的安裝,卸載,刪除都是由PMS負責的。在Android操作系統中,AMS不僅用于管理所有應用程序進程的Activity的生命周期,它同時也管理著系統的Service、Broadcast Receiver以及ContentProvider等組件,在應用程序中啟動一個六(:1:;^;^7的方式包括通過調用8〖31^4(31:;^;^7方法啟動指定的Activity和單擊一個應用程序的圖標來啟動新的Activity等。
[0066]例如,在終端設備中,響應于用戶啟動目標應用程序Appl’的操作指令,如檢測到用戶雙擊AppI’的圖標的操作,運行AppI’,AppI’的圖標可以與原生目標應用程序AppI的圖標不同,其中,目標應用程序Appl’的運行包名,如“com.AA.mm.1”,不同于原生應用程序AppI的運行包名,如“com.AA.mm”,App I,與App I可在終端設備中同時運行,且App I,與AppI共享終端設備的系統可讀文件以及系統的只讀文件,其中終端設備的系統可讀文件以及系統的只讀文件包括Activity、Service、Broadcast Receiver、Content Provider以及PMS等的可讀、只讀文件。
[0067]步驟S120:當目標應用程序通過調用其所需系統資源執行相應的運行操作時,將目標應用程序的運行包名修改為原生應用程序的運行包名。
[0068]具體地,當目標應用程序Appl,通過調用其所需系統資源執行相應的運行操作時,目標應用程序的運行包名為“com.AA.mm.1”對應的原生應用程序App I的運行包名為“com.AA.mm”,將AppI ’ 的運行包名 “com.AA.mm.1”修改為AppI的運行包名 “com.AA.mm”。
[0069]優選地,步驟S120具體包括步驟SI21 (圖中未示出)和步驟S122(圖中未示出);步驟S121:通過鉤子函數對目標應用程序的進程進行監控以掛鉤目標應用程序調用系統資源的資源名稱;步驟S122:在調用系統資源的預設接口中,將目標應用程序的運行包名修改為原生應用程序的運行包名。
[0070]其中,調用系統資源的預設接口,包括但不限于調用以下任一項與目標應用程序之間的交互接口:
[0071]Activity 組件;
[0072]Service 組件;
[0073]Broadcast Receiver組件;
[0074]Content Provider組件;
[0075]NotifyServer 中間件。
[0076]這里需要說明的是:術語“鉤子”涵蓋了用于通過攔截在軟件組件之間傳遞的函數調用、消息、或事件來改變或增加操作系統、應用程序、或其他軟件組件的行為的技術。而處理這種被攔截的函數調用、事件或消息的代碼就被稱為鉤子hook函數。鉤子通常用于各種目標,包括對功能進行調試和對功能進行擴展。其示例可以包括在鍵盤或鼠標事件傳遞到應用程序之前攔截它們,或者攔截系統調用(system call)、或者系統函數行為、函數執行結果等,以監視或修改應用程序或其他組件的功能等等。本實施例即可采用鉤子hook函數接管目標應用程序運行時調用所需的系統資源執行相應的運行操作,需要說明的是,本發明中接管目標應用程序運行時調用所需的系統資源執行相應的運行操作不局限于通過鉤子hook函數的方式實現。
[0077]例如,在終端設備中,響應于用戶啟動目標應用程序Appl’的操作指令,如檢測到用戶雙擊Appl,的圖標的操作,運行Appl ’,其中,Appl,的運行包名“com.AA.mm.1”不同于原生應用程序App I的運行包名“com.AA.mm”,在App I的運行過程中,通過鉤子函數對已創建的Appl ’的進程進行監控,當Appl ’請求調用資源時,鉤子函數可掛鉤Appl ’調用資源的資源名稱,得到Appl,調用資源的資源名稱為Activity組件中的start Activity方法;隨后通過預設的調用Activity組件資源的接口與Activity組件進行數據交互,在數據交互的過程中,將AppI ’ 的運行包名 “com.AA.mm.1”修改為 “com.AA.mm”。
[0078]在一優選實施例中,步驟S122具體包括步驟S1221(圖中未示出)和步驟S1222(圖中未示出);步驟S1221:在調用系統資源的預設接口中判斷預設接口的各參數是否帶有目標應用程序的運行包名;步驟S1222:若帶有,在調用系統資源的預設接口中將參數中帶有的目標應用程序的運行包名修改為原生應用程序的運行包名。
[0079]例如,在終端設備中,響應于用戶啟動目標應用程序Appl’的操作指令,如檢測到用戶雙擊Appl,的圖標的操作,運行Appl ’,其中,Appl,的運行包名“com.AA.mm.1”不同于原生應用程序App I的運行包名“com.AA.mm”,在App I的運行過程中,通過鉤子函數對已創建的Appl ’的進程進行監控,當Appl ’請求調用資源時,鉤子函數可掛鉤Appl ’調用資源的資源名稱,得到Appl ’調用資源的資源名稱為Activity組件中的start Activity方法;在預設調用Activity組件資源的接口中,當通過創建一個顯示的Intent對象中的CompomentName方法顯不調用Acti vity 中的 startActi vity 方法時,CompomentName 方法中包括了 packageName參數,packageName參數為調用的包名,本實施例中,具體值為“com.AA.mm.1”,Intent對象作為Activity之間傳遞數據的組件,通過Intent對象將數據封裝起來,傳遞到Appl’需要傳遞的Activity中,通過AMS中的startActivity方法傳遞Intent對象,根據Intent對象的信息找到匹配的Component信息,AMS會調用系統內部的PackageManager對象去查詢具體的CompomentName方法,在AMS中包括了預設對應的修改包名的處理方法,將compomentName方法中的packName參數值“com.AA.mm.I”修改為“com.AA.mm”,實現最終調用系統的Act i vi ty組件。在調用其他系統資源組件時,還涉及到修改相應的結構體,在相應的結構體中將對應包名值“com.AA.mm.1”修改為“com.AA.mm”。
[0080]步驟S130:將所需系統資源分配至修改運行包名后的目標應用程序,以執行目標應用程序的相應運行操作。
[0081 ]具體地,將所需系統資源分配至修改運行包名后的目標應用程序,以執行目標應用程序調用所需系統資源的操作。
[0082]例如,接上例,將Appl’所需的系統Activity資源根據Appl,的包名分配至Appl,,此時Appl ’的包名為“com.AA.mm”,隨后執行Appl ’的相應運行操作。
[0083]在一優選實施例中,如圖2所示,該方法包括步驟S210、步驟S220、步驟S230、步驟S240和步驟S250;步驟S210:響應于啟動目標應用程序的操作指令,運行目標應用程序,其中,目標應用程序的運行包名不同于原生應用程序的運行包名;步驟S220:當目標應用程序通過調用其所需系統資源執行相應的運行操作時,將目標應用程序的運行包名修改為原生應用程序的運行包名;步驟S230:將所需系統資源分配至修改運行包名后的目標應用程序,以執行目標應用程序的相應運行操作;步驟S240:創建目標應用程序寫入數據的存儲地址;步驟S250:當目標應用程序執行數據寫入操作時,將數據相應地寫入目標應用程序寫入數據的存儲地址。
[0084]其中,本優選實施例中終端設備在步驟S210、步驟S220和步驟S230中執行的操作與參照圖1所示的終端設備在步驟S110、步驟S120和步驟S130中執行的操作相同或相似,在此不再贅述。
[0085]例如,在終端設備中,創建目標應用程序Appl,寫入數據的存儲地址,如創建Appl,寫入數據的存儲地址的路徑為“:/sdcard/AA/MicroMsg/”,當Appl’執行數據寫入操作時,將數據相應地寫入Appl ’中的寫入數據的存儲地址目錄為“:/sdcard/AA/MicroMsg/”中的MicroMsg文件夾里。
[0086]在一具體應用場景中,用戶可在終端設備中同時運行兩個“微信”的應用程序,如圖3a,兩個“微信”的圖標相同,其中一個“微信”A是通過運行騰訊官方下載的微信安裝包創建的,另一個“微信”B通過本發明的實施方式創建的,兩個“微信”進程分別用于登錄不同的微信賬號,如圖3b,一個“微信”的登錄賬戶為“al in”,假設該微信為“微信” A,另一個“微信”的登錄賬戶為“鄭勁松”,假設該微信為“微信”B,兩個微信互不影響,可同時與外界進行通信,也可互相通信,如圖3c,B可實現A中的所有功能,且當用戶卸載A后,并不影響B的正常運行,其中“微信” A的運行包名如“com.ten cent.mm”,“微信” B的運行包名如“com.tencent.mm.1”,當檢測到用戶雙擊“微信”B的圖標的操作時,在終端設備中以“com.tencent.mm.1”運行包名運行“微信” B,在“微信” B的運行過程中,通過鉤子函數對已創建的“微信”B的進程進行監控,當“微信”B請求調用資源時,鉤子函數可掛鉤“微信”B調用資源的資源名稱,隨后通過預設的調用該系統資源的接口與該系統資源進行數據交互,在數據交互的過程中,將“微信”B的運行包名“com.tencent.mm.1”修改為“com.tencent.mm”,使得“微信”正常運行,同時,當“微信”B中發生數據寫入操作時,將數據寫入已創建的“微信” B的寫入數據的存儲地址,如將數據寫入“:/sdcard/Tencent/MicroMsg/”目錄中的MicroMsg文件夾里。
[0087]圖4為本發明中另一實施例的應用程序運行控制的裝置的結構示意圖。
[0088]本發明的實施例中,各模塊所執行的內容概述如下:運行模塊410響應于啟動目標應用程序的操作指令,運行目標應用程序,其中,目標應用程序的運行包名不同于原生應用程序的運行包名;修改模塊420當目標應用程序通過調用其所需系統資源執行相應的運行操作時,將目標應用程序的運行包名修改為原生應用程序的運行包名;執行模塊430將所需系統資源分配至修改運行包名后的目標應用程序,以執行目標應用程序的相應運行操作。
[0089]本發明的實施例中,提出了一種應用程序運行控制的裝置,響應于啟動目標應用程序的操作指令,運行目標應用程序,其中,目標應用程序的運行包名不同于原生應用程序的運行包名,為目標應用程序獨立于原生應用程序在終端設備中正常的運行提供了必要的前提保障;當目標應用程序通過調用其所需系統資源執行相應的運行操作時,將目標應用程序的運行包名修改為原生應用程序的運行包名,通過在系統調用資源的過程中修改目標應用程序的運行包名,保障了各類目標應用程序均可實現在終端設備中的正常運行,避免了因開發者注冊信息等原因導致目標應用程序無法實現在終端設備中運行的情況,從根本上實現各類目標應用程序在終端設備中正常運行的目的;將所需系統資源分配至修改運行包名后的目標應用程序,以執行目標應用程序的相應運行操作,最終實現目標應用程序在終端設備中正常運行,在保證目標應用程序與原生應用程序分別獨立運行互不干擾的同時,實現了目標應用程序具有原生應用程序的所有功能的目的;進一步地,突破了原生應用程序在同一終端設備中僅可使用唯一的賬戶進行登錄使用的局限,提高了用戶體驗。以下針對各個模塊的具體實現做進一步的說明:
[0090]運行模塊410響應于啟動目標應用程序的操作指令,運行目標應用程序,其中,目標應用程序的運行包名不同于原生應用程序的運行包名。
[0091]其中,對應同一原生應用程序的運行包名的不同目標應用程序可具有不同的運行包名。例如,在終端設備中,可運行多個具有不同運行包名的目標應用程序,該多個具有不同運行包名的目標應用程序對應同一原生應用程序的運行包名。
[0092]具體地,在終端設備中,響應于啟動目標應用程序的操作指令,運行目標應用程序,其中,目標應用程序的運行包名不同于原生應用程序的運行包名,目標應用程序與原生應用程序可在終端設備中同時運行,且原生目標應用程序與其對應的原生應用程序讀取相同的系統可讀和系統只讀文件。
[0093]Android操作系統有其不同于其他操作系統的原理,Android為開發者提供四大組件,具體指Activity、Service、Broadcast Receiver以及Content Provider等組件。Android應用程序以APK安裝包的形式提供給用戶進行安裝,APK安裝包中,具有用于封裝實現各個組件的程序代碼的classes, dex代碼文件以及用于表達應用程序所用的各個組件的注冊信息以及權限申請信息等內容的Androidmanifest.xml配置文件。
[0094]Android對進程的管理,以包名為單位,每個應用程序分配一個唯一的包名,由于應用程序的安裝過程就是PMS解析Androidmanifest.xml文件的過程,而本發明中目標應用程序的包名不同于原生應用程序的包名,因此,當本地已安裝原生應用程序的情況下,目標應用程序也可同時安裝在本地,實現通過AMS正常運行目標應用程序。在Android操作系統中,PMS主要負責對系統的所有apk進行管理,管理其中的如Activiey、Service等組件,從apk中解析其中的組件,保存到相關結構中后,可以通過相關的接口查詢系統安裝組件,apk的安裝,卸載,刪除都是由PMS負責的。在Android操作系統中,AMS不僅用于管理所有應用程序進程的Acti vity的生命周期,它同時也管理著系統的Service'Broadcast Receiver以及Content Provider等組件,在應用程序中啟動一個Acti vity的方式包括通過調用StartActivity方法啟動指定的Activity和單擊一個應用程序的圖標來啟動新的Activity等。
[0095]例如,在終端設備中,響應于用戶啟動目標應用程序Appl’的操作指令,如檢測到用戶雙擊AppI’的圖標的操作,運行AppI’,AppI’的圖標可以與原生目標應用程序AppI的圖標不同,其中,目標應用程序Appl’的運行包名,如“com.AA.mm.1”,不同于原生應用程序AppI的運行包名,如“com.AA.mm”,App I,與App I可在終端設備中同時運行,且App I,與AppI共享終端設備的系統可讀文件以及系統的只讀文件,其中終端設備的系統可讀文件以及系統的只讀文件包括Activity、Service、Broadcast Receiver、Content Provider以及PMS等的可讀、只讀文件。
[0096]修改模塊420當目標應用程序通過調用其所需系統資源執行相應的運行操作時,將目標應用程序的運行包名修改為原生應用程序的運行包名。
[0097]具體地,當目標應用程序Appl,通過調用其所需系統資源執行相應的運行操作時,目標應用程序的運行包名為“com.AA.mm.1”對應的原生應用程序App I的運行包名為“com.AA.mm”,將AppI ’ 的運行包名 “com.AA.mm.1”修改為AppI的運行包名 “com.AA.mm”。
[0098]優選地,修改模塊420具體包括掛鉤單元(圖中未示出)和修改單元(圖中未示出);掛鉤單元通過鉤子函數對目標應用程序的進程進行監控以掛鉤目標應用程序調用系統資源的資源名稱;修改單元在調用系統資源的預設接口中,將目標應用程序的運行包名修改為原生應用程序的運行包名。
[0099]其中,調用系統資源的預設接口,包括但不限于調用以下任一項與目標應用程序之間的交互接口:
[0100]Activity 組件;
[0101]Service 組件;
[0102]Broadcast Receiver組件;
[0103]Content Provider組件;
[0104]NotifyServer 中間件。
[0105]這里需要說明的是:術語“鉤子”涵蓋了用于通過攔截在軟件組件之間傳遞的函數調用、消息、或事件來改變或增加操作系統、應用程序、或其他軟件組件的行為的技術。而處理這種被攔截的函數調用、事件或消息的代碼就被稱為鉤子hook函數。鉤子通常用于各種目標,包括對功能進行調試和對功能進行擴展。其示例可以包括在鍵盤或鼠標事件傳遞到應用程序之前攔截它們,或者攔截系統調用(system call)、或者系統函數行為、函數執行結果等,以監視或修改應用程序或其他組件的功能等等。本實施例即可采用鉤子hook函數接管目標應用程序運行時調用所需的系統資源執行相應的運行操作,需要說明的是,本發明中接管目標應用程序運行時調用所需的系統資源執行相應的運行操作不局限于通過鉤子hook函數的方式實現。
[0106]例如,在終端設備中,響應于用戶啟動目標應用程序Appl’的操作指令,如檢測到用戶雙擊Appl,的圖標的操作,運行Appl ’,其中,Appl,的運行包名“com.AA.mm.1”不同于原生應用程序App I的運行包名“com.AA.mm”,在App I的運行過程中,通過鉤子函數對已創建的Appl ’的進程進行監控,當Appl ’請求調用資源時,鉤子函數可掛鉤Appl ’調用資源的資源名稱,得到Appl,調用資源的資源名稱為Activity組件中的start Activity方法;隨后通過預設的調用Activity組件資源的接口與Activity組件進行數據交互,在數據交互的過程中,將AppI ’ 的運行包名 “com.AA.mm.1”修改為 “com.AA.mm”。
[0107]在一優選實施例中,修改單元具體包括判斷子單元(圖中未示出)和修改子單元(圖中未示出);判斷子單元在調用系統資源的預設接口中判斷預設接口的各參數是否帶有目標應用程序的運行包名;修改子單元若帶有,在調用系統資源的預設接口中將參數中帶有的目標應用程序的運行包名修改為原生應用程序的運行包名。
[0108]例如,在終端設備中,響應于用戶啟動目標應用程序Appl’的操作指令,如檢測到用戶雙擊Appl,的圖標的操作,運行Appl ’,其中,Appl,的運行包名“com.AA.mm.1”不同于原生應用程序App I的運行包名“com.AA.mm”,在App I的運行過程中,通過鉤子函數對已創建的Appl ’的進程進行監控,當Appl ’請求調用資源時,鉤子函數可掛鉤Appl ’調用資源的資源名稱,得到Appl ’調用資源的資源名稱為Activity組件中的start Activity方法;在預設調用Activity組件資源的接口中,當通過創建一個顯示的Intent對象中的CompomentName方法顯不調用Acti vity 中的 startActi vity 方法時,CompomentName 方法中包括了 packageName參數,packageName參數為調用的包名,本實施例中,具體值為“com.AA.mm.1”,Intent對象作為Activity之間傳遞數據的組件,通過Intent對象將數據封裝起來,傳遞到Appl’需要傳遞的Activity中,通過AMS中的startActivity方法傳遞Intent對象,根據Intent對象的信息找到匹配的Component信息,AMS會調用系統內部的PackageManager對象去查詢具體的CompomentName方法,在AMS中包括了預設對應的修改包名的處理方法,將compomentName方法中的packName參數值“com.AA.mm.I”修改為“com.AA.mm”,實現最終調用系統的Act i vi ty組件。在調用其他系統資源組件時,還涉及到修改相應的結構體,在相應的結構體中將對應包名值“com.AA.mm.1”修改為“com.AA.mm”。
[0109]執行模塊430將所需系統資源分配至修改運行包名后的目標應用程序,以執行目標應用程序的相應運行操作。
[0110]具體地,將所需系統資源分配至修改運行包名后的目標應用程序,以執行目標應用程序調用所需系統資源的操作。
[0?11 ]例如,接上例,將Appl ’所需的系統Activity資源根據Appl ’的包名分配至Appl ’,此時Appl,的包名為“com.AA.mm”,隨后執行Appl,的相應運行操作。
[0112]在一優選實施例中,如圖5所不,該裝置包括運行模塊510、修改模塊520、執行模塊530、創建模塊540和寫入模塊550;運行模塊510響應于啟動目標應用程序的操作指令,運行目標應用程序,其中,目標應用程序的運行包名不同于原生應用程序的運行包名;修改模塊520當目標應用程序通過調用其所需系統資源執行相應的運行操作時,將目標應用程序的運行包名修改為原生應用程序的運行包名;執行模塊530將所需系統資源分配至修改運行包名后的目標應用程序,以執行目標應用程序的相應運行操作;創建模塊540創建目標應用程序寫入數據的存儲地址;寫入模塊550當目標應用程序執行數據寫入操作時,將數據相應地寫入目標應用程序寫入數據的存儲地址。
[0113]其中,本優選實施例中終端設備在運行模塊510、修改模塊520和執行模塊530中執行的操作與參照圖4所示的終端設備在運行模塊410、修改模塊420和執行模塊430中執行的操作相同或相似,在此不再贅述。
[0114]例如,在終端設備中,創建目標應用程序Appl’寫入數據的存儲地址,如創建AppI ’寫入數據的存儲地址的路徑為“:/sdcard/AA/MicroMsg/”,當Appl’執行數據寫入操作時,將數據相應地寫入Appl ’中的寫入數據的存儲地址目錄為“:/sdcard/AA/MicroMsg/”中的MicroMsg文件夾里。
[0115]在一具體應用場景中,用戶可在終端設備中同時運行兩個“微信”的應用程序,如圖3a,兩個“微信”的圖標相同,其中一個“微信”A是通過運行騰訊官方下載的微信安裝包創建的,另一個“微信”B通過本發明的實施方式創建的,兩個“微信”進程分別用于登錄不同的微信賬號,如圖3b,一個“微信”的登錄賬戶為“al in”,假設該微信為“微信” A,另一個“微信”的登錄賬戶為“鄭勁松”,假設該微信為“微信”B,兩個微信互不影響,可同時與外界進行通信,也可互相通信,如圖3c,B可實現A中的所有功能,且當用戶卸載A后,并不影響B的正常運行,其中“微信” A的運行包名如“com.tencent.mm”,“微信” B的運行包名如“com.tencent.mm.1”,當檢測到用戶雙擊“微信”B的圖標的操作時,在終端設備中以“com.tencent.mm.1”運行包名運行“微信” B,在“微信” B的運行過程中,通過鉤子函數對已創建的“微信”B的進程進行監控,當“微信”B請求調用資源時,鉤子函數可掛鉤“微信”B調用資源的資源名稱,隨后通過預設的調用該系統資源的接口與該系統資源進行數據交互,在數據交互的過程中,將“微信”B的運行包名“com.tencent.mm.1”修改為“com.tencent.mm”,使得“微信”正常運行,同時,當“微信”B中發生數據寫入操作時,將數據寫入已創建的“微信” B的寫入數據的存儲地址,如將數據寫入“:/sdcard/Tencent/MicroMsg/”目錄中的MicroMsg文件夾里。
[0116]本技術領域技術人員可以理解,本發明包括涉及用于執行本申請中所述操作中的一項或多項的設備。這些設備可以為所需的目的而專門設計和制造,或者也可以包括通用計算機中的已知設備。這些設備具有存儲在其內的計算機程序,這些計算機程序選擇性地激活或重構。這樣的計算機程序可以被存儲在設備(例如,計算機)可讀介質中或者存儲在適于存儲電子指令并分別耦聯到總線的任何類型的介質中,所述計算機可讀介質包括但不限于任何類型的盤(包括軟盤、硬盤、光盤、CD-ROM、和磁光盤)、R0M(Read-0nly Memory,只讀存儲器)、RAM (Random Access Memory,隨即存儲器)、EPR0M(Erasable ProgrammableRead-Only Memory,可擦寫可編程只讀存儲器)、EEPR0M(E1 ectricalIy ErasableProgrammable Read-Only Memory,電可擦可編程只讀存儲器)、閃存、磁性卡片或光線卡片。也就是,可讀介質包括由設備(例如,計算機)以能夠讀的形式存儲或傳輸信息的任何介質。
[0117]本技術領域技術人員可以理解,可以用計算機程序指令來實現這些結構圖和/或框圖和/或流圖中的每個框以及這些結構圖和/或框圖和/或流圖中的框的組合。本技術領域技術人員可以理解,可以將這些計算機程序指令提供給通用計算機、專業計算機或其他可編程數據處理方法的處理器來實現,從而通過計算機或其他可編程數據處理方法的處理器來執行本發明公開的結構圖和/或框圖和/或流圖的框或多個框中指定的方案。
[0118]本技術領域技術人員可以理解,本發明中已經討論過的各種操作、方法、流程中的步驟、措施、方案可以被交替、更改、組合或刪除。進一步地,具有本發明中已經討論過的各種操作、方法、流程中的其他步驟、措施、方案也可以被交替、更改、重排、分解、組合或刪除。進一步地,現有技術中的具有與本發明中公開的各種操作、方法、流程中的步驟、措施、方案也可以被交替、更改、重排、分解、組合或刪除。
[0119]以上所述僅是本發明的部分實施方式,應當指出,對于本技術領域的普通技術人員來說,在不脫離本發明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本發明的保護范圍。
【主權項】
1.一種應用程序運行控制的方法,包括: 響應于啟動目標應用程序的操作指令,運行所述目標應用程序,其中,所述目標應用程序的運行包名不同于原生應用程序的運行包名; 當所述目標應用程序通過調用其所需系統資源執行相應的運行操作時,將所述目標應用程序的運行包名修改為所述原生應用程序的運行包名; 將所需系統資源分配至修改運行包名后的所述目標應用程序,以執行所述目標應用程序的相應運行操作。2.根據權利要求1所述的方法,當所述目標應用程序通過調用其所需系統資源執行相應的運行操作時,將所述目標應用程序的運行包名修改為所述原生應用程序的運行包名,包括: 通過鉤子函數對所述目標應用程序的進程進行監控以掛鉤所述目標應用程序調用系統資源的資源名稱; 在調用系統資源的預設接口中,將所述目標應用程序的運行包名修改為所述原生應用程序的運行包名。3.根據權利要求2所述的方法,將所述目標應用程序的運行包名修改為所述原生應用程序的運行包名,包括: 在調用系統資源的預設接口中判斷所述預設接口的各參數是否帶有所述目標應用程序的運行包名; 若帶有,在調用系統資源的預設接口中將所述參數中帶有的所述目標應用程序的運行包名修改為所述原生應用程序的運行包名。4.根據權利要求1所述的方法,還包括: 創建所述目標應用程序寫入數據的存儲地址; 當所述目標應用程序執行數據寫入操作時,將數據相應地寫入所述目標應用程序寫入數據的存儲地址。5.根據權利要求2所述的方法,所述調用系統資源的預設接口,包括調用以下任一項與所述目標應用程序之間的交互接口: Activity 組件; Serv ice組件; Broadcast Receiver組件; Content Provider組件; NotifyServer 中間件。6.根據權利要求1所述的方法,對應同一原生應用程序的運行包名的不同目標應用程序可具有不同的運行包名。7.一種應用程序運行控制的裝置,包括: 運行模塊,用于響應于啟動目標應用程序的操作指令,運行所述目標應用程序,其中,所述目標應用程序的運行包名不同于原生應用程序的運行包名; 修改模塊,用于當所述目標應用程序通過調用其所需系統資源執行相應的運行操作時,將所述目標應用程序的運行包名修改為所述原生應用程序的運行包名; 執行模塊,用于將所需系統資源分配至修改運行包名后的所述目標應用程序,以執行所述目標應用程序的相應運行操作。8.根據權利要求7所述的裝置,所述修改模塊,包括: 掛鉤單元,用于通過鉤子函數對所述目標應用程序的進程進行監控以掛鉤所述目標應用程序調用系統資源的資源名稱; 修改單元,用于在調用系統資源的預設接口中,將所述目標應用程序的運行包名修改為所述原生應用程序的運行包名。9.根據權利要求8所述的裝置,所述修改單元,包括: 判斷子單元,用于在調用系統資源的預設接口中判斷所述預設接口的各參數是否帶有所述目標應用程序的運行包名; 修改子單元,用于若帶有,在調用系統資源的預設接口中將所述參數中帶有的所述目標應用程序的運行包名修改為所述原生應用程序的運行包名。10.根據權利要求7所述的裝置,還包括: 創建模塊,用于創建所述目標應用程序寫入數據的存儲地址; 寫入模塊,用于當所述目標應用程序執行數據寫入操作時,將數據相應地寫入所述目標應用程序寫入數據的存儲地址。
【文檔編號】G06F9/445GK106066803SQ201610353934
【公開日】2016年11月2日
【申請日】2016年5月25日 公開號201610353934.2, CN 106066803 A, CN 106066803A, CN 201610353934, CN-A-106066803, CN106066803 A, CN106066803A, CN201610353934, CN201610353934.2
【發明人】鄭勁松, 宋麗, 楊東, 李涓
【申請人】北京奇虎科技有限公司, 奇智軟件(北京)有限公司