本發(fā)明屬于電子設(shè)備應(yīng)用技術(shù)領(lǐng)域,具體是一種應(yīng)用程序多開的實(shí)現(xiàn)方法及裝置。
背景技術(shù):
隨著智能終端的不斷發(fā)展,用戶對(duì)智能終端的應(yīng)用需求越來越高。例如,在安卓系統(tǒng)中,用戶需要在同一臺(tái)設(shè)備上開啟兩個(gè)相同的應(yīng)用,這種需求被稱為應(yīng)用多開。
現(xiàn)有技術(shù)在實(shí)現(xiàn)應(yīng)用多開時(shí),需要用戶手動(dòng)創(chuàng)建分身應(yīng)用,并在分身應(yīng)用中輸入登錄信息等配置信息,進(jìn)而實(shí)現(xiàn)用戶使用主賬號(hào)在主應(yīng)用中操作,達(dá)到在同一臺(tái)設(shè)備上開啟兩個(gè)相同的應(yīng)用的效果。
然而,上述操作相對(duì)較為繁瑣,而且不同的手機(jī)生產(chǎn)廠商、手機(jī)系統(tǒng)版本的手機(jī)應(yīng)用多開技術(shù)不能相通,且一般應(yīng)用多開只限定于某一個(gè)特定的機(jī)型,或者特定的系統(tǒng)版本,不能真正做到普遍適用、覆蓋廣,且穩(wěn)定性不高。
技術(shù)實(shí)現(xiàn)要素:
為了克服現(xiàn)有技術(shù)的不足,本發(fā)明提出了一種應(yīng)用程序多開的實(shí)現(xiàn)方法及裝置,解決現(xiàn)有的應(yīng)用多開方法不能實(shí)現(xiàn)不同的手機(jī)生產(chǎn)廠商、手機(jī)系統(tǒng)版本的手機(jī)應(yīng)用多開技術(shù)相通,且一般應(yīng)用多開只限定于某一個(gè)特定的機(jī)型,或者特定的系統(tǒng)版本,不能真正做到普遍適用、覆蓋廣,且穩(wěn)定性不高的問題。
本發(fā)明為實(shí)現(xiàn)上述目的,采用以下技術(shù)方案實(shí)現(xiàn):
一種應(yīng)用程序多開的實(shí)現(xiàn)方法,包括以下步驟:
共享進(jìn)程,為安卓系統(tǒng)提供一個(gè)進(jìn)程運(yùn)行多個(gè)apk的機(jī)制;
提前申請(qǐng)注冊(cè)權(quán)限,通過預(yù)先占坑的方式提前向安卓系統(tǒng)申請(qǐng)權(quán)限;
hook機(jī)制,通過api欺騙機(jī)制瞞過系統(tǒng);
插件啟動(dòng),開啟兩個(gè)及兩個(gè)以上的相同應(yīng)用程序。
進(jìn)一步地,作為優(yōu)選技術(shù)方案,所述共享進(jìn)程的具體過程為:
分叉請(qǐng)求,安卓系統(tǒng)向虛擬引擎發(fā)送分叉命令以及相關(guān)參數(shù);
分叉執(zhí)行,虛擬引擎分叉出一個(gè)新的進(jìn)程。
進(jìn)一步地,作為優(yōu)選技術(shù)方案,所述提前申請(qǐng)注冊(cè)權(quán)限的具體過程為:
根預(yù)注冊(cè),預(yù)注冊(cè)一堆根活動(dòng)、根內(nèi)容提供者以及根服務(wù);
進(jìn)程預(yù)注冊(cè),預(yù)注冊(cè)一堆進(jìn)程;
動(dòng)態(tài)分配,用于實(shí)現(xiàn)進(jìn)程、根活動(dòng)、根內(nèi)容提供者以及根服務(wù)的動(dòng)態(tài)分配。
進(jìn)一步地,作為優(yōu)選技術(shù)方案,所述hook機(jī)制的具體過程為:
動(dòng)態(tài)代理,用于java虛擬機(jī)在運(yùn)行時(shí)動(dòng)態(tài)生成一系列的代理類;
代理綁定,進(jìn)程創(chuàng)建后對(duì)進(jìn)程進(jìn)行綁定;
進(jìn)程修改,改變進(jìn)程的名字;
進(jìn)一步地,作為優(yōu)選技術(shù)方案,還包括適配操作,具體如下:
api適配,為每個(gè)安卓系統(tǒng)版本的api進(jìn)行參數(shù)配置;
appops適配:為4.3以上系統(tǒng)appops檢測(cè)包名;
插件適配:io重定向。
一種應(yīng)用程序多開的實(shí)現(xiàn)裝置,包括:
共享進(jìn)程模塊,用于為安卓系統(tǒng)提供一個(gè)進(jìn)程運(yùn)行多個(gè)apk的機(jī)制;
提前申請(qǐng)注冊(cè)權(quán)限模塊,用于通過預(yù)先占坑的方式提前向安卓系統(tǒng)申請(qǐng)權(quán)限;
hook機(jī)制模塊,用于通過api欺騙機(jī)制瞞過系統(tǒng);
插件啟動(dòng)模塊,用于開啟兩個(gè)及兩個(gè)以上的相同應(yīng)用程序。
進(jìn)一步地,作為優(yōu)選技術(shù)方案,所述共享進(jìn)程模塊具體包括:
分叉請(qǐng)求模塊,用于使安卓系統(tǒng)向虛擬引擎發(fā)送分叉命令以及相關(guān)參數(shù);
分叉執(zhí)行模塊,用于使虛擬引擎分叉出一個(gè)新的進(jìn)程。
進(jìn)一步地,作為優(yōu)選技術(shù)方案,所述提前申請(qǐng)注冊(cè)權(quán)限模塊具體包括:
根預(yù)注冊(cè)模塊,用于預(yù)注冊(cè)一堆根活動(dòng)、根內(nèi)容提供者以及根服務(wù);
進(jìn)程預(yù)注冊(cè)模塊,用于預(yù)注冊(cè)一堆進(jìn)程;
動(dòng)態(tài)分配模塊,用于實(shí)現(xiàn)進(jìn)程、根活動(dòng)、根內(nèi)容提供者以及根服務(wù)的動(dòng)態(tài)分配。
進(jìn)一步地,作為優(yōu)選技術(shù)方案,所述hook機(jī)制模塊具體包括:
動(dòng)態(tài)代理模塊,用于java虛擬機(jī)在運(yùn)行時(shí)動(dòng)態(tài)生成一系列的代理類;
代理綁定模塊,用于進(jìn)程創(chuàng)建后對(duì)進(jìn)程進(jìn)行綁定;
進(jìn)程修改模塊,用于改變進(jìn)程的名字;
進(jìn)一步地,作為優(yōu)選技術(shù)方案,還包括適配操作模塊,具體包括:
api適配模塊,用于為每個(gè)安卓系統(tǒng)版本的api進(jìn)行參數(shù)配置;
appops適配模塊:用于為4.3以上系統(tǒng)appops檢測(cè)包名;
插件適配模塊:用于io重定向。
本發(fā)明與現(xiàn)有技術(shù)相比,具有以下優(yōu)點(diǎn)及有益效果:
(1)本發(fā)明提供一種應(yīng)用程序多開的實(shí)現(xiàn)方法及裝置,通過進(jìn)程共享、預(yù)先占坑的方式,不用在manifest.xml注冊(cè)申請(qǐng)權(quán)限,通過調(diào)用安卓系統(tǒng)原生的底層接口,并在其基礎(chǔ)上做一定的封裝和定制,實(shí)現(xiàn)了安卓應(yīng)用之間的相互調(diào)用,真正做到了跨平臺(tái)和跨版本,做到了普遍適用,覆蓋廣且穩(wěn)定性高。
(2)本發(fā)明摒棄了傳統(tǒng)的靜態(tài)代理,采用動(dòng)態(tài)代理,java虛擬機(jī)在運(yùn)行時(shí)動(dòng)態(tài)生成一系列的代理類,節(jié)省了大量的時(shí)間,提高了多開效率。
具體實(shí)施方式
下面結(jié)合實(shí)施例對(duì)本發(fā)明作進(jìn)一步地詳細(xì)說明,但本發(fā)明的實(shí)施方式不限于此。
實(shí)施例:
本實(shí)施例所述的一種應(yīng)用程序多開的實(shí)現(xiàn)方法,包括以下步驟:
共享進(jìn)程,為安卓系統(tǒng)提供一個(gè)進(jìn)程運(yùn)行多個(gè)apk的機(jī)制;
提前申請(qǐng)注冊(cè)權(quán)限,通過預(yù)先占坑的方式提前向安卓系統(tǒng)申請(qǐng)權(quán)限;
hook機(jī)制,通過api欺騙機(jī)制瞞過系統(tǒng);
插件啟動(dòng),開啟兩個(gè)及兩個(gè)以上的相同應(yīng)用程序。
優(yōu)選的,本實(shí)施例的共享進(jìn)程的具體過程為:
分叉請(qǐng)求,安卓系統(tǒng)向虛擬引擎發(fā)送分叉命令以及相關(guān)參數(shù);
分叉執(zhí)行,虛擬引擎分叉出一個(gè)新的進(jìn)程。
優(yōu)選的,本實(shí)施例的提前申請(qǐng)注冊(cè)權(quán)限的具體過程為:
根預(yù)注冊(cè),預(yù)注冊(cè)一堆根活動(dòng)、根內(nèi)容提供者以及根服務(wù);
進(jìn)程預(yù)注冊(cè),預(yù)注冊(cè)一堆進(jìn)程;
動(dòng)態(tài)分配,用于實(shí)現(xiàn)進(jìn)程、根活動(dòng)、根內(nèi)容提供者以及根服務(wù)的動(dòng)態(tài)分配。
優(yōu)選的,本實(shí)施例的hook機(jī)制的具體過程為:
動(dòng)態(tài)代理,用于java虛擬機(jī)在運(yùn)行時(shí)動(dòng)態(tài)生成一系列的代理類;
代理綁定,進(jìn)程創(chuàng)建后對(duì)進(jìn)程進(jìn)行綁定;
進(jìn)程修改,改變進(jìn)程的名字;
優(yōu)選的,本實(shí)施例還包括適配操作,具體如下:
api適配,為每個(gè)安卓系統(tǒng)版本的api進(jìn)行參數(shù)配置;
appops適配:為4.3以上系統(tǒng)appops檢測(cè)包名;
插件適配:io重定向。
一種應(yīng)用程序多開的實(shí)現(xiàn)裝置,包括:
共享進(jìn)程模塊,用于為安卓系統(tǒng)提供一個(gè)進(jìn)程運(yùn)行多個(gè)apk的機(jī)制;
提前申請(qǐng)注冊(cè)權(quán)限模塊,用于通過預(yù)先占坑的方式提前向安卓系統(tǒng)申請(qǐng)權(quán)限;
hook機(jī)制模塊,用于通過api欺騙機(jī)制瞞過系統(tǒng);
插件啟動(dòng)模塊,用于開啟兩個(gè)及兩個(gè)以上的相同應(yīng)用程序。
優(yōu)選的,本實(shí)施例的共享進(jìn)程模塊具體包括:
分叉請(qǐng)求模塊,用于使安卓系統(tǒng)向虛擬引擎發(fā)送分叉命令以及相關(guān)參數(shù);
分叉執(zhí)行模塊,用于使虛擬引擎分叉出一個(gè)新的進(jìn)程。
優(yōu)選的,本實(shí)施例的提前申請(qǐng)注冊(cè)權(quán)限模塊具體包括:
根預(yù)注冊(cè)模塊,用于預(yù)注冊(cè)一堆根活動(dòng)、根內(nèi)容提供者以及根服務(wù);
進(jìn)程預(yù)注冊(cè)模塊,用于預(yù)注冊(cè)一堆進(jìn)程;
動(dòng)態(tài)分配模塊,用于實(shí)現(xiàn)進(jìn)程、根活動(dòng)、根內(nèi)容提供者以及根服務(wù)的動(dòng)態(tài)分配。
優(yōu)選的,本實(shí)施例的hook機(jī)制模塊具體包括:
動(dòng)態(tài)代理模塊,用于java虛擬機(jī)在運(yùn)行時(shí)動(dòng)態(tài)生成一系列的代理類;
代理綁定模塊,用于進(jìn)程創(chuàng)建后對(duì)進(jìn)程進(jìn)行綁定;
進(jìn)程修改模塊,用于改變進(jìn)程的名字;
優(yōu)選的,本實(shí)施例還包括適配操作模塊,具體包括:
api適配模塊,用于為每個(gè)安卓系統(tǒng)版本的api進(jìn)行參數(shù)配置;
appops適配模塊:用于為4.3以上系統(tǒng)appops檢測(cè)包名;
插件適配模塊:用于io重定向。
在本實(shí)施例中,hook機(jī)制即通過api欺騙瞞過系統(tǒng),具體是通過更改系統(tǒng)的調(diào)用api名稱來實(shí)現(xiàn)瞞過系統(tǒng)。api即applicationinterface,系統(tǒng)和應(yīng)用(app)之間的溝通基礎(chǔ)就是通過調(diào)用api來實(shí)現(xiàn)。
在本實(shí)施例中,還包括進(jìn)程管理,如進(jìn)程分配、根組件分配以及進(jìn)程回收,進(jìn)程分配用于分配插件進(jìn)程,根組件分配用于分配服務(wù)(service)和活動(dòng)(activity),這是保證安卓系統(tǒng)正常運(yùn)行的基本組件;進(jìn)程回收用于實(shí)現(xiàn)空進(jìn)程回收。內(nèi)存處理器是編程人員容易出現(xiàn)問題的地方,忘記或者錯(cuò)誤的內(nèi)存回收會(huì)導(dǎo)致程序或系統(tǒng)的不穩(wěn)定甚至崩潰。java語言提供的gc功能可以自動(dòng)的檢測(cè)對(duì)象是否超過作用域,從而達(dá)到自動(dòng)回收內(nèi)存的目的,java語言沒有提供釋放已分配內(nèi)存的顯示操作方法,資源回收工作全部交由gc來完成,程序員不能精確的控制垃圾回收的時(shí)機(jī)。
在本實(shí)施例中,還包括包管理服務(wù):
插件管理,用于實(shí)現(xiàn)包的安裝、卸載以及更新;
安卓意圖解析匹配,用于將包解析為相應(yīng)的服務(wù)、活動(dòng);
包解析:解析出應(yīng)用程序的一些信息,用來描述作者、使用場(chǎng)景等技術(shù)信息。
另外,本實(shí)施例的包解析還可用于每個(gè)進(jìn)程啟動(dòng)時(shí)注冊(cè)靜態(tài)廣播。
本實(shí)施例中,api為安卓應(yīng)用之間相互調(diào)用的一個(gè)接口,而appops為應(yīng)用程序的操作(權(quán)限)管理,appops是谷歌原生安卓包含的功能,但是谷歌在每次版本更新時(shí)都會(huì)隱藏掉appops的入口;io重定向是將原輸入輸出更換到另外的地方,即是改變輸入輸出方向。基于此,本實(shí)施例通過調(diào)用安卓原生的底層接口,并在其基礎(chǔ)之上做一定的封裝和定制,用來實(shí)現(xiàn)跨平臺(tái)和跨版本,使應(yīng)用多開并不限定于某一個(gè)特定的機(jī)型,或者特定的系統(tǒng)版本,真正做到普遍適用、覆蓋廣,且穩(wěn)定性高。
以上所述,僅是本發(fā)明的較佳實(shí)施例,并非對(duì)本發(fā)明做任何形式上的限制,凡是依據(jù)本發(fā)明的技術(shù)實(shí)質(zhì)對(duì)以上實(shí)施例所作的任何簡單修改、等同變化,均落入本發(fā)明的保護(hù)范圍之內(nèi)。