本發(fā)明涉及計算機技術(shù)領(lǐng)域,具體而言,本發(fā)明涉及一種在Windows系統(tǒng)上運行Android應(yīng)用程序的方法,及一種在Windows系統(tǒng)上運行Android應(yīng)用程序的裝置。
背景技術(shù):
隨著計算機技術(shù)的不斷發(fā)展,人們的生活越來越依賴于各種應(yīng)用程序,人們對應(yīng)用程序的使用需求也越來越多樣化,用戶在Android操作系統(tǒng)的移動終端上使用的游戲類應(yīng)用程序時,用戶希望在Windows操作系統(tǒng)的PC(Personal Computer,個人電腦)端也能實現(xiàn)對該應(yīng)用程序的操作體驗,使得用戶能夠在更大的顯示屏中感受更加便捷、流暢的操作體驗,從而解決由于移動終端屏幕較小而帶來的視覺體驗度不高的問題;同時,可以避免移動終端的處理器的因發(fā)熱等原因?qū)е碌挠螒蚩ㄋ赖那闆r,以及避免移動終端網(wǎng)絡(luò)信號不穩(wěn)定導(dǎo)致用戶在操作游戲的過程中發(fā)生中斷等情況。
現(xiàn)有技術(shù)中,首先需要在Windows操作系統(tǒng)的PC端安裝虛擬機,通過在該虛擬機中運行虛擬的Android操作系統(tǒng),隨后在該虛擬的Android操作系統(tǒng)中安裝并運行Android應(yīng)用程序。一方面,在安裝虛擬機的過程中,必須安裝該虛擬機的全套內(nèi)核級的驅(qū)動程序,在應(yīng)用程序的運行過程中調(diào)用各內(nèi)核驅(qū)動的過程極為復(fù)雜,且耗費系統(tǒng)資源;另一方面,虛擬機的運行過程本身需要耗費PC端的大量硬盤空間和內(nèi)存,PC端大量的系統(tǒng)資源被占用,將導(dǎo)致降低PC端各進程運行的響應(yīng)速度;再一方面,現(xiàn)有技術(shù)的實現(xiàn)極大地依賴于對PC端的CPU(Central Processing Unit,中央處理器)的虛擬化硬件加速技術(shù),在過去的幾十年里,即使硬件虛擬化技術(shù)快速的普及,使得計算機的性能越來越好,但是為了避免各種存在的安全隱患發(fā)生,超過70%的主板在制造完成時,在BIOS(Basic Input Output System,基本輸入輸出系統(tǒng))上禁止了硬件虛擬化技術(shù)的實現(xiàn),因此導(dǎo)致大量用戶的需求無法被滿足,降低了用戶體驗;進一步地,虛擬機本質(zhì)上是涉及給具備專業(yè)知識的商業(yè)用戶和極客用戶使用,將給普通用戶在使用過程中帶來極大的操作困難,從而限制了用戶群體的拓展。
技術(shù)實現(xiàn)要素:
為克服上述技術(shù)問題或者至少部分地解決上述技術(shù)問題,特提出以下技術(shù)方案:
本發(fā)明的實施例提出了一種在Windows系統(tǒng)上運行Android應(yīng)用程序的方法,包括:
響應(yīng)啟動應(yīng)用程序的指令,通過加載預(yù)定格式的Linux可執(zhí)行文件來加載Android虛擬機的動態(tài)鏈接庫相關(guān)文件以啟動Android虛擬機;
開始加載應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件;
通過啟動Android虛擬機,加載應(yīng)用程序中預(yù)定的引擎文件和相關(guān)可執(zhí)行文件;
通過調(diào)用預(yù)定的啟動進程,調(diào)用應(yīng)用程序?qū)?yīng)的Activity資源;
在Activity資源的生命周期中,完成加載應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件,以運行應(yīng)用程序。
優(yōu)選地,加載Android虛擬機的動態(tài)鏈接庫相關(guān)文件,包括:
通過預(yù)定啟動進程加載Android虛擬機的動態(tài)鏈接庫相關(guān)文件;
其中,在Activity的生命周期中,完成加載應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件,包括:
在Activity的生命周期中,通過預(yù)定啟動進程完成加載應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件。
優(yōu)選地,預(yù)定的引擎文件,包括Android系統(tǒng)的DEX相關(guān)文件、Android系統(tǒng)動態(tài)鏈接庫的相關(guān)文件和應(yīng)用程序動態(tài)鏈接庫的相關(guān)文件。
可選地,該方法還包括:
接收應(yīng)用程序的Windows操作指令,通過Android虛擬機將Windows操作指令轉(zhuǎn)換為相應(yīng)的Android操作指令。
可選地,該方法還包括:
將轉(zhuǎn)換后的Android操作指令發(fā)送至應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件;
應(yīng)用程序根據(jù)接收到的轉(zhuǎn)換后的Android操作指令,在Windows系統(tǒng)中執(zhí)行相應(yīng)的操作。
優(yōu)選地,將轉(zhuǎn)換后的Android操作指令發(fā)送至應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件,包括以下至少一種情形:
根據(jù)Android虛擬機的通知消息,將轉(zhuǎn)換后的Android操作指令發(fā)送至應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件;
根據(jù)應(yīng)用程序的調(diào)用指令,將調(diào)用獲取到的轉(zhuǎn)換后的Android操作指令反饋至應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件。
本發(fā)明的另一實施例提出了一種在Windows系統(tǒng)上運行Android應(yīng)用程序的裝置,包括:
第一加載模塊,用于響應(yīng)啟動應(yīng)用程序的指令,通過加載預(yù)定格式的Linux可執(zhí)行文件來加載Android虛擬機的動態(tài)鏈接庫相關(guān)文件以啟動Android虛擬機;
第二加載模塊,用于開始加載應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件;
第三加載模塊,用于通過啟動Android虛擬機,加載應(yīng)用程序中預(yù)定的引擎文件和相關(guān)可執(zhí)行文件;
調(diào)用模塊,用于通過調(diào)用預(yù)定的啟動進程,調(diào)用應(yīng)用程序?qū)?yīng)的Activity資源;
第四加載模塊,用于在Activity資源的生命周期中,完成加載應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件,以運行應(yīng)用程序。
優(yōu)選地,第一加載模塊,包括:
加載單元,用于通過預(yù)定啟動進程加載Android虛擬機的動態(tài)鏈接庫相關(guān)文件;
其中,第四加載模塊用于在Activity的生命周期中,通過預(yù)定啟動進程完成加載應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件。
優(yōu)選地,預(yù)定的引擎文件,包括Android系統(tǒng)的DEX相關(guān)文件、Android系統(tǒng)動態(tài)鏈接庫的相關(guān)文件和應(yīng)用程序動態(tài)鏈接庫的相關(guān)文件。
可選地,該裝置還包括:
轉(zhuǎn)換模塊,用于接收應(yīng)用程序的Windows操作指令,通過Android虛擬機將Windows操作指令轉(zhuǎn)換為相應(yīng)的Android操作指令。
可選地,該裝置還包括:
發(fā)送模塊,用于將轉(zhuǎn)換后的Android操作指令發(fā)送至應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件;
執(zhí)行模塊,用于應(yīng)用程序根據(jù)接收到的轉(zhuǎn)換后的Android操作指令,在Windows系統(tǒng)中執(zhí)行相應(yīng)的操作。
優(yōu)選地,發(fā)送模塊,用于根據(jù)Android虛擬機的通知消息,將轉(zhuǎn)換后的Android操作指令發(fā)送至應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件;或
根據(jù)應(yīng)用程序的調(diào)用指令,將調(diào)用獲取到的轉(zhuǎn)換后的Android操作指令反饋至應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件。
本發(fā)明的實施例中,提出了一種在Windows系統(tǒng)上運行Android應(yīng)用程序的方案,響應(yīng)啟動應(yīng)用程序的指令,通過加載預(yù)定格式的Linux可執(zhí)行文件來加載Android虛擬機的動態(tài)鏈接庫相關(guān)文件以啟動Android虛擬機,實現(xiàn)了Android虛擬機在Windows系統(tǒng)上的正常運行,并為實現(xiàn)Android應(yīng)用程序在Windows系統(tǒng)上運行提供了重要的前提保障;開始加載應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件,通過啟動Android虛擬機,加載應(yīng)用程序中預(yù)定的引擎文件和相關(guān)可執(zhí)行文件,通過在自定義簡化的Android系統(tǒng)中運行應(yīng)用程序,實現(xiàn)了Android應(yīng)用程序在運行過程中占用較少的系統(tǒng)資源,解決了Android應(yīng)用程序在Windows系統(tǒng)中運行卡、慢等問題;通過調(diào)用預(yù)定的啟動進程,調(diào)用應(yīng)用程序?qū)?yīng)的Activity資源,在Activity資源的生命周期中,完成加載應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件,徹底實現(xiàn)了Android應(yīng)用程序在Windows系統(tǒng)中以原生應(yīng)用程序的形式正常運行,同時,無需用戶的復(fù)雜操作方式即可實現(xiàn)Android應(yīng)用程序在Windows系統(tǒng)中的正常、快速運行,進一步地,提高了用戶的使用體驗。
本發(fā)明附加的方面和優(yōu)點將在下面的描述中部分給出,這些將從下面的描述中變得明顯,或通過本發(fā)明的實踐了解到。
附圖說明
本發(fā)明上述的和/或附加的方面和優(yōu)點從下面結(jié)合附圖對實施例的描述中將變得明顯和容易理解,其中:
圖1為本發(fā)明中一個實施例的在Windows系統(tǒng)上運行Android應(yīng)用程序的方法的流程圖;
圖2為本發(fā)明中另一實施例的在Windows系統(tǒng)上運行Android應(yīng)用程序的裝置的結(jié)構(gòu)示意圖。
具體實施方式
下面詳細描述本發(fā)明的實施例,所述實施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施例是示例性的,僅用于解釋本發(fā)明,而不能解釋為對本發(fā)明的限制。
本技術(shù)領(lǐng)域技術(shù)人員可以理解,除非特意聲明,這里使用的單數(shù)形式“一”、“一個”、“所述”和“該”也可包括復(fù)數(shù)形式。應(yīng)該進一步理解的是,本發(fā)明的說明書中使用的措辭“包括”是指存在所述特征、整數(shù)、步驟、操作、元件和/或組件,但是并不排除存在或添加一個或多個其他特征、整數(shù)、步驟、操作、元件、組件和/或它們的組。應(yīng)該理解,當(dāng)我們稱元件被“連接”或“耦接”到另一元件時,它可以直接連接或耦接到其他元件,或者也可以存在中間元件。此外,這里使用的“連接”或“耦接”可以包括無線連接或無線耦接。這里使用的措辭“和/或”包括一個或更多個相關(guān)聯(lián)的列出項的全部或任一單元和全部組合。
本技術(shù)領(lǐng)域技術(shù)人員可以理解,除非另外定義,這里使用的所有術(shù)語(包括技術(shù)術(shù)語和科學(xué)術(shù)語),具有與本發(fā)明所屬領(lǐng)域中的普通技術(shù)人員的一般理解相同的意義。還應(yīng)該理解的是,諸如通用字典中定義的那些術(shù)語,應(yīng)該被理解為具有與現(xiàn)有技術(shù)的上下文中的意義一致的意義,并且除非像這里一樣被特定定義,否則不會用理想化或過于正式的含義來解釋。
圖1為本發(fā)明中一個實施例的在Windows系統(tǒng)上運行Android應(yīng)用程序的方法的流程圖。
本發(fā)明的實施例中,各步驟所執(zhí)行的內(nèi)容概述如下:步驟S110:響應(yīng)啟動應(yīng)用程序的指令,通過加載預(yù)定格式的Linux可執(zhí)行文件來加載Android虛擬機的動態(tài)鏈接庫相關(guān)文件以啟動Android虛擬機;步驟S120:開始加載應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件;步驟S130:通過啟動Android虛擬機,加載應(yīng)用程序中預(yù)定的引擎文件和相關(guān)可執(zhí)行文件;步驟S140:通過調(diào)用預(yù)定的啟動進程,調(diào)用應(yīng)用程序?qū)?yīng)的Activity資源;步驟S150:在Activity資源的生命周期中,完成加載應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件,以運行應(yīng)用程序。
本發(fā)明的實施例中,提出了一種在Windows系統(tǒng)上運行Android應(yīng)用程序的方法,響應(yīng)啟動應(yīng)用程序的指令,通過加載預(yù)定格式的Linux可執(zhí)行文件來加載Android虛擬機的動態(tài)鏈接庫相關(guān)文件以啟動Android虛擬機,實現(xiàn)了Android虛擬機在Windows系統(tǒng)上的正常運行,并為實現(xiàn)Android應(yīng)用程序在Windows系統(tǒng)上運行提供了重要的前提保障;開始加載應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件,通過啟動Android虛擬機,加載應(yīng)用程序中預(yù)定的引擎文件和相關(guān)可執(zhí)行文件,通過在自定義簡化的Android系統(tǒng)中運行應(yīng)用程序,實現(xiàn)了Android應(yīng)用程序在運行過程中占用較少的系統(tǒng)資源,解決了Android應(yīng)用程序在Windows系統(tǒng)中運行卡、慢等問題;通過調(diào)用預(yù)定的啟動進程,調(diào)用應(yīng)用程序?qū)?yīng)的Activity資源,在Activity資源的生命周期中,完成加載應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件,徹底實現(xiàn)了Android應(yīng)用程序在Windows系統(tǒng)中以原生應(yīng)用程序的形式正常運行,同時,無需用戶的復(fù)雜操作方式即可實現(xiàn)Android應(yīng)用程序在Windows系統(tǒng)中的正常、快速運行,進一步地,提高了用戶的使用體驗。以下針對各個步驟的具體實現(xiàn)做進一步的說明:
步驟S110:響應(yīng)啟動應(yīng)用程序的指令,通過加載預(yù)定格式的Linux可執(zhí)行文件來加載Android虛擬機的動態(tài)鏈接庫相關(guān)文件以啟動Android虛擬機。
例如,Android操作系統(tǒng)的應(yīng)用層是用Java語言編寫的,因此Android虛擬機運行的過程中,將加載Java的相關(guān)文件,在Android虛擬機中運行應(yīng)用程序App1時,Android虛擬機運行之后首先加載Android虛擬機的相關(guān)必備庫,如運行Android系統(tǒng)的Java虛擬機Dalvik所必需的自定義的CRT相關(guān)庫,包括已實現(xiàn)libc.so的接口、OpenGL ES接口、OpenSL ES接口以及一部分Android NDK(Native Development Kit,原生開發(fā)工具包)接口等,隨后Android虛擬機通過加載預(yù)定格式的Linux可執(zhí)行文件,如ELF格式的相關(guān)文件,以加載Android虛擬機的動態(tài)鏈接庫相關(guān)文件,如預(yù)定的Android系統(tǒng)的Java虛擬機Dalvik的相關(guān).so文件和數(shù)學(xué)庫libm.so的相關(guān)文件等,以啟動Android系統(tǒng)的Java虛擬機Dalvik。
優(yōu)選地,步驟S110中加載Android虛擬機的動態(tài)鏈接庫相關(guān)文件的步驟,具體包括步驟S111(圖中未示出);步驟S111:通過預(yù)定啟動進程加載Android虛擬機的動態(tài)鏈接庫相關(guān)文件。
例如,通過調(diào)用自定義的Android Framework的相關(guān)類和其他Java相關(guān)類的進程,來啟動加載Android虛擬機的動態(tài)鏈接庫相關(guān)文件,如預(yù)定的Android系統(tǒng)的Java虛擬機Dalvik的相關(guān).so文件。
步驟S120:開始加載應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件。
例如,在Android虛擬機中運行應(yīng)用程序App1時,Android虛擬機運行之后加載Android虛擬機的相關(guān)必備庫之后,可開始加載應(yīng)用程序App1的動態(tài)鏈接庫相關(guān)文件,如App1的相關(guān).so文件。
步驟S130:通過啟動Android虛擬機,加載應(yīng)用程序中預(yù)定的引擎文件和相關(guān)可執(zhí)行文件。
其中,預(yù)定的引擎文件,包括Android系統(tǒng)的DEX相關(guān)文件、Android系統(tǒng)動態(tài)鏈接庫的相關(guān)文件和應(yīng)用程序動態(tài)鏈接庫的相關(guān)文件。
例如,啟動Android系統(tǒng)的Java虛擬機Dalvik后,加載應(yīng)用程序App1中預(yù)定的引擎文件和相關(guān)可執(zhí)行文件,如預(yù)定的Android系統(tǒng)的系統(tǒng)庫的相關(guān).so文件,其中,預(yù)定的Android系統(tǒng)的系統(tǒng)庫的相關(guān).so文件為簡化的Android操作系統(tǒng),該預(yù)定的Android系統(tǒng)的系統(tǒng)庫的相關(guān).so文件中包括了Android系統(tǒng)的必備相關(guān)文件,刪除了在Windows中不必要的Android系統(tǒng)文件,如Android系統(tǒng)中電源管理的相關(guān)文件等;Android系統(tǒng)的DEX相關(guān)文件,如用于封裝實現(xiàn)Android各個組件的程序代碼的classes.dex代碼文件;以及App1相關(guān).so文件。
步驟S140:通過調(diào)用預(yù)定的啟動進程,調(diào)用應(yīng)用程序?qū)?yīng)的Activity資源。
例如,通過調(diào)用自定義的Android Framework的相關(guān)類和其他Java相關(guān)類的進程,調(diào)用Android系統(tǒng)Activity資源。在Android中,Activity中所有操作都與用戶密切相關(guān),是一個負責(zé)與用戶交互的組件。
需要說明的是,本領(lǐng)域技術(shù)人員可以了解到,Android操作系統(tǒng)有其不同于其他操作系統(tǒng)的原理,Android為開發(fā)者提供四大組件,具體指Activity、Service、Broadcast Receiver以及Content Provider等組件。其中,Content Provider屬于Android應(yīng)用程序的組件之一,作為應(yīng)用程序之間唯一的共享數(shù)據(jù)的途徑,Content Provider主要的功能就是存儲并檢索數(shù)據(jù)以及向其他應(yīng)用程序提供訪問數(shù)據(jù)的接口;Activity是Android應(yīng)用中負責(zé)與用戶交互的組件;Service通常位于后臺運行,它一般不需要與用戶交互,因此Service組件沒有圖形用戶界面,一個Service組件被運行起來之后,它將擁有自己獨立的生命周期,Service組件通常用于為其他組件提供后臺服務(wù)或監(jiān)控其他組件的運行狀態(tài);Broadcast Receiver代表廣播消息接收器。
步驟S150:在Activity資源的生命周期中,完成加載應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件,以運行應(yīng)用程序。
優(yōu)選地,在Activity的生命周期中,通過預(yù)定啟動進程完成加載應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件。
在Android中,Activity生命周期是指Activity從啟動到銷毀的過程。在Activity資源的生命周期中,例如,通過調(diào)用自定義的Android Framework的相關(guān)類和其他Java相關(guān)類的進程,完成加載應(yīng)用程序App1的相關(guān).so文件,以運行App1。
在一優(yōu)選實施例中,該方法還包括步驟S160(圖中未示出);步驟S160:接收應(yīng)用程序的Windows操作指令,通過Android虛擬機將Windows操作指令轉(zhuǎn)換為相應(yīng)的Android操作指令。
例如,由于Android虛擬機里有自定義的CRT庫以及其它底層庫,可以支持運行通過加載預(yù)定格式的Linux可執(zhí)行文件,如ELF格式的相關(guān)文件,以加載Android虛擬機的動態(tài)鏈接庫相關(guān)文件,如加載libdvm.so(即Android系統(tǒng)的Java虛擬機Dalvik),因此用戶在Windows操作系統(tǒng)中執(zhí)行應(yīng)用程序App1的相關(guān)操作,如點擊鼠標(biāo)的操作,當(dāng)接收到App1點擊鼠標(biāo)的指令后,通過Android虛擬機將Windows點擊鼠標(biāo)的操作指令轉(zhuǎn)換為相應(yīng)的Android點擊鼠標(biāo)的操作指令,以實現(xiàn)App1的正常運行。
在一優(yōu)選實施例中,該方法還包括步驟S170(圖中未示出)和步驟S180(圖中未示出);步驟S170:將轉(zhuǎn)換后的Android操作指令發(fā)送至應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件;步驟S180:應(yīng)用程序根據(jù)接收到的轉(zhuǎn)換后的Android操作指令,在Windows系統(tǒng)中執(zhí)行相應(yīng)的操作。
優(yōu)選地,將轉(zhuǎn)換后的Android操作指令發(fā)送至應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件,包括以下至少一種情形:
根據(jù)Android虛擬機的通知消息,將轉(zhuǎn)換后的Android操作指令發(fā)送至應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件;
根據(jù)應(yīng)用程序的調(diào)用指令,將調(diào)用獲取到的轉(zhuǎn)換后的Android操作指令反饋至應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件。
例如,根據(jù)Android系統(tǒng)的Java虛擬機Dalvik的中的反射機制及JNI(Java Native Interface,Java本地接口),其中,JNI用于讓Java和其他語言編寫的代碼進行交互,將轉(zhuǎn)換后的Android操作指令,如轉(zhuǎn)換后的Android鼠標(biāo)點擊的操作指令發(fā)送至App1的相關(guān).so文件,App1根據(jù)接收到轉(zhuǎn)換后的Android鼠標(biāo)點擊的操作指令,在Windows系統(tǒng)中執(zhí)行相應(yīng)鼠標(biāo)點擊的操作。
需要說明的是,本實施例所采用的反射機制可以為Java反射機制,Java反射機制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意一個方法;這種動態(tài)獲取信息以及動態(tài)調(diào)用對象的方法的功能即為Java語言的反射機制。
又例如,據(jù)應(yīng)用程序App1調(diào)用Windows操作系統(tǒng)中鼠標(biāo)點擊的操作指令,將轉(zhuǎn)換后的Android鼠標(biāo)點擊的操作指令,通過預(yù)定的調(diào)用接口,發(fā)送至App1的相關(guān).so文件,App1根據(jù)接收到轉(zhuǎn)換后的Android鼠標(biāo)點擊的操作指令,在Windows系統(tǒng)中執(zhí)行相應(yīng)鼠標(biāo)點擊的操作。
圖2為本發(fā)明中另一實施例的在Windows系統(tǒng)上運行Android應(yīng)用程序的裝置的結(jié)構(gòu)示意圖。
本發(fā)明的實施例中,各模塊所執(zhí)行的內(nèi)容概述如下:第一加載模塊210響應(yīng)啟動應(yīng)用程序的指令,通過加載預(yù)定格式的Linux可執(zhí)行文件來加載Android虛擬機的動態(tài)鏈接庫相關(guān)文件以啟動Android虛擬機;第二加載模塊220開始加載應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件;第三加載模塊230通過啟動Android虛擬機,加載應(yīng)用程序中預(yù)定的引擎文件和相關(guān)可執(zhí)行文件;調(diào)用模塊240通過調(diào)用預(yù)定的啟動進程,調(diào)用應(yīng)用程序?qū)?yīng)的Activity資源;第四加載模塊250在Activity資源的生命周期中,完成加載應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件,以運行應(yīng)用程序。
本發(fā)明的實施例中,提出了一種在Windows系統(tǒng)上運行Android應(yīng)用程序的裝置,響應(yīng)啟動應(yīng)用程序的指令,通過加載預(yù)定格式的Linux可執(zhí)行文件來加載Android虛擬機的動態(tài)鏈接庫相關(guān)文件以啟動Android虛擬機,實現(xiàn)了Android虛擬機在Windows系統(tǒng)上的正常運行,并為實現(xiàn)Android應(yīng)用程序在Windows系統(tǒng)上運行提供了重要的前提保障;開始加載應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件,通過啟動Android虛擬機,加載應(yīng)用程序中預(yù)定的引擎文件和相關(guān)可執(zhí)行文件,通過在自定義簡化的Android系統(tǒng)中運行應(yīng)用程序,實現(xiàn)了Android應(yīng)用程序在運行過程中占用較少的系統(tǒng)資源,解決了Android應(yīng)用程序在Windows系統(tǒng)中運行卡、慢等問題;通過調(diào)用預(yù)定的啟動進程,調(diào)用應(yīng)用程序?qū)?yīng)的Activity資源,在Activity資源的生命周期中,完成加載應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件,徹底實現(xiàn)了Android應(yīng)用程序在Windows系統(tǒng)中以原生應(yīng)用程序的形式正常運行,同時,無需用戶的復(fù)雜操作方式即可實現(xiàn)Android應(yīng)用程序在Windows系統(tǒng)中的正常、快速運行,進一步地,提高了用戶的使用體驗。以下針對各個模塊的具體實現(xiàn)做進一步的說明:
第一加載模塊210響應(yīng)啟動應(yīng)用程序的指令,通過加載預(yù)定格式的Linux可執(zhí)行文件來加載Android虛擬機的動態(tài)鏈接庫相關(guān)文件以啟動Android虛擬機。
例如,Android操作系統(tǒng)的應(yīng)用層是用Java語言編寫的,因此Android虛擬機運行的過程中,將加載Java的相關(guān)文件,在Android虛擬機中運行應(yīng)用程序App1時,Android虛擬機運行之后首先加載Android虛擬機的相關(guān)必備庫,如Android系統(tǒng)的Java虛擬機Dalvik的自定義的CRT相關(guān)庫,以實現(xiàn)libc.so的接口、OpenGL ES接口、OpenSL ES接口以及一部分Android NDK(Native Development Kit,原生開發(fā)工具包)接口,隨后Android虛擬機通過加載預(yù)定格式的Linux可執(zhí)行文件,如ELF格式的相關(guān)文件,以加載Android虛擬機的動態(tài)鏈接庫相關(guān)文件,如預(yù)定的Android系統(tǒng)的Java虛擬機Dalvik的相關(guān).so文件和數(shù)學(xué)庫libm.so的相關(guān)文件等,以啟動Android系統(tǒng)的Java虛擬機Dalvik。
優(yōu)選地,第一加載模塊210包括加載單元(圖中未示出);加載單元通過預(yù)定啟動進程加載Android虛擬機的動態(tài)鏈接庫相關(guān)文件。
例如,通過調(diào)用自定義的Android Framework的相關(guān)類和其他Java相關(guān)類的進程,來啟動加載Android虛擬機的動態(tài)鏈接庫相關(guān)文件,如預(yù)定的Android系統(tǒng)的Java虛擬機Dalvik的相關(guān).so文件。
第二加載模塊220開始加載應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件。
例如,在Android虛擬機中運行應(yīng)用程序App1時,Android虛擬機運行之后加載Android虛擬機的相關(guān)必備庫之后,可開始加載應(yīng)用程序App1的動態(tài)鏈接庫相關(guān)文件,如App1的相關(guān).so文件。
第三加載模塊230通過啟動Android虛擬機,加載應(yīng)用程序中預(yù)定的引擎文件和相關(guān)可執(zhí)行文件。
其中,預(yù)定的引擎文件,包括Android系統(tǒng)的DEX相關(guān)文件、Android系統(tǒng)動態(tài)鏈接庫的相關(guān)文件和應(yīng)用程序動態(tài)鏈接庫的相關(guān)文件。
例如,啟動Android系統(tǒng)的Java虛擬機Dalvik后,加載應(yīng)用程序App1中預(yù)定的引擎文件和相關(guān)可執(zhí)行文件,如預(yù)定的Android系統(tǒng)的系統(tǒng)庫的相關(guān).so文件,其中,預(yù)定的Android系統(tǒng)的系統(tǒng)庫的相關(guān).so文件為簡化的Android操作系統(tǒng),該預(yù)定的Android系統(tǒng)的系統(tǒng)庫的相關(guān).so文件中包括了Android系統(tǒng)的必備相關(guān)文件,刪除了在Windows中不必要的Android系統(tǒng)文件,如Android系統(tǒng)中電源管理的相關(guān)文件等;Android系統(tǒng)的DEX相關(guān)文件,如用于封裝實現(xiàn)Android各個組件的程序代碼的classes.dex代碼文件;以及App1相關(guān).so文件。
調(diào)用模塊240通過調(diào)用預(yù)定的啟動進程,調(diào)用應(yīng)用程序?qū)?yīng)的Activity資源。
例如,通過調(diào)用自定義的Android Framework的相關(guān)類和其他Java相關(guān)類的進程,調(diào)用Android系統(tǒng)Activity資源。在Android中,Activity中所有操作都與用戶密切相關(guān),是一個負責(zé)與用戶交互的組件。
需要說明的是,本領(lǐng)域技術(shù)人員可以了解到,Android操作系統(tǒng)有其不同于其他操作系統(tǒng)的原理,Android為開發(fā)者提供四大組件,具體指Activity、Service、Broadcast Receiver以及Content Provider等組件。其中,Content Provider屬于Android應(yīng)用程序的組件之一,作為應(yīng)用程序之間唯一的共享數(shù)據(jù)的途徑,Content Provider主要的功能就是存儲并檢索數(shù)據(jù)以及向其他應(yīng)用程序提供訪問數(shù)據(jù)的接口;Activity是Android應(yīng)用中負責(zé)與用戶交互的組件;Service通常位于后臺運行,它一般不需要與用戶交互,因此Service組件沒有圖形用戶界面,一個Service組件被運行起來之后,它將擁有自己獨立的生命周期,Service組件通常用于為其他組件提供后臺服務(wù)或監(jiān)控其他組件的運行狀態(tài);Broadcast Receiver代表廣播消息接收器。
第四加載模塊250在Activity資源的生命周期中,完成加載應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件,以運行應(yīng)用程序。
優(yōu)選地,在Activity的生命周期中,通過預(yù)定啟動進程完成加載應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件。
在Android中,Activity生命周期是指Activity從啟動到銷毀的過程。在Activity資源的生命周期中,例如,通過調(diào)用自定義的Android Framework的相關(guān)類和其他Java相關(guān)類的進程,完成加載應(yīng)用程序App1的相關(guān).so文件,以運行App1。
在一優(yōu)選實施例中,該裝置還包括轉(zhuǎn)換模塊(圖中未示出);轉(zhuǎn)換模塊接收應(yīng)用程序的Windows操作指令,通過Android虛擬機將Windows操作指令轉(zhuǎn)換為相應(yīng)的Android操作指令。
例如,由于Android虛擬機里有自定義的CRT庫以及其它底層庫,可以支持運行通過加載預(yù)定格式的Linux可執(zhí)行文件,如ELF格式的相關(guān)文件,以加載Android虛擬機的動態(tài)鏈接庫相關(guān)文件,如加載libdvm.so(即Android系統(tǒng)的Java虛擬機Dalvik),因此用戶在Windows操作系統(tǒng)中執(zhí)行應(yīng)用程序App1的相關(guān)操作,如點擊鼠標(biāo)的操作,當(dāng)接收到App1點擊鼠標(biāo)的指令后,通過Android虛擬機將Windows點擊鼠標(biāo)的操作指令轉(zhuǎn)換為相應(yīng)的Android點擊鼠標(biāo)的操作指令,以實現(xiàn)App1的正常運行。
在一優(yōu)選實施例中,該裝置還包括發(fā)送模塊(圖中未示出)和執(zhí)行模塊(圖中未示出);發(fā)送模塊將轉(zhuǎn)換后的Android操作指令發(fā)送至應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件;執(zhí)行模塊應(yīng)用程序根據(jù)接收到的轉(zhuǎn)換后的Android操作指令,在Windows系統(tǒng)中執(zhí)行相應(yīng)的操作。
優(yōu)選地,將轉(zhuǎn)換后的Android操作指令發(fā)送至應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件,包括以下至少一種情形:
根據(jù)Android虛擬機的通知消息,將轉(zhuǎn)換后的Android操作指令發(fā)送至應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件;
根據(jù)應(yīng)用程序的調(diào)用指令,將調(diào)用獲取到的轉(zhuǎn)換后的Android操作指令反饋至應(yīng)用程序的動態(tài)鏈接庫相關(guān)文件。
例如,根據(jù)Android系統(tǒng)的Java虛擬機Dalvik的中的反射機制及JNI(Java Native Interface,Java本地接口),其中,JNI用于讓Java和其他語言編寫的代碼進行交互,將轉(zhuǎn)換后的Android操作指令,如轉(zhuǎn)換后的Android鼠標(biāo)點擊的操作指令發(fā)送至App1的相關(guān).so文件,App1根據(jù)接收到轉(zhuǎn)換后的Android鼠標(biāo)點擊的操作指令,在Windows系統(tǒng)中執(zhí)行相應(yīng)鼠標(biāo)點擊的操作。
需要說明的是,本實施例所采用的反射機制可以為Java反射機制,Java反射機制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意一個方法;這種動態(tài)獲取信息以及動態(tài)調(diào)用對象的方法的功能即為Java語言的反射機制。
又例如,據(jù)應(yīng)用程序App1調(diào)用Windows操作系統(tǒng)中鼠標(biāo)點擊的操作指令,將轉(zhuǎn)換后的Android鼠標(biāo)點擊的操作指令,通過預(yù)定的調(diào)用接口,發(fā)送至App1的相關(guān).so文件,App1根據(jù)接收到轉(zhuǎn)換后的Android鼠標(biāo)點擊的操作指令,在Windows系統(tǒng)中執(zhí)行相應(yīng)鼠標(biāo)點擊的操作。
本技術(shù)領(lǐng)域技術(shù)人員可以理解,本發(fā)明包括涉及用于執(zhí)行本申請中所述操作中的一項或多項的設(shè)備。這些設(shè)備可以為所需的目的而專門設(shè)計和制造,或者也可以包括通用計算機中的已知設(shè)備。這些設(shè)備具有存儲在其內(nèi)的計算機程序,這些計算機程序選擇性地激活或重構(gòu)。這樣的計算機程序可以被存儲在設(shè)備(例如,計算機)可讀介質(zhì)中或者存儲在適于存儲電子指令并分別耦聯(lián)到總線的任何類型的介質(zhì)中,所述計算機可讀介質(zhì)包括但不限于任何類型的盤(包括軟盤、硬盤、光盤、CD-ROM、和磁光盤)、ROM(Read-Only Memory,只讀存儲器)、RAM(Random Access Memory,隨即存儲器)、EPROM(Erasable Programmable Read-Only Memory,可擦寫可編程只讀存儲器)、EEPROM(Electrically Erasable Programmable Read-Only Memory,電可擦可編程只讀存儲器)、閃存、磁性卡片或光線卡片。也就是,可讀介質(zhì)包括由設(shè)備(例如,計算機)以能夠讀的形式存儲或傳輸信息的任何介質(zhì)。
本技術(shù)領(lǐng)域技術(shù)人員可以理解,可以用計算機程序指令來實現(xiàn)這些結(jié)構(gòu)圖和/或框圖和/或流圖中的每個框以及這些結(jié)構(gòu)圖和/或框圖和/或流圖中的框的組合。本技術(shù)領(lǐng)域技術(shù)人員可以理解,可以將這些計算機程序指令提供給通用計算機、專業(yè)計算機或其他可編程數(shù)據(jù)處理方法的處理器來實現(xiàn),從而通過計算機或其他可編程數(shù)據(jù)處理方法的處理器來執(zhí)行本發(fā)明公開的結(jié)構(gòu)圖和/或框圖和/或流圖的框或多個框中指定的方案。
本技術(shù)領(lǐng)域技術(shù)人員可以理解,本發(fā)明中已經(jīng)討論過的各種操作、方法、流程中的步驟、措施、方案可以被交替、更改、組合或刪除。進一步地,具有本發(fā)明中已經(jīng)討論過的各種操作、方法、流程中的其他步驟、措施、方案也可以被交替、更改、重排、分解、組合或刪除。進一步地,現(xiàn)有技術(shù)中的具有與本發(fā)明中公開的各種操作、方法、流程中的步驟、措施、方案也可以被交替、更改、重排、分解、組合或刪除。
以上所述僅是本發(fā)明的部分實施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應(yīng)視為本發(fā)明的保護范圍。