應用程序運行控制的方法及裝置的制造方法
【專利摘要】本發明提供了一種應用程序運行控制的方法,包括:反射調用與宿主應用程序具有相同包名的作為宿主應用程序附帶資源的安裝包,以加載該安裝包所實現的目標應用程序,其中,目標應用程序的所需資源與原生應用程序的所需資源一一對應;通過鉤子函數對目標應用程序的活動進程進行監控;當通過鉤子函數監測到對目標應用程序的活動進程的調用指令時,調用與目標應用程序的所需資源一一對應的原生應用程序的所需資源。本發明還提供了一種應用程序運行控制的裝置。通過執行目標應用程序的相關資源,能夠實現與執行原生應用程序的相關資源完全相同的執行結果;且目標應用程序運行在通過宿主應用程序構建的沙箱中,其安裝及運行活動均不被系統所感知。
【專利說明】
應用程序運行控制的方法及裝置
技術領域
[0001]本發明涉及計算機技術領域,具體而言,本發明涉及一種應用程序運行控制的方法,及一種應用程序運行控制的裝置。
【背景技術】
[0002]隨著時代的發展,各種終端設備已成為人們生活中必不可少的工具,各種功能強大的終端操作系統及終端應用程序不斷涌現,為用戶帶來了更加便捷的體驗。現有技術中,應用程序在終端設備的系統環境中僅可以唯一的形式安裝并運行,即對于一種即時通信類應用程序,在一臺終端設備中僅可以安裝并運行一個該即時通信類應用程序,用戶僅可以通過唯一的賬號登錄并對其執行相關操作。但是,隨著即時通信類應用程序的普及,越來越多的用戶希望在一臺終端設備中通過多個賬號登錄一種即時通信類應用程序以實現對不同好友信息的區分管理及交流。現有技術中,具有通過多個域賬號在不同操作系統之間的切換來實現在一臺終端設備中通過多個賬號登錄一種即時通信類應用程序的解決方案。但是,該方案需要最高系統級別的權限且基于多操作系統才可以實現,并不具有普適性。
[0003]現有技術中,沙箱是一種按照安全策略限制程序行為的執行環境,目前已經廣泛實用于各種操作系統中。以Android為例,一些應用程序,出于實現應用程序固有功能需要之外的目的,特別是商業目的,隨意申請系統權限,獲取用戶隱私數據、執行網絡訪問、保持設備活動、發送短信行為等。輕則可能導致用戶隱私數據泄露,或者占用系統資源,重則可能通過惡意扣費、植入廣告、消耗資費、欺詐誘騙等,使用戶遭受損失。因此,通過沙箱技術提供的執行環境,由沙箱對系統的資源、權限進行管理,讓應用程序于該沙箱中運行,應用程序的訪問先經沙箱按安全策略進行審查,由此,形成一種相對于系統本身的隔離運行效果,可以有效地保護系統的安全。對于沙箱中所用到的安全策略,適應各種不同的操作系統有不同的細節考慮,這些有關技術實現的基本知識,均已為本領域技術人員所掌握,恕不贅述。
[0004]因此,需要一種通過沙箱技術來執行目標應用程序運行的解決方案,使得運行于沙箱中目標應用程序可實現原生應用程序的全部功能及相應服務。
【發明內容】
[0005]為克服上述技術問題或者至少部分地解決上述技術問題,特提出以下技術方案:
[0006]本發明的實施例提出了一種應用程序運行控制的方法,包括:
[0007]反射調用與宿主應用程序具有相同包名的作為宿主應用程序附帶資源的安裝包,以加載該安裝包所實現的目標應用程序,其中,所述目標應用程序的所需資源與原生應用程序的所屬資源對應;
[0008]通過鉤子函數對所述目標應用程序的活動進程進行監控;
[0009]當通過鉤子函數監測到對目標應用程序的活動進程的調用指令時,調用與所述目標應用程序的所屬資源一一對應的所述原生應用程序的所屬資源。
[0010]優選地,加載該安裝包所實現的目標應用程序的步驟,包括:
[0011]通過所述宿主應用程序,來建立所述目標應用程序的所需資源與原生應用程序的所需資源的一一對應關系。
[0012]優選地,建立所述目標應用程序的所需資源與原生應用程序的所需資源的一一對應關系,具體包括:
[0013]解析所述安裝包以確定目標應用程序的所屬資源的資源名;
[0014]根據目標應用程序的所屬資源的資源名,加載與原生應用程序的所需資源一一對應的資源。
[0015]優選地,所述目標應用程序包括預留擴展項,以用于與所述原生應用程序的擴展資源相匹配。
[0016]優選地,該方法還包括:檢測到所述原生應用程序的更新服務,基于所述目標應用程序的預留擴展項更新所述目標應用程序的所需資源。
[0017]其中,所述宿主應用程序的資源文件和/或動態庫文件與所述安裝包中的相應文件相同。
[0018]優選地,該方法還包括:
[0019]通過執行所述目標應用程序的所需資源,以實現與執行所述原生應用程序的所屬資源相同的執行結果。
[0020]其中,所述目標應用程序的所屬資源,包括以下至少任一項:[0021 ] ActivityManagerService 資源;
[0022]PackageManagerService 資源;
[0023]Activity 組件;
[0024]Service 組件;
[0025]Broadcast Receiver組件;
[0026]Content Provider組件。
[0027]本發明的另一實施例提出了一種應用程序運行控制的裝置,包括:
[0028]加載模塊,用于反射調用與宿主應用程序具有相同包名的作為宿主應用程序附帶資源的安裝包,以加載該安裝包所實現的目標應用程序,其中,所述目標應用程序的所需資源與原生應用程序的所需資源一一對應;
[0029]監控模塊,用于通過鉤子函數對所述目標應用程序的活動進程進行監控;
[0030]調用模塊,用于當通過鉤子函數監測到對目標應用程序的活動進程的調用指令時,調用與所述目標應用程序的所需資源一一對應的所述原生應用程序的所需資源。
[0031]優選地,所述加載模塊包括:
[0032]建立單元,用于通過所述宿主應用程序,來建立所述目標應用程序的所需資源與原生應用程序的所需資源的一一對應關系。[0〇33]優選地,所述建立單元具體包括:
[0034]解析子單元,用于解析所述安裝包以確定目標應用程序的所需資源的資源名;
[0035]加載子單元,用于根據目標應用程序的所需資源的資源名,加載與原生應用程序的所需資源一一對應的資源。
[0036]優選地,所述目標應用程序包括預留擴展項,以用于與所述原生應用程序的擴展資源相匹配。
[0037] 優選地,該裝置還包括:
[0038]更新模塊,用于檢測到所述原生應用程序的更新服務,基于所述目標應用程序的預留擴展項更新所述目標應用程序的所需資源。
[0039]其中,所述宿主應用程序的資源文件和/或動態庫文件與所述安裝包中的相應文件相同。
[0040] 優選地,還包括:[0041 ]實現模塊,用于通過執行所述目標應用程序的所需資源,以實現與執行所述原生應用程序的所需資源相同的執行結果。
[0042]其中,所述目標應用程序的所需資源,包括以下至少任一項:
[0043]ActivityManagerService 資源;
[0044]PackageManagerService 資源;
[0045]Activity 組件;
[0046]Service 組件;
[0047]Broadcast Receiver組件;
[0048]Content Provider組件。
[0049]本發明的實施例中,借助反射調用機制去加載與宿主應用程序具有相同包名的目標應用程序,由于與宿主應用程序具有相同的包名,在Android系統中,既能使活動組件和服務組件建立與ActivityManagerService的正常通信,又能使活動組件、服務組件以及廣播組件等,順利被PackageManagerService識別,降低現有技術中有關加殼應用程序運行異常的錯誤率;由于宿主應用程序與目標應用程序使用了相同的包名,不必為被反射調用的目標應用程序的各個組件(Activity,Service,Broadcast Receiver和Content Provider) 單獨構造主函數入口(ActivityThread.main),也不必考慮因包名而帶來的 PackageManagerService校驗的程序實現復雜度問題,從而大大提高程序運行效率;通過宿主應用程序中建立起原安裝包的目標應用程序與沙箱運行環境之間的通信,使得目標應用程序的活動過程可以進一步被沙箱運行環境監視,從而對其適用安全策略,并通過在宿主應用程序中建立目標應用程序的所需資源與原生應用程序的所需資源一一對應,可在宿主應用程序中通過鉤子函數調用目標應用程序的所需的對應資源,確保目標應用程序能被宿主應用程序正常加載并保持安全運行,且實現了目標應用程序完全獨立于原生應用程序。
[0050]本發明中,通過執行目標應用程序的相關資源,能夠實現與執行原生應用程序的相關資源完全相同的執行結果;且目標應用程序運行在通過宿主應用程序構建的沙箱中, 其安裝及運行活動均不被系統所感知,從而可以解決現有技術中,對于一種即時通信類應用程序,在一臺終端設備中僅可以安裝并運行一個該即時通信類應用程序,同時,用戶僅可以通過唯一的賬號登錄并對其執行相關操作的瓶頸。實現了用戶希望在一臺終端設備中通過多個賬號登錄一種即時通信類應用程序以實現對不同好友信息的區分管理及交流的實際應用目的。
[0051]本發明附加的方面和優點將在下面的描述中部分給出,這些將從下面的描述中變得明顯,或通過本發明的實踐了解到。【附圖說明】
[0052]本發明上述的和/或附加的方面和優點從下面結合附圖對實施例的描述中將變得明顯和容易理解,其中:
[0053]圖1為本發明中一個實施例的應用程序運行控制的方法的流程圖;
[0054]圖2為本發明中另一實施例的應用程序運行控制的裝置的結構示意圖。【具體實施方式】
[0055]下面詳細描述本發明的實施例,所述實施例的示例在附圖中示出,其中自始至終相同或類似的標號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施例是示例性的,僅用于解釋本發明,而不能解釋為對本發明的限制。
[0056]本技術領域技術人員可以理解,除非特意聲明,這里使用的單數形式“一”、“一個”、“所述”和“該”也可包括復數形式。應該進一步理解的是,本發明的說明書中使用的措辭“包括”是指存在所述特征、整數、步驟、操作、元件和/或組件,但是并不排除存在或添加一個或多個其他特征、整數、步驟、操作、元件、組件和/或它們的組。應該理解,當我們稱元件被“連接”或“耦接”到另一元件時,它可以直接連接或耦接到其他元件,或者也可以存在中間元件。此外,這里使用的“連接”或“親接”可以包括無線連接或無線耦接。這里使用的措辭“和/或”包括一個或更多個相關聯的列出項的全部或任一單元和全部組合。[〇〇57]本技術領域技術人員可以理解,除非另外定義,這里使用的所有術語(包括技術術語和科學術語),具有與本發明所屬領域中的普通技術人員的一般理解相同的意義。還應該理解的是,諸如通用字典中定義的那些術語,應該被理解為具有與現有技術的上下文中的意義一致的意義,并且除非像這里一樣被特定定義,否則不會用理想化或過于正式的含義來解釋。
[0058]本發明以下即將描述的一種應用程序運行控制方法和裝置所實施的應用場景,是安裝在移動終端上的基于Android操作系統的運行環境。[〇〇59]本領域技術人員應當知曉,本發明是基于免Root提權而提出的,然而,提權操作只是Andro i d系統所實施的權限管理控制,本發明也當然地適用于已經Root提權的Andro i d操作系統中。
[0060]本發明是基于沙箱原理而提出的,故而,本領域技術人員得以結合公知的沙箱實現原理來理解本發明的實施。沙箱的作用是為目標應用程序的提供相對封閉的運行環境, 使應用程序對系統的資源訪問,借助沙箱安全策略的應用,而被限制在規定的范圍之內。因而,本發明的實質在于提供一種沙箱實例,從兩個方面來實現,第一方面是提供構造目標應用程序的解決方案,第二方面是提供與前者相應的運行控制方案。這兩個方面可以被集成到一個沙箱實現軟件中,利用其第一方面的實現對目標應用程序進行加工,進而利用其第二方面的實現,為目標應用程序提供安全的沙箱運行環境。
[0061]有鑒于此,本發明的應用程序運行控制的方法,主要體現沙箱實例的第一方面,用于加工適配于相應的沙箱運行環境的目標應用程序。
[0062]圖1為本發明中一個實施例的應用程序運行控制的方法的流程圖。
[0063]其中,在發明的實施例中,目標應用程序為本發明需要實現的應用程序,實現的目標應用程序需要具有原生應用程序的全部功能,能夠提供與原生應用程序完全相同的服務。宿主應用程序是實現目標應用程序的加殼應用程序,通過宿主應用程序完成目標應用程序的安裝與運行。
[0064]步驟S110:反射調用與宿主應用程序具有相同包名的作為宿主應用程序附帶資源的安裝包,以加載該安裝包所實現的目標應用程序,其中,目標應用程序的所需資源與原生應用程序的所需資源一一對應;步驟S120:通過鉤子函數對目標應用程序的活動進程進行監控;步驟S130:當通過鉤子函數監測到對目標應用程序的活動進程的調用指令時,調用與目標應用程序的所需資源一一對應的原生應用程序的所需資源。
[0065]本發明的實施例中,借助反射調用機制去加載與宿主應用程序具有相同包名的目標應用程序,由于與宿主應用程序具有相同的包名,在Android系統中,既能使活動組件和服務組件建立與ActivityManagerService的正常通信,又能使活動組件、服務組件以及廣播組件等,順利被PackageManagerService識別,降低現有技術中有關加殼應用程序運行異常的錯誤率;由于宿主應用程序與目標應用程序使用了相同的包名,不必為被反射調用的目標應用程序的各個組件(Activity,Service,BroadcastReceiver和Content Provider) 單獨構造主函數入口(ActivityThread.main),也不必考慮因包名而帶來的 PackageManagerService校驗的程序實現復雜度問題,從而大大提高程序運行效率;通過宿主應用程序中建立起原安裝包的目標應用程序與沙箱運行環境之間的通信,使得目標應用程序的活動過程可以進一步被沙箱運行環境監視,從而對其適用安全策略,并通過在宿主應用程序中建立目標應用程序的所需資源與原生應用程序的所需資源一一對應,可在宿主應用程序中通過鉤子函數調用目標應用程序的所需的對應資源,確保目標應用程序能被宿主應用程序正常加載并保持安全運行,且實現了目標應用程序完全獨立于原生應用程序。
[0066]本發明中,通過執行目標應用程序的相關資源,能夠實現與執行原生應用程序的相關資源完全相同的執行結果;且目標應用程序運行在通過宿主應用程序構建的沙箱中, 其安裝及運行活動均不被系統所感知,從而可以解決現有技術中,對于一種即時通信類應用程序,在一臺終端設備中僅可以安裝并運行一個該即時通信類應用程序,同時,用戶僅可以通過唯一的賬號登錄并對其執行相關操作的瓶頸。實現了用戶希望在一臺終端設備中通過多個賬號登錄一種即時通信類應用程序以實現對不同好友信息的區分管理及交流的實際應用目的。
[0067]步驟S110:反射調用與宿主應用程序具有相同包名的作為宿主應用程序附帶資源的安裝包,以加載該安裝包所實現的目標應用程序,其中,目標應用程序的所需資源與原生應用程序的所需資源一一對應。
[0068]其中,目標應用程序的所需資源,包括但不限于:
[0069]ActivityManagerService 資源;
[0070]PackageManagerService 資源;
[0071]Activity 組件;
[0072]Service 組件;
[0073]Broadcast Receiver組件;
[0074]Content Provider組件。
[0075]其中,宿主應用程序的資源文件和/或動態庫文件與安裝包中的相應文件相同。
[0076]具體地,通過反射機制調用與宿主應用程序具有相同包名的作為宿主應用程序附帶資源的安裝包,隨后加載該安裝包所實現的目標應用程序,并將目標應用程序的所需全部資源與原生應用程序的所需全部資源一一對應。[〇〇77]Android操作系統有其不同于其他操作系統的原理,Android為開發者提供四大組件,具體指Activity、Service、Broadcast Receiver以及Content Provider等組件。 Android應用程序以APK安裝包的形式提供給用戶進行安裝,APK安裝包中,具有用于封裝實現各個組件的程序代碼的classes, dex代碼文件以及用于表達應用程序所用的各個組件的注冊信息以及權限申請信息等內容的Androidmanifest.xml配置文件。由于應用程序的安裝過程就是 PackageManager Serv i ce (PMS)解析 Andro i dman i f e s t ? xml 文件的過程,而本發明中應用程序安裝包沒有安裝在本地,因此無法得到應用程序的相關屬性信息,但只有獲取如Activity組件、Service組件、Broadcast Receiver組件、ContentProvider組件等信息時,才能通過ActivityManagerService(AMS)正常運行應用程序。
[0078]本實施例所采用的反射機制可以為Java反射機制,Java反射機制是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法;這種動態獲取信息以及動態調用對象的方法的功能即為JAVA語言的反射機制。[0〇79]通過反射機制,調用AssetManager中的addAssetPath方法,將宿主應用程序安裝文件中的資源加載到Resource中,通過Resource對象調用宿主應用程序安裝文件中的資源。在獲取宿主應用程序安裝文件資源之前,首先要由宿主程序新建DexClassLoader加載宿主應用程序安裝包,然后新建AssetManager加載宿主應用程序安裝文件的資源,最后通過Resource對象讀取宿主應用程序安裝文件的資源。
[0080]優選地,加載該安裝包所實現的目標應用程序的步驟包括步驟S111 (圖中未示出)。步驟S111(圖中未示出):通過宿主應用程序,來建立目標應用程序的所需資源與原生應用程序的所需資源的一一對應關系。[0081 ]例如,終端設備的操作系統為Android系統,目標應用程序為Appl’,該目標應用程序欲實現原生應用程序Appl的全部功能與相應服務;在終端設備的宿主應用程序中, “Appl’.apk”為宿主應用程序附帶資源的安裝包,通過Java反射機制調用安裝包“Appl’.apk”,隨后加載“Appl’.apk”所實現的目標應用程序Appl’,在宿主應用程序中加載 “ A p p 1 ’.a p k”的過程中,創建目標應用程序A p p 1 ’的所需全部資源如 Act ivityManagerService資源、PackageManagerService資源、Activity組件、Service 組件、Broadcast Receiver組件和Content Provider組件,其中,目標應用程序Appl’的所需全部資源如Act ivityManagerService資源、PackageManagerService資源、Activity組件、Service組件、Broadcast Receiver組件和Content Provider組件-對應且相同于原生應用程序即在終端設備Andro id操作系統中運行的Appl的所需全部資源如 Act ivityManagerService資源、PackageManagerService資源、Activity組件、Service 組件、Broadcast Receiver組件和Content Provider組件。
[0082]優選地,建立目標應用程序的所需資源與原生應用程序的所需資源的一一對應關系的步驟具體包括步驟S112(圖中未示出)和步驟S113(圖中未示出)。步驟S112:解析安裝包以確定目標應用程序的所需資源的資源名;步驟S113:根據目標應用程序的所需資源的資源名,加載與原生應用程序的所需資源一一對應的資源。
[0083]解析應用程序的原安裝包的手段,為本領域技術人員所熟知。安裝包APK文件本質上是利用ZIP壓縮技術結合簽名技術實現的壓縮包,因此,一方面可以通過解壓技術釋放其內部文件,另一方面還可通過Apktool之類的工具軟件獲取其內部文件(在這種情況下其代碼文件會被反向為.smali文件)。本領域技術人員均能嫻熟地利用這些公知技術在一個給定目錄中對原安裝包進行處理,從而通過內存操作(非文件操作)的方式來獲得其中的內部文件。
[0084]Android應用程序在運行的過程中,是通過一個稱為AssetsManager資源管理器來讀取打包在APK文件里面的資源文件的。應用程序的每一個Activity組件都關聯一個 Context Imp 1對象,這個Context Imp 1對象就是用來描述Activity組件的運行上下文環境的。調用這個Contextlmpl對象的成員函數init來執行初始化Activity組件運行上下文環境的工作,其中就包括創建用來訪問應用程序資源的Resources對象和AssetsManager對象的工作。其中,Context Imp 1 ? ini t 函數就定義在文件frameworks/base/core/java/ android/app/Contextlmpl ? java中。ContextImpl ? init函數中的參數packagelnfo指向的是一個loadedApk對象,這個loadedApk對象描述的是當前正在啟動組件所屬的Apk。用來訪問應用程序資源的Resources對象是通過調用參數package Info所指向的是一個loadedApk 對象的成員函數getResources來創建的。由此可知,可創建Resources對象,以提取或訪問應用程序資源。[〇〇85]例如,解析安裝包“Appl’.apk”以確定目標應用程序Appl’的所需全部資源的資源名,如ActivityManagerService、PackageManagerService、Activity、Service、Broadcast Receiver和Content Provider,隨后在宿主應用程序中創建原生應用程序Appl的所需全部資源-----對應的資源如Act ivityManagerSer vice資源、PackageManagerSer vice資源、Activity組件、Service組件、Broadcast Receiver組件和Content Provider組件。
[0086]優選地,目標應用程序包括預留擴展項,以用于與原生應用程序的擴展資源相匹配。
[0087]具體地,在宿主應用程序中加載目標應用程序Appl’的過程中,同時加載目標應用程序Appl’的預留擴展項,以用于與原生應用程序Appl的擴展資源相匹配。
[0088]例如,在宿主應用程序中加載目標應用程序Appl’的過程中,同時加載目標應用程序Appl’的預留擴展項,當原生應用程序Appl發生更新時,如增加了用戶界面布局的XML文件“1 ay out.xml”,可在目標應用程序App 1’的預留擴展項里創建對應的用戶界面布局的XML 文件 “layout ? xml”。[〇〇89]步驟S120:通過鉤子函數對目標應用程序的活動進程進行監控。
[0090]這里需要補充的是:術語“鉤子”涵蓋了用于通過攔截在軟件組件之間傳遞的函數調用、消息、或事件來改變或增加操作系統、應用程序、或其他軟件組件的行為的技術。而處理這種被攔截的函數調用、事件或消息的代碼就被稱為鉤子hook函數。鉤子通常用于各種目標,包括對功能進行調試和對功能進行擴展。其示例可以包括在鍵盤或鼠標事件傳遞到應用程序之前攔截它們,或者攔截系統調用(system call)、或者系統函數行為、函數執行結果等,以監視或修改應用程序或其他組件的功能等等。本實施例即可采用鉤子hook函數接管所述應用程序運行時所需的安裝自校驗操作。[0091 ]作為一個沙箱實例,使目標應用程序運行于沙箱運行環境中,監控目標應用程序的活動進程是沙箱運行環境的核心實現者,負責實現一下的功能:通過監控目標應用程序對資源的訪問,使目標應用程序進程能夠實現對對應資源的正常調用。例如,上述有關對目標應用程序Appl’的安裝包的資源進行的調用,可以通過監控具體調用資源的具體調用指令,利用Hook技術來實現。可將通過鉤子函數對目標應用程序的活動進程進行監控的方式注冊為服務進程,以鉤子函數關聯目標應用程序Appl’活動進程的調用指令以實現對目標應用程序Appl’的活動監控。[〇〇92] 步驟S130:當通過鉤子函數監測到對目標應用程序的活動進程的調用指令時,調用與目標應用程序的所需資源一一對應的原生應用程序的所需資源。
[0093]例如,利用鉤子函數對相關調用指令的入口點進行監視,截獲此一調用指令,并獲取目標應用程序Appl’訪問的資源的名稱,如鉤子函數獲取到目標應用程序Appl’訪問的資源為ActivityManagerService,隨后轉向執行相應的鉤子函數,由該鉤子函數調用與原生應用程序對應的ActivityManagerService資源。[〇〇94]在一優選實施例中,該方法還包括步驟S140(圖中未示出)。步驟S140:檢測到原生應用程序的更新服務,基于目標應用程序的預留擴展項更新目標應用程序的所需資源。
[0095]例如,當宿主應用程序檢測到原生應用程序Appl的更新服務時,如更新服務中包括增加了用戶界面布局的XML文件“layout.xml”,在目標應用程序Appl’的預留擴展項里創建對應的用戶界面布局的XML文件“layout.xml”,實現對目標應用程序Appl’的相應更新。 [〇〇96] 在一優選實施例中,該方法還包括S150 (圖中未示出)。步驟S150:通過執行目標應用程序的所需資源,以實現與執行原生應用程序的所需資源相同的執行結果。
[0097]例如,通過執行原生應用程序A p p 1所需終端設備A n d r 〇 i d系統的 ActivityManagerService資源可激活啟動原生應用程序Appl,在宿主應用程序中,通過執行目標應用程序Appl’所需的宿主應用程序中的ActivityManagerService資源可激活啟動目標應用程序Appl’。
[0098]在本優選實施例中,通過執行目標應用程序的相關資源,能夠實現與執行原生應用程序的相關資源完全相同的執行結果;且目標應用程序運行在通過宿主應用程序構建的沙箱中,其安裝及運行活動均不被系統所感知,從而可以解決現有技術中,對于一種即時通信類應用程序,在一臺終端設備中僅可以安裝并運行一個該即時通信類應用程序,同時, 用戶僅可以通過唯一的賬號登錄并對其執行相關操作的瓶頸。實現了用戶希望在一臺終端設備中通過多個賬號登錄一種即時通信類應用程序以實現對不同好友信息的區分管理及交流的實際應用目的。
[0099]圖2為本發明中另一實施例的應用程序運行控制的裝置的結構示意圖。
[0100]其中,在發明的實施例中,目標應用程序為本發明需要實現的應用程序,實現的目標應用程序需要具有原生應用程序的全部功能,能夠提供與原生應用程序完全相同的服務。宿主應用程序是實現目標應用程序的加殼應用程序,通過宿主應用程序完成目標應用程序的安裝與運行。[〇1〇1]加載模塊210反射調用與宿主應用程序具有相同包名的作為宿主應用程序附帶資源的安裝包,以加載該安裝包所實現的目標應用程序,其中,目標應用程序的所需資源與原生應用程序的所需資源一一對應;監控模塊220通過鉤子函數對目標應用程序的活動進程進行監控;調用模塊230當通過鉤子函數監測到對目標應用程序的活動進程的調用指令時, 調用與目標應用程序的所需資源一一對應的原生應用程序的所需資源。
[0102]加載模塊210反射調用與宿主應用程序具有相同包名的作為宿主應用程序附帶資源的安裝包,以加載該安裝包所實現的目標應用程序,其中,目標應用程序的所需資源與原生應用程序的所需資源一一對應。
[0103]其中,目標應用程序的所需資源,包括但不限于:
[0104]ActivityManagerService 資源;
[0105]PackageManagerService 資源;
[0106]Activity 組件;
[0107]Service 組件;
[0108]Broadcast Receiver組件;
[0109]Content Provider組件。
[0110]其中,宿主應用程序的資源文件和/或動態庫文件與安裝包中的相應文件相同。
[0111]具體地,通過反射機制調用與宿主應用程序具有相同包名的作為宿主應用程序附帶資源的安裝包,隨后加載該安裝包所實現的目標應用程序,并將目標應用程序的所需全部資源與原生應用程序的所需全部資源一一對應。
[0112]Android操作系統有其不同于其他操作系統的原理,Android為開發者提供四大組件,具體指Activity、Service、Broadcast Receiver以及Content Provider等組件。 Android應用程序以APK安裝包的形式提供給用戶進行安裝,APK安裝包中,具有用于封裝實現各個組件的程序代碼的classes, dex代碼文件以及用于表達應用程序所用的各個組件的注冊信息以及權限申請信息等內容的Androidmanifest.xml配置文件。由于應用程序的安裝過程就是 PackageManagerService(PMS)解析 Androidmanifest.xml 文件的過程,而本發明中應用程序安裝包沒有安裝在本地,因此無法得到應用程序的相關屬性信息,但只有獲取如Activity組件、Service組件、Broadcast Receiver組件、ContentProvider組件等信息時,才能通過ActivityManagerService(AMS)正常運行應用程序。[〇113]本實施例所采用的反射機制可以為Java反射機制,Java反射機制是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法;這種動態獲取信息以及動態調用對象的方法的功能即為JAVA語言的反射機制。[〇114]通過反射機制,調用AssetManager中的addAssetPath方法,將宿主應用程序安裝文件中的資源加載到Resource中,通過Resource對象調用宿主應用程序安裝文件中的資源。在獲取宿主應用程序安裝文件資源之前,首先要由宿主程序新建DexClassLoader加載宿主應用程序安裝包,然后新建AssetManager加載宿主應用程序安裝文件的資源,最后通過Resource對象讀取宿主應用程序安裝文件的資源。
[0115]優選地,加載模塊210包括建立單元(圖中未示出);建立單元通過所述宿主應用程序,來建立所述目標應用程序的所需資源與原生應用程序的所需資源的一一對應關系。 [〇116]例如,終端設備的操作系統為Android系統,目標應用程序為Appl’,該目標應用程序欲實現原生應用程序Appl的全部功能與相應服務;在終端設備的宿主應用程序中, “Appl’.apk”為宿主應用程序附帶資源的安裝包,通過Java反射機制調用安裝包“Appl’.3?1^,隨后加載1??1’.&?1^所實現的目標應用程序4??1’,在宿主應用程序中加載 “ A p p 1 ’.a p k”的過程中,創建目標應用程序A p p 1 ’的所需全部資源如 Act ivityManagerService資源、PackageManagerService資源、Activity組件、Service 組件、Broadcast Receiver組件和Content Provider組件,其中,目標應用程序Appl’的所需全部資源如Act ivityManagerService資源、PackageManagerService資源、Activity組件、Service組件、Broadcast Receiver組件和Content Provider組件-對應且相同于原生應用程序即在終端設備Android操作系統中運行的Appl的所需全部資源如 Act ivityManagerService資源、PackageManagerService資源、Activity組件、Service 組件、Broadcast Receiver組件和Content Provider組件。[〇117]優選地,建立單元具體包括解析子單元(圖中未示出)和加載子單元(圖中未示出)。解析子單元:解析安裝包以確定目標應用程序的所需資源的資源名;加載子單元:根據目標應用程序的所需資源的資源名,加載與原生應用程序的所需資源一一對應的資源。
[0118]解析應用程序的原安裝包的手段,為本領域技術人員所熟知。安裝包APK文件本質上是利用ZIP壓縮技術結合簽名技術實現的壓縮包,因此,一方面可以通過解壓技術釋放其內部文件,另一方面還可通過Apktool之類的工具軟件獲取其內部文件(在這種情況下其代碼文件會被反向為.smali文件)。本領域技術人員均能嫻熟地利用這些公知技術在一個給定目錄中對原安裝包進行處理,從而通過內存操作(非文件操作)的方式來獲得其中的內部文件。[〇119] Android應用程序在運行的過程中,是通過一個稱為AssetsManager資源管理器來讀取打包在APK文件里面的資源文件的。應用程序的每一個Activity組件都關聯一個 Context Imp 1對象,這個Context Imp 1對象就是用來描述Activity組件的運行上下文環境的。調用這個Contextlmpl對象的成員函數init來執行初始化Activity組件運行上下文環境的工作,其中就包括創建用來訪問應用程序資源的Resources對象和AssetsManager對象的工作。其中,Contextlmpl.1nit 函數就定義在文件frameworks/base/core/ java/ android/app/Contextlmpl ? java中。ContextImpl ? init函數中的參數packagelnfo指向的是一個loadedApk對象,這個loadedApk對象描述的是當前正在啟動組件所屬的Apk。用來訪問應用程序資源的Resources對象是通過調用參數package Info所指向的是一個loadedApk 對象的成員函數getResources來創建的。由此可知,可創建Resources對象,以提取或訪問應用程序資源。[〇12〇]例如,解析安裝包“Appl’.apk”以確定目標應用程序Appl’的所需全部資源的資源名,如ActivityManagerService、PackageManagerService、Activity、Service、Broadcast Receiver和Content Provider,隨后在宿主應用程序中創建原生應用程序Appl的所需全部資源-----對應的資源如Act ivi tyManagerService資源、PackageManagerService資源、Activity組件、Service組件、Broadcast Receiver組件和Content Provider組件。
[0121]優選地,目標應用程序包括預留擴展項,以用于與原生應用程序的擴展資源相匹配。
[0122]具體地,在宿主應用程序中加載目標應用程序Appl’的過程中,同時加載目標應用程序Appl’的預留擴展項,以用于與原生應用程序Appl的擴展資源相匹配。
[0123]例如,在宿主應用程序中加載目標應用程序Appl’的過程中,同時加載目標應用程序Appl’的預留擴展項,當原生應用程序Appl發生更新時,如增加了用戶界面布局的XML文件“1 ay out.xml”,可在目標應用程序App 1’的預留擴展項里創建對應的用戶界面布局的XML 文件 “layout ? xml”。
[0124]監控模塊220通過鉤子函數對目標應用程序的活動進程進行監控。
[0125]這里需要補充的是:術語“鉤子”涵蓋了用于通過攔截在軟件組件之間傳遞的函數調用、消息、或事件來改變或增加操作系統、應用程序、或其他軟件組件的行為的技術。而處理這種被攔截的函數調用、事件或消息的代碼就被稱為鉤子hook函數。鉤子通常用于各種目標,包括對功能進行調試和對功能進行擴展。其示例可以包括在鍵盤或鼠標事件傳遞到應用程序之前攔截它們,或者攔截系統調用(system call)、或者系統函數行為、函數執行結果等,以監視或修改應用程序或其他組件的功能等等。本實施例即可采用鉤子hook函數接管所述應用程序運行時所需的安裝自校驗操作。
[0126]作為一個沙箱實例,使目標應用程序運行于沙箱運行環境中,監控目標應用程序的活動進程是沙箱運行環境的核心實現者,負責實現一下的功能:通過監控目標應用程序對資源的訪問,使目標應用程序進程能夠實現對對應資源的正常調用。例如,上述有關對目標應用程序Appl’的安裝包的資源進行的調用,可以通過監控具體調用資源的具體調用指令,利用Hook技術來實現。可將通過鉤子函數對目標應用程序的活動進程進行監控的方式注冊為服務進程,以鉤子函數關聯目標應用程序Appl’活動進程的調用指令以實現對目標應用程序Appl’的活動監控。
[0127]調用模塊230當通過鉤子函數監測到對目標應用程序的活動進程的調用指令時, 調用與目標應用程序的所需資源一一對應的原生應用程序的所需資源。
[0128]例如,利用鉤子函數對相關調用指令的入口點進行監視,截獲此一調用指令,并獲取目標應用程序Appl’訪問的資源的名稱,如鉤子函數獲取到目標應用程序Appl’訪問的資源為ActivityManagerService,隨后轉向執行相應的鉤子函數,由該鉤子函數調用與原生應用程序對應的ActivityManagerService資源。
[0129]在一優選實施例中,該裝置還包括更新模塊(圖中未示出)。更新模塊檢測到原生應用程序的更新服務,基于目標應用程序的預留擴展項更新目標應用程序的所需資源。
[0130]例如,當宿主應用程序檢測到原生應用程序Appl的更新服務時,如更新服務中包括增加了用戶界面布局的XML文件“layout.xml”,在目標應用程序Appl’的預留擴展項里創建對應的用戶界面布局的XML文件“layout.xml”,實現對目標應用程序Appl’的相應更新。
[0131]在一優選實施例中,該裝置還包括實現模塊(圖中未示出)。實現模塊通過執行目標應用程序的所需資源,以實現與執行原生應用程序的所需資源相同的執行結果。
[0132]例如,通過執行原生應用程序A p p 1所需終端設備A n d r 〇 i d系統的 ActivityManagerService資源可激活啟動原生應用程序Appl,在宿主應用程序中,通過執行目標應用程序Appl’所需的宿主應用程序中的ActivityManagerService資源可激活啟動目標應用程序Appl’。
[0133]在本優選實施例中,通過執行目標應用程序的相關資源,能夠實現與執行原生應用程序的相關資源完全相同的執行結果;且目標應用程序運行在通過宿主應用程序構建的沙箱中,其安裝及運行活動均不被系統所感知,從而可以解決現有技術中,對于一種即時通信類應用程序,在一臺終端設備中僅可以安裝并運行一個該即時通信類應用程序,同時,用戶僅可以通過唯一的賬號登錄并對其執行相關操作的瓶頸。實現了用戶希望在一臺終端設備中通過多個賬號登錄一種即時通信類應用程序以實現對不同好友信息的區分管理及交流的實際應用目的。
[0134]本技術領域技術人員可以理解,本發明包括涉及用于執行本申請中所述操作中的一項或多項的設備。這些設備可以為所需的目的而專門設計和制造,或者也可以包括通用計算機中的已知設備。這些設備具有存儲在其內的計算機程序,這些計算機程序選擇性地激活或重構。這樣的計算機程序可以被存儲在設備(例如,計算機)可讀介質中或者存儲在適于存儲電子指令并分別耦聯到總線的任何類型的介質中,所述計算機可讀介質包括但不限于任何類型的盤(包括軟盤、硬盤、光盤、CD-ROM、和磁光盤)、R0M( Read-Only Memory,只讀存儲器)、RAM(Random Access Memory,隨即存儲器)、EPROM(Erasable Programmable Read-Only Memory,可擦寫可編程只讀存儲器)、EEPROM(Electrically Erasable Programmable Read-Only Memory,電可擦可編程只讀存儲器)、閃存、磁性卡片或光線卡片。也就是,可讀介質包括由設備(例如,計算機)以能夠讀的形式存儲或傳輸信息的任何介質。
[0135]本技術領域技術人員可以理解,可以用計算機程序指令來實現這些結構圖和/或框圖和/或流圖中的每個框以及這些結構圖和/或框圖和/或流圖中的框的組合。本技術領域技術人員可以理解,可以將這些計算機程序指令提供給通用計算機、專業計算機或其他可編程數據處理方法的處理器來實現,從而通過計算機或其他可編程數據處理方法的處理器來執行本發明公開的結構圖和/或框圖和/或流圖的框或多個框中指定的方案。
[0136]本技術領域技術人員可以理解,本發明中已經討論過的各種操作、方法、流程中的步驟、措施、方案可以被交替、更改、組合或刪除。進一步地,具有本發明中已經討論過的各種操作、方法、流程中的其他步驟、措施、方案也可以被交替、更改、重排、分解、組合或刪除。 進一步地,現有技術中的具有與本發明中公開的各種操作、方法、流程中的步驟、措施、方案也可以被交替、更改、重排、分解、組合或刪除。
[0137]以上所述僅是本發明的部分實施方式,應當指出,對于本技術領域的普通技術人員來說,在不脫離本發明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本發明的保護范圍。
【主權項】
1.一種應用程序運行控制的方法,其特征在于,包括: 反射調用與宿主應用程序具有相同包名的作為宿主應用程序附帶資源的安裝包,以加載該安裝包所實現的目標應用程序,其中,所述目標應用程序的所需資源與原生應用程序的所屬資源—對應; 通過鉤子函數對所述目標應用程序的活動進程進行監控; 當通過鉤子函數監測到對目標應用程序的活動進程的調用指令時,調用與所述目標應用程序的所屬資源一一對應的所述原生應用程序的所屬資源。2.根據權利要求1所述應用程序運行控制的方法,其中,加載該安裝包所實現的目標應用程序的步驟,包括: 通過所述宿主應用程序,來建立所述目標應用程序的所需資源與原生應用程序的所需資源的 對應關系。3.根據權利要求2所述的應用程序運行控制的方法,其中,建立所述目標應用程序的所需資源與原生應用程序的所需資源的一一對應關系,具體包括: 解析所述安裝包以確定目標應用程序的所屬資源的資源名; 根據目標應用程序的所屬資源的資源名,加載與原生應用程序的所需資源一一對應的資源。4.根據權利要求1所述的應用程序運行控制的方法,所述目標應用程序包括預留擴展項,以用于與所述原生應用程序的擴展資源相匹配。5.根據權利要求4所述的應用程序運行控制的方法,該方法還包括: 檢測到所述原生應用程序的更新服務,基于所述目標應用程序的預留擴展項更新所述目標應用程序的所需資源。6.一種應用程序運行控制的裝置,其特征在于,包括: 加載模塊,用于反射調用與宿主應用程序具有相同包名的作為宿主應用程序附帶資源的安裝包,以加載該安裝包所實現的目標應用程序,其中,所述目標應用程序的所需資源與原生應用程序的所需資源一一對應; 監控模塊,用于通過鉤子函數對所述目標應用程序的活動進程進行監控; 調用模塊,用于當通過鉤子函數監測到對目標應用程序的活動進程的調用指令時,調用與所述目標應用程序的所需資源一一對應的所述原生應用程序的所需資源。7.根據權利要求6所述應用程序運行控制的裝置,其中,所述加載模塊包括: 建立單元,用于通過所述宿主應用程序,來建立所述目標應用程序的所需資源與原生應用程序的所需資源的一一對應關系。8.根據權利要求7所述的應用程序運行控制的裝置,其中,所述建立單元具體包括: 解析子單元,用于解析所述安裝包以確定目標應用程序的所需資源的資源名; 加載子單元,用于根據目標應用程序的所需資源的資源名,加載與原生應用程序的所需資源一一對應的資源。9.根據權利要求6所述的應用程序運行控制的裝置,所述目標應用程序包括預留擴展項,以用于與所述原生應用程序的擴展資源相匹配。10.根據權利要求9所述的應用程序運行控制的裝置,該裝置還包括: 更新模塊,用于檢測到所述原生應用程序的更新服務,基于所述目標應用程序的預留擴展項更新所述目標應用程序的所需資源。
【文檔編號】G06F21/53GK105975333SQ201510993178
【公開日】2016年9月28日
【申請日】2015年12月24日
【發明人】劉剛
【申請人】北京奇虎科技有限公司, 奇智軟件(北京)有限公司