本發(fā)明涉及移動終端技術(shù)領(lǐng)域,特別涉及一種應(yīng)用升級的方法及移動終端。
背景技術(shù):
在Android開發(fā)中一般是通過版本迭代的方式來不斷對應(yīng)用進(jìn)行升級操作,升級應(yīng)用常規(guī)的方式是通過彈出提示按鈕提示用戶是否需要進(jìn)行升級,如果用戶點擊同意升級,此時會對應(yīng)用進(jìn)行下載后再安裝,安裝過程需要用戶手動點擊確認(rèn)。
常規(guī)升級方案的處理過程處理起來比較麻煩,所有應(yīng)用都需要用戶進(jìn)行手動安裝,同時,對于某些版本的應(yīng)用,在使用過程中可能出現(xiàn)嚴(yán)重的問題需要所有用戶進(jìn)行升級,此時如果有部分用戶沒有進(jìn)行升級那么就很可能會出現(xiàn)用戶無法正常使用該應(yīng)用,或者使用該應(yīng)用造成不可控數(shù)據(jù)泄露或軟硬件不兼容的問題,這些問題在軟件開發(fā)過程中屬于非常嚴(yán)重的問題,而目前的應(yīng)用升級方案中升級策略單一,并沒有解決上述問題的有效方案。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供了一種應(yīng)用升級的方法及移動終端,解決目前應(yīng)用升級策略單一,避免某些出現(xiàn)嚴(yán)重問題的應(yīng)用版本用戶不進(jìn)行升級,而造成無法正常使用應(yīng)用或數(shù)據(jù)泄露等問題。
第一方面,本申請?zhí)峁┮环N應(yīng)用的升級方法,應(yīng)用于移動終端,所述方法包括:
獲取所述移動終端中已安裝的目標(biāo)應(yīng)用的第一版本信息;
從服務(wù)器獲取所述目標(biāo)應(yīng)用在所述服務(wù)器中的升級信息,所述升級信息中包括所述目標(biāo)應(yīng)用在所述服務(wù)器中的第二版本信息以及所述第二版本的目標(biāo)應(yīng)用的升級策略,所述服務(wù)器中應(yīng)用的升級策略包括普通升級和強制升級;
判斷所述第一版本信息與所述第二版本信息是否相同;
若所述第一版本信息與所述第二版本信息不同,且所述第二版本的目標(biāo)應(yīng)用的升級策略為強制升級,則從所述服務(wù)器下載所述第二版本的目標(biāo)應(yīng)用,并根據(jù)所述升級策略對所述移動終端進(jìn)行強制升級。
優(yōu)選的,所述方法還包括:
若所述第一版本信息與所述第二版本信息不同,且所述第二版本的目標(biāo)應(yīng)用的升級策略為普通升級,則檢測是否獲取到用戶確認(rèn)安裝所述第二版本的目標(biāo)應(yīng)用的指令;
若獲取到用戶確認(rèn)安裝所述第二版本的目標(biāo)應(yīng)用的指令,則從所述服務(wù)器下載所述第二版本的目標(biāo)應(yīng)用,并直接進(jìn)行安裝。
優(yōu)選的,所述從服務(wù)器獲取所述目標(biāo)應(yīng)用在所述服務(wù)器中的升級信息的步驟,具體包括:
向所述服務(wù)器發(fā)送所述目標(biāo)應(yīng)用升級信息的請求;
接收所述服務(wù)器返回的JSON格式的升級信息;
其中,所述JSON格式的升級信息中包括所述目標(biāo)應(yīng)用的第二版本信息字段、所述第二版本的目標(biāo)應(yīng)用的升級策略字段、所述第二版本的目標(biāo)應(yīng)用的下載地址字段、以及所述第二版本的目標(biāo)應(yīng)用的校驗碼字段。
優(yōu)選的,所述對所述移動終端進(jìn)行強制升級的步驟,具體包括:
檢測所述移動終端是否具有超級用戶權(quán)限;
若是,則通過所述超級用戶權(quán)限在所述移動終端進(jìn)行靜默的強制升級;
若否,則通過執(zhí)行預(yù)設(shè)腳本發(fā)送按鍵消息模擬點擊確認(rèn)升級事件,進(jìn)行強制升級。
優(yōu)選的,對所述移動終端進(jìn)行強制升級的步驟之前,所述方法還包括:
獲取下載的所述第二版本的目標(biāo)應(yīng)用的第一校驗碼;
獲取在本地預(yù)先保存的所述第二版本的目標(biāo)應(yīng)用的第二校驗碼;
判斷第一校驗碼與所述第二校驗碼是否相同,若相同,才執(zhí)行對所述移動終端進(jìn)行強制升級的步驟。
第二方面,本申請?zhí)峁┮环N移動終端,包括:
版本信息獲取單元,用于獲取所述移動終端中已安裝的目標(biāo)應(yīng)用的第一版本信息;
升級信息獲取單元,用于從服務(wù)器獲取所述目標(biāo)應(yīng)用在所述服務(wù)器中的升級信息,所述升級信息中包括所述目標(biāo)應(yīng)用在所述服務(wù)器中的第二版本信息以及所述第二版本的目標(biāo)應(yīng)用的升級策略,所述服務(wù)器中應(yīng)用的升級策略包括普通升級和強制升級;
判斷單元,用于判斷所述第一版本信息與所述第二版本信息是否相同;
升級單元,用于若所述第一版本信息與所述第二版本信息不同,且所述第二版本的目標(biāo)應(yīng)用的升級策略為強制升級,從所述服務(wù)器下載所述第二版本的目標(biāo)應(yīng)用,并根據(jù)所述升級策略對所述移動終端進(jìn)行強制升級。
優(yōu)選的,所述升級單元還用于:
若所述第一版本信息與所述第二版本信息不同,且所述第二版本的目標(biāo)應(yīng)用的升級策略為普通升級,則檢測是否獲取到用戶確認(rèn)安裝所述第二版本的目標(biāo)應(yīng)用的指令;
若獲取到用戶確認(rèn)安裝所述第二版本的目標(biāo)應(yīng)用的指令,則從所述服務(wù)器下載所述第二版本的目標(biāo)應(yīng)用,并直接進(jìn)行安裝。
優(yōu)選的,所述升級信息獲取單元具體用于:
向所述服務(wù)器發(fā)送所述目標(biāo)應(yīng)用升級信息的請求;
接收所述服務(wù)器返回的JSON格式的升級信息;
其中,所述JSON格式的升級信息中包括所述目標(biāo)應(yīng)用的第二版本信息字段、所述第二版本的目標(biāo)應(yīng)用的升級策略字段、所述第二版本的目標(biāo)應(yīng)用的下載地址字段、以及所述第二版本的目標(biāo)應(yīng)用的校驗碼字段。
優(yōu)選的,所述升級單元具體用于:
檢測所述移動終端是否具有超級用戶權(quán)限;
若是,則通過所述超級用戶權(quán)限在所述移動終端進(jìn)行靜默的強制升級;
若否,則通過執(zhí)行預(yù)設(shè)腳本發(fā)送按鍵消息模擬點擊確認(rèn)升級事件,進(jìn)行強制升級。
優(yōu)選的,所述移動終端還包括檢驗單元;
所述校驗單元用于:
在所述移動終端進(jìn)行強制升級的之前,獲取下載的所述第二版本的目標(biāo)應(yīng)用的第一校驗碼;
獲取在本地預(yù)先保存的所述第二版本的目標(biāo)應(yīng)用的第二校驗碼;
判斷第一校驗碼與所述第二校驗碼是否相同,若相同,才執(zhí)行對所述移動終端進(jìn)行強制升級的步驟。
從以上技術(shù)方案可以看出,本發(fā)明實施例具有以下優(yōu)點:
本發(fā)明實施例中通過獲取移動終端中已安裝的目標(biāo)應(yīng)用的第一版本信息,以及從服務(wù)器獲取目標(biāo)應(yīng)用在服務(wù)器中的升級信息,若第一版本信息與第二版本信息不同,且第二版本的目標(biāo)應(yīng)用的升級策略為強制升級,則從服務(wù)器下載第二版本的目標(biāo)應(yīng)用,并對移動終端進(jìn)行強制升級。本實施例中在服務(wù)器中對不同應(yīng)用配置不同的升級策略,對某些出現(xiàn)嚴(yán)重問題的應(yīng)用版本,配置強制升級,整個升級過程中不再需要人為干預(yù)并且對于是否強制升級可以通過服務(wù)器來進(jìn)行配置,避免了目前應(yīng)用升級策略單一,以及某些出現(xiàn)嚴(yán)重問題的應(yīng)用版本用戶不進(jìn)行升級,而造成無法正常使用應(yīng)用或數(shù)據(jù)泄露等問題,提高了應(yīng)用使用的安全性和便捷性。
附圖說明
圖1是本發(fā)明實施例中應(yīng)用升級的方法的一個實施例示意圖;
圖2是本發(fā)明實施例中應(yīng)用升級的方法的另一個實施例示意圖;
圖3是本發(fā)明實施例中檢查移動終端當(dāng)前網(wǎng)絡(luò)的環(huán)境狀態(tài)的一個實施例示意圖;
圖4是本發(fā)明實施例中步驟102的一個實施例示意圖;
圖5是本發(fā)明實施例中在移動終端進(jìn)行強制升級的一個實施例示意圖;
圖6是本發(fā)明實施例中移動終端的一個實施例示意圖;
圖7是本發(fā)明實施例中移動終端的另一個實施例示意圖。
具體實施方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分的實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應(yīng)當(dāng)屬于本發(fā)明保護的范圍。
本發(fā)明實施例中公開了一種應(yīng)用升級的方法,本發(fā)明實施例中方法可以在任意移動終端上實現(xiàn),移動終端可以是例如:手機、平板電腦等電子設(shè)備,還可以是其他具有聯(lián)網(wǎng)功能,安裝有應(yīng)用的移動終端,具體實現(xiàn)的移動終端本發(fā)明實施例不予限定,如圖1所示,該方法的一個實施例包括:
101、獲取所述移動終端中已安裝的目標(biāo)應(yīng)用的第一版本信息;
102、從服務(wù)器獲取所述目標(biāo)應(yīng)用在所述服務(wù)器中的升級信息,所述升級信息中包括所述目標(biāo)應(yīng)用在所述服務(wù)器中的第二版本信息以及所述第二版本的目標(biāo)應(yīng)用的升級策略;
本發(fā)明實施例中,對于服務(wù)器應(yīng)用的升級策略,包括普通升級和強制升級兩種方式,普通升級即按照下面描述的需要用戶確認(rèn)升級,而強制升級不需要用戶確認(rèn),直接升級。
103、判斷所述第一版本信息與所述第二版本信息是否相同;
104、若所述第一版本信息與所述第二版本信息不同,且所述第二版本的目標(biāo)應(yīng)用的升級策略為強制升級,則從所述服務(wù)器下載所述第二版本的目標(biāo)應(yīng)用,并根據(jù)所述升級策略對所述移動終端進(jìn)行強制升級。
本發(fā)明實施例中通過獲取移動終端中已安裝的目標(biāo)應(yīng)用的第一版本信息,以及從服務(wù)器獲取目標(biāo)應(yīng)用在服務(wù)器中的升級信息,若第一版本信息與第二版本信息不同,且第二版本的目標(biāo)應(yīng)用的升級策略為強制升級,則從服務(wù)器下載第二版本的目標(biāo)應(yīng)用,并在移動終端進(jìn)行強制升級。本實施例中在服務(wù)器中對不同應(yīng)用配置不同的升級策略,對某些出現(xiàn)嚴(yán)重問題的應(yīng)用版本,配置強制升級,整個升級過程中不再需要人為干預(yù)并且對于是否強制升級可以通過服務(wù)器來進(jìn)行配置,避免了目前應(yīng)用升級策略單一,以及某些出現(xiàn)嚴(yán)重問題的應(yīng)用版本用戶不進(jìn)行升級,而造成無法正常使用應(yīng)用或數(shù)據(jù)泄露等問題,提高了應(yīng)用使用的安全性和便捷性。
進(jìn)一步的,如圖2所示,在本發(fā)明一些實施例中所述方法還可以包括:
105、若所述第一版本信息與所述第二版本信息不同,且所述第二版本的目標(biāo)應(yīng)用的升級策略為普通升級,則檢測是否獲取到用戶確認(rèn)安裝所述第二版本的目標(biāo)應(yīng)用的指令;
106、若獲取到用戶確認(rèn)安裝所述第二版本的目標(biāo)應(yīng)用的指令,則從所述服務(wù)器下載所述第二版本的目標(biāo)應(yīng)用,并直接進(jìn)行安裝。
這樣,在所述第二版本的目標(biāo)應(yīng)用的升級策略為普通升級時,若獲取到用戶確認(rèn)安裝所述第二版本的目標(biāo)應(yīng)用的指令,下載述第二版本的目標(biāo)應(yīng)用直接進(jìn)行安裝,避免了用戶點擊了確認(rèn)升級后,在安裝文件下載好后,還需手動點擊安裝的過程,提高了升級效率,提高了用戶體驗。
可選的,在本發(fā)明實施例中,獲取所述移動終端中已安裝的目標(biāo)應(yīng)用的第一版本信息的步驟可以是在應(yīng)用啟動過程進(jìn)行,也可以是預(yù)先設(shè)定檢查周期(例如每天晚上凌晨,推定用戶不再使用移動終端)對應(yīng)用進(jìn)行檢測時進(jìn)行,還可以是在滿足某些設(shè)定的觸發(fā)條件時進(jìn)行,例如,移動終端連接Wi-Fi時,用戶點擊移動終端中的應(yīng)用管家,查閱可以升級的應(yīng)用時等,當(dāng)然,還可以同時設(shè)定上述一種或多種方式獲取,例如,在每次應(yīng)用啟動過程進(jìn)行該步驟,在用戶每次連接Wi-Fi時也進(jìn)行該步驟,以及在每天凌晨推定用戶不再使用移動終端時進(jìn)行該步驟等,此處不作限定。
優(yōu)選的,獲取所述移動終端中已安裝的目標(biāo)應(yīng)用的第一版本信息的步驟可以是在應(yīng)用啟動過程中進(jìn)行的,這樣能夠保證應(yīng)用每次啟動的時候都能夠去檢測當(dāng)前應(yīng)用是否滿足服務(wù)器版本要求。能夠?qū)?yīng)用升級的時效性有一定的保障。
本發(fā)明實施例中,步驟101中獲取所述移動終端中已安裝的目標(biāo)應(yīng)用的第一版本信息的具體實現(xiàn)方式可以如下:
當(dāng)移動終端的系統(tǒng)為Android系統(tǒng)時,在Android系統(tǒng)中只能夠通過getPackageManager函數(shù)就能夠獲取到當(dāng)前系統(tǒng)的包管理者對象PackageManager,其中g(shù)etPackageManager是Android系統(tǒng)體用的一個獲取系統(tǒng)包管理對象的方法。
調(diào)用包管理者PackageManager中的getPackageInfo函數(shù)返回當(dāng)前目標(biāo)應(yīng)用程序中的包相關(guān)信息的結(jié)構(gòu)體PackageInfo。PackageInfo結(jié)構(gòu)體中存儲了該目標(biāo)應(yīng)用程序相關(guān)的版本信息等。
調(diào)用PackageManager中的versionName函數(shù)就能夠獲取到當(dāng)前目標(biāo)應(yīng)用程序的版本號信息了。其中versionName函數(shù)是返回報信息中的當(dāng)前應(yīng)用版本信息,即本發(fā)明實施例中的第一版本信息。
通過上述執(zhí)行流程即可知獲取所述移動終端中已安裝的目標(biāo)應(yīng)用的第一版本信息的過程了,為了后續(xù)的舉例描述方便,將當(dāng)前第一版本信息標(biāo)記為localVersion。
進(jìn)一步的,當(dāng)獲取所述移動終端中已安裝的目標(biāo)應(yīng)用的第一版本信息的步驟是在應(yīng)用啟動過程中進(jìn)行時,則在該獲取所述移動終端中已安裝的目標(biāo)應(yīng)用的第一版本信息的步驟之前,還需要先檢查移動終端當(dāng)前網(wǎng)絡(luò)的環(huán)境狀態(tài),判定移動終端當(dāng)前網(wǎng)絡(luò)的環(huán)境狀態(tài)是Wi-Fi還是移動網(wǎng)絡(luò)狀態(tài)。
如圖3所示,檢查移動終端當(dāng)前網(wǎng)絡(luò)的環(huán)境狀態(tài)還可以進(jìn)一步包括:
301、獲取移動終端中網(wǎng)絡(luò)連接管理類;
當(dāng)移動終端的系統(tǒng)為安卓(Android)系統(tǒng)時,網(wǎng)絡(luò)連接管理類可以是ConnectivityManager,ConnectivityManager是Android提供的一個專門用于獲取網(wǎng)絡(luò)連接管理狀態(tài)的幫助類文件??梢酝ㄟ^ConnectivityManager來獲取系統(tǒng)的相關(guān)連接狀態(tài)。安卓(Android)系統(tǒng)中通過調(diào)用context.getSystemService函數(shù)來獲取到系統(tǒng)提供的ConnectivityManager管理類。
302、通過所述網(wǎng)絡(luò)連接管理類獲取網(wǎng)絡(luò)描述結(jié)構(gòu)體;
當(dāng)移動終端的系統(tǒng)為安卓(Android)系統(tǒng)時,網(wǎng)絡(luò)描述結(jié)構(gòu)體可以為NetworkInfo,NetworkInfo網(wǎng)絡(luò)信息描述結(jié)構(gòu)體主要封裝了系統(tǒng)當(dāng)前的網(wǎng)絡(luò)連接狀態(tài)。通過調(diào)用getActiveNetworkInfo函數(shù)來獲取到NetworkInfo網(wǎng)絡(luò)信息描述結(jié)構(gòu)體。其中g(shù)etActiveNetworkInfo函數(shù)會將當(dāng)前網(wǎng)絡(luò)信息描述結(jié)構(gòu)體NetworkInfo進(jìn)行返回。
303、通過所述網(wǎng)絡(luò)描述結(jié)構(gòu)體中的網(wǎng)絡(luò)連接函數(shù)來判斷移動終端當(dāng)前的網(wǎng)絡(luò)連接狀態(tài)。
當(dāng)移動終端的系統(tǒng)為安卓(Android)系統(tǒng)時,通過NetworkInfo中的isConnected函數(shù)來判斷當(dāng)前的網(wǎng)絡(luò)連接狀態(tài),
isConnected函數(shù)如果返回true(真),說明當(dāng)前處于網(wǎng)絡(luò)連接狀態(tài)。
isConnected函數(shù)如果返回false(假),說明當(dāng)前處于網(wǎng)絡(luò)斷開狀態(tài)。
如果網(wǎng)絡(luò)處于連接狀態(tài)下一步會進(jìn)行網(wǎng)絡(luò)類型的判斷,如果當(dāng)前網(wǎng)絡(luò)處于斷開狀態(tài)可以直接停止掉整個升級過程。因為無網(wǎng)絡(luò)狀態(tài)下無法進(jìn)行軟件升級更新過程。
另外,可以通過NetworkInfo中的getTypeName函數(shù)來判定當(dāng)前的網(wǎng)絡(luò)類型。其中g(shù)etTypeName函數(shù)返回的是一個字符串,具體返回的值如下所示:
WIFI:表示當(dāng)前網(wǎng)絡(luò)環(huán)境是Wi-Fi狀態(tài)。
MOBILE:表示當(dāng)前網(wǎng)絡(luò)環(huán)境是2G/3G/4G狀態(tài),該狀態(tài)表明當(dāng)前網(wǎng)絡(luò)環(huán)境是移動網(wǎng)絡(luò)狀態(tài)。
可以通過getTypeName返回的類型的不同來判定當(dāng)前網(wǎng)絡(luò)的環(huán)境狀態(tài)是Wi-Fi還是移動網(wǎng)絡(luò)狀態(tài)。
進(jìn)一步的,如圖4所示,在本發(fā)明實施例中,步驟102中的從服務(wù)器獲取所述目標(biāo)應(yīng)用在所述服務(wù)器中的升級信息,可以進(jìn)一步包括:
1021、向所述服務(wù)器發(fā)送所述目標(biāo)應(yīng)用升級信息的請求;
1022、接收所述服務(wù)器返回的JSON格式的升級信息;
其中,所述JSON格式的升級信息中包括所述目標(biāo)應(yīng)用的第二版本信息字段、所述第二版本的目標(biāo)應(yīng)用的升級策略字段、所述第二版本的目標(biāo)應(yīng)用的下載地址字段、以及所述第二版本的目標(biāo)應(yīng)用的校驗碼字段。
具體的,步驟102中的從服務(wù)器獲取所述目標(biāo)應(yīng)用在所述服務(wù)器中的升級信息可以是:
目標(biāo)應(yīng)用客戶端通過HTTP向服務(wù)器請求目標(biāo)應(yīng)用的第二版本信息(即目標(biāo)應(yīng)用在服務(wù)器中的版本信息),服務(wù)器返回的第二版本信息是通過JSON格式文件返回到目標(biāo)應(yīng)用客戶端。目標(biāo)應(yīng)用客戶端通過解析JSON格式文件來判定升級策略。
例如,服務(wù)器返回的目標(biāo)應(yīng)用的第二版本信息返回的JSON數(shù)據(jù)格式定義如下所示:
對上述各個字段進(jìn)行說明:
version:服務(wù)器中應(yīng)用程序的版本信息。為了后續(xù)描述方便標(biāo)記解析出來的version為serverVersion。
updateState:服務(wù)器返回的升級策略,本方案中升級狀態(tài)分為2種類型,其一是normal普通升級策略,其二是force強制升級策略。為了后續(xù)描述方便標(biāo)記解析出來的updateState為serverUpdateState。
url:應(yīng)用程序的下載地址,也就是移動終端后續(xù)進(jìn)行下載流程的下載文件地址,為了后續(xù)描述方便本發(fā)明實施例中標(biāo)記解析出來的url為serverUrl。
md5:升級應(yīng)用APK文件的md5校驗碼,用于校驗下載文件的完整性。為了后續(xù)描述方便本發(fā)明實施例中標(biāo)記解析出來的md5為serverMd5。
由于JSON是一種通用的網(wǎng)絡(luò)傳輸格式,屬于一個常規(guī)的現(xiàn)有技術(shù),本發(fā)明實施例中移動終端在獲取到包含目標(biāo)應(yīng)用在服務(wù)器中的第二版本信息的JSON格式文件后,可以使用通用的FastJson來對該JSON格式文件進(jìn)行解析。將該JSON字符串中的每一個字段信息解析出來,即可獲得目標(biāo)應(yīng)用的第二版本信息、所述第二版本的目標(biāo)應(yīng)用的升級策略、所述第二版本的目標(biāo)應(yīng)用的下載地址、所述第二版本的目標(biāo)應(yīng)用的校驗碼字段等。
在移動終端本地中獲取到目標(biāo)應(yīng)用的第一版本信息,以及在服務(wù)器獲取到目標(biāo)應(yīng)用的第二版本信息后,需要比對第一版本信息和第二版本信息的是否相同,繼續(xù)以移動終端為Android系統(tǒng)為例,一種具體的比對方式如下:
對上述獲取的localVersion和serverVersion版本號進(jìn)行大小比較,其中l(wèi)ocalVersion和serverVersion版本號均是整數(shù)。
如果localVersion<serverVersion,那么說明本地版本號比服務(wù)器版本號小,這個時候需要進(jìn)行升級處理。
如果localVersion>=serverVersion,那么說明本地版本號比服務(wù)器版本號大或者等于服務(wù)器版本號,這個時候不需要進(jìn)行升級處理。
若通過第一版本信息和第二版本信息的比對后發(fā)現(xiàn)不需要進(jìn)行升級處理,此時可以直接進(jìn)入到應(yīng)用主界面,不會進(jìn)行后續(xù)的升級操作流程。
若通過第一版本信息和第二版本信息的比對后發(fā)現(xiàn)需要進(jìn)行升級處理此時,則需要進(jìn)一步對升級策略進(jìn)行一個判斷。具體的判斷方法是通過上述步驟中解析出來的serverUpdateState字段信息來進(jìn)行判定。
如果是serverUpdateState字段的值是normal,表明采用的是普通升級方式來進(jìn)行升級處理。
如果是serverUpdateState字段的值是force,表明采用的是強制升級方式來進(jìn)行升級處理。
在上述確定移動終端需要升級目標(biāo)應(yīng)用后,如果之前判斷當(dāng)前網(wǎng)絡(luò)狀態(tài)是移動網(wǎng)絡(luò)(即2/3/4G網(wǎng)絡(luò)狀態(tài))的情況下,彈出一個提示框告知用戶當(dāng)前網(wǎng)絡(luò)環(huán)境是2/3/4G網(wǎng)絡(luò)環(huán)境,下載將會耗費一定的流量,是否確認(rèn)下載。如果用戶點擊下載則在2/3/4G網(wǎng)絡(luò)環(huán)境下也會進(jìn)行目標(biāo)應(yīng)用下載操作,如果用戶點擊取消則終止下載的流程。如果當(dāng)前是WIFI網(wǎng)絡(luò)環(huán)境下的時候則直接開啟下載目標(biāo)應(yīng)用。
本發(fā)明實施例中,在目標(biāo)應(yīng)用的文件下載完成后,為了確保文件的完整性,此處還可以對文件進(jìn)行了校驗碼校驗,因此,在對所述移動終端進(jìn)行強制升級的步驟之前,所述方法還包括:
獲取下載的所述第二版本的目標(biāo)應(yīng)用的第一校驗碼;
獲取在本地預(yù)先保存的所述第二版本的目標(biāo)應(yīng)用的第二校驗碼;
判斷第一校驗碼與所述第二校驗碼是否相同,若相同,才執(zhí)行對所述移動終端進(jìn)行強制升級的步驟。
下面以MD5校驗過程進(jìn)行舉例。具體的文件MD5校驗過程如下所示:
(1)獲取MessageDigest;
MessageDigest類是Android系統(tǒng)提供給開發(fā)者的一個獲取文件MD5信息的類,通過MessageDigest類的功能能夠有效的獲取到文件的MD5信息。
具體獲取MessageDigest方法是通過MessageDigest的構(gòu)造函數(shù)獲取到系統(tǒng)提供的MessageDigest的實例。
(2)調(diào)用update方法;
獲取到MessageDigest中的實例中的update方法來獲取文件的MD5信息。其中update方法主要是數(shù)據(jù)處理功能,如果update處理完數(shù)據(jù)后就能返回對應(yīng)的MD5值。
(3)獲取文件的MD5信息;
通過第(2)步中的update方法就能夠獲取到對應(yīng)的MD5值信息了,本發(fā)明實施例中可以將獲取到的MD5值標(biāo)記為localMd5。
如果MD5校驗成功了,說明整個目標(biāo)應(yīng)用下載過程已經(jīng)完成了。為了方便后續(xù)的舉例描述,此處將下載好的文件標(biāo)記為downloadApk。
進(jìn)一步的,如圖5所示,步驟104中的所述在所述移動終端進(jìn)行強制升級的步驟,具體包括:
501、檢測所述移動終端是否具有超級用戶權(quán)限,若是,則執(zhí)行步驟502,若否,則執(zhí)行步驟503;
502、通過所述超級用戶權(quán)限在所述移動終端進(jìn)行靜默的強制升級;
503、通過執(zhí)行預(yù)設(shè)腳本發(fā)送按鍵消息模擬點擊確認(rèn)升級事件,進(jìn)行強制升級。
在Android系統(tǒng)中,超級用戶權(quán)限即為root權(quán)限,因此步驟501中的判斷檢測所述移動終端是否具有超級用戶權(quán)限,即判斷當(dāng)前移動終端環(huán)境是否是root環(huán)境,如果是root環(huán)境則后續(xù)可以直接進(jìn)行靜默升級,如果是非root環(huán)境可以通過腳本方式來實現(xiàn)自動升級。
在Android系統(tǒng)中,判斷是否具有root權(quán)限的方式如下:
(1)執(zhí)行su命令
執(zhí)行su命令,通過代碼執(zhí)行su命令具體方式是Runtime.getRuntime().exec("su");這個函數(shù)的意思是通過系統(tǒng)提供的運行時環(huán)境去執(zhí)行su命令。
其中su命令在linux系統(tǒng)中表示獲取root權(quán)限的意思,如果執(zhí)行成功表示能夠獲取到系統(tǒng)的root權(quán)限。如果su執(zhí)行失敗表示無法獲取到系統(tǒng)的root權(quán)限。
Runtime.getRuntime().exec("su")這個函數(shù)執(zhí)行后會返回一個Process的實例,這個Process實例表示的是當(dāng)前執(zhí)行su的進(jìn)程。
(2)讀取su命令的返回值
這一步主要是獲取su執(zhí)行后的返回值,需要獲取su執(zhí)行后的返回值首先需要等待Process執(zhí)行完成,具體是調(diào)用Process中的waiteFor函數(shù)。
waiteFor函數(shù)主要是檢測進(jìn)程是否執(zhí)行完成,如果執(zhí)行完就返回執(zhí)行完成的結(jié)果,如果沒有執(zhí)行完成waitFor函數(shù)會一直等到執(zhí)行完成才返回。為了描述方便將返回的結(jié)果標(biāo)記為result。
(3)根據(jù)返回結(jié)果判斷是否具有root權(quán)限
可以根據(jù)result的返回值來判斷su命令是否執(zhí)行成功。如果執(zhí)行成功表示具有root權(quán)限,如果沒有執(zhí)行成功表示不具備root權(quán)限。
如果result=0,表示su命令的執(zhí)行是成功的,此時說明該系統(tǒng)是具備有root權(quán)限的。
如果result?。?,表示su命令執(zhí)行失敗了,此時說明該系統(tǒng)不具備root權(quán)限。
對于具有root權(quán)限的移動終端可以通過調(diào)用系統(tǒng)提供的pm命令來實現(xiàn)后臺的靜默安裝。Pm命令是Android系統(tǒng)提供的一個專門用于調(diào)試應(yīng)用程序的時候安裝調(diào)試包的命令,通過該命令的執(zhí)行能夠?qū)崿F(xiàn)應(yīng)用程序后臺的靜默升級流程。而對于沒有root權(quán)限的移動終端,則不能調(diào)用pm命令實現(xiàn)靜默強制升級。
下面分別對具有root權(quán)限的應(yīng)用升級和不具有root權(quán)限的應(yīng)用升級的方式進(jìn)行介紹:
1、具有root權(quán)限的應(yīng)用升級:
(1)獲取下載文件的路徑
文件的下載路徑是在下載模塊下載的時候已經(jīng)保存了,此處可以直接獲取當(dāng)時保存的數(shù)據(jù)即可。
通過上述下載模塊的保存的文件的具體下載路徑為downloadApk。
(2)執(zhí)行PM命令進(jìn)行安裝
通過執(zhí)行Pm命令來進(jìn)行安裝APK文件,Pm命令是Android系統(tǒng)提供的一個專門用于調(diào)試應(yīng)用程序的時候安裝調(diào)試包的命令,通過該命令的執(zhí)行能夠?qū)崿F(xiàn)應(yīng)用程序后臺的靜默升級流程。
Pm的具體使用方式如下:
Pm install-f downloadAPk
接下來對上述安裝命令進(jìn)行詳細(xì)解釋:
Pm:安裝的命令
Install:表示需要執(zhí)行安裝操作
-f:表示強制安裝,如果原來系統(tǒng)中沒有安裝該APK,那么會直接進(jìn)行安裝,如果原來系統(tǒng)中已經(jīng)存在了該APK,那么會強制覆蓋原來安裝的版本。
DownloadApk:表示具體需要被安裝的apk文件。
上述pm命令的執(zhí)行是通過調(diào)研Runtime.getRuntime().exec()函數(shù)來進(jìn)行執(zhí)行的,Runtime.getRuntime().exec()函數(shù)在上文已經(jīng)有相關(guān)說明,此處不再說明。
(3)安裝結(jié)果反饋
可以通過調(diào)用waiteFor函數(shù)來獲取當(dāng)前命里執(zhí)行的返回值。如果返回值等于0表示執(zhí)行成功,如果返回值不等于0表示執(zhí)行失敗。
這個判斷過程和上述su執(zhí)行過程類似,此處不再詳述。
2、不具有root權(quán)限的應(yīng)用升級:
由于在非root環(huán)境下是無法調(diào)用系統(tǒng)的pm命令來實現(xiàn)強制升級的,這種情況下,本發(fā)明實施例中通過腳本來發(fā)送按鍵消息的方式來模擬點擊事件實現(xiàn)自動升級流程。也就是說將以前需要人去執(zhí)行的過程通過腳本發(fā)送按鍵消息的形式來進(jìn)行模擬點擊事件,從而達(dá)到自動升級目標(biāo)應(yīng)用的目的。
具體實現(xiàn)方式如下:
在Android中系統(tǒng)提供了一個Instrumentation接口去模擬發(fā)送按鍵消息,其中有一個sendKeyDownUpSync函數(shù),這個函數(shù)主要功能是向手機端發(fā)送一個按鍵信息。
一個按鍵信息在Android中是通過MotionEvent來進(jìn)行描述的,MotionEvent中包含按鍵的坐標(biāo)信息和按鍵事件信息。也就是說MotionEvent這個結(jié)構(gòu)體中包含了一個時間的所有描述信息。
這樣本發(fā)明實施例中就可以通過sendKeyDownUpSync將MotionEvent傳遞到sendKeyDownUpSync函數(shù)中就能夠?qū)崿F(xiàn)向系統(tǒng)界面上某個點發(fā)送一條按鍵消息了。
通過上面的介紹知道如何向系統(tǒng)發(fā)送一條按鍵命令了,此時本發(fā)明實施例中可以再根據(jù)整個升級執(zhí)行的操作流程來發(fā)送對應(yīng)的按鍵信息。
通過這樣的方式根據(jù)手動操作的流程方式不斷的像屏幕發(fā)送按鍵信息來模擬人的手動操作過程。通過這樣的方式來達(dá)到自動安裝升級APK的目的。
本發(fā)明實施例中,在安裝目標(biāo)應(yīng)用后,還需要檢測目標(biāo)應(yīng)用是否安裝成功。此步驟中檢測是否安裝成功的方式是判斷目標(biāo)應(yīng)用當(dāng)前安裝版本信息是否變?yōu)榉?wù)器中需要升級的版本信息(即目標(biāo)應(yīng)用的第二版本信息)。
通過前文所述方法來讀取當(dāng)前已經(jīng)安裝文件的版本信息并和服務(wù)器傳遞過來的文件版本信息進(jìn)行對比,如果相同說明升級成功。如果不相等說明升級失敗,同時,將升級結(jié)果狀態(tài)反饋到服務(wù)器,這個結(jié)果狀態(tài)的反饋主要指的是將升級成功或者失敗的結(jié)果反饋到服務(wù)器端,方便服務(wù)對升級成功或者失敗的結(jié)果進(jìn)行統(tǒng)計處理。由于前文中都已經(jīng)詳細(xì)敘述了不同情況下升級檢測情況所以本處不在重復(fù)敘述。升級結(jié)果狀態(tài)是通過HTTP協(xié)議傳遞到服務(wù)器的,主要是方便服務(wù)器來進(jìn)行統(tǒng)計升級成功率,對于后期方案的改進(jìn)或運營人員的需求有一定的幫助作用。
本發(fā)明實施例中,在目標(biāo)應(yīng)用升級失敗時可以提示用戶進(jìn)行手動升級,或者繼續(xù)再進(jìn)行一次上述應(yīng)用升級的方法。
下面介紹本發(fā)明實施例中移動終端的實施例。
請參閱圖6,為本發(fā)明實施例中移動終端的一個實施例示意圖,該移動終端600包括:
版本信息獲取單元601,用于獲取所述移動終端中已安裝的目標(biāo)應(yīng)用的第一版本信息;
升級信息獲取單元602,用于從服務(wù)器獲取所述目標(biāo)應(yīng)用在所述服務(wù)器中的升級信息,所述升級信息中包括所述目標(biāo)應(yīng)用在所述服務(wù)器中的第二版本信息以及所述第二版本的目標(biāo)應(yīng)用的升級策略,所述服務(wù)器中應(yīng)用的升級策略包括普通升級和強制升級;
判斷單元603,用于判斷所述第一版本信息與所述第二版本信息是否相同;
升級單元604,用于若所述第一版本信息與所述第二版本信息不同,且所述第二版本的目標(biāo)應(yīng)用的升級策略為強制升級,從所述服務(wù)器下載所述第二版本的目標(biāo)應(yīng)用,并根據(jù)所述升級策略在所述移動終端進(jìn)行強制升級。
進(jìn)一步的,所述升級單元604還用于:
若所述第一版本信息與所述第二版本信息不同,且所述第二版本的目標(biāo)應(yīng)用的升級策略為普通升級,則檢測是否獲取到用戶確認(rèn)安裝所述第二版本的目標(biāo)應(yīng)用的指令;
若獲取到用戶確認(rèn)安裝所述第二版本的目標(biāo)應(yīng)用的指令,則從所述服務(wù)器下載所述第二版本的目標(biāo)應(yīng)用,并直接進(jìn)行安裝。
進(jìn)一步的,所述升級信息獲取單元602具體用于:
向所述服務(wù)器發(fā)送所述目標(biāo)應(yīng)用升級信息的請求;
接收所述服務(wù)器返回的JSON格式的升級信息;
其中,所述JSON格式的升級信息中包括所述目標(biāo)應(yīng)用的第二版本信息字段、所述第二版本的目標(biāo)應(yīng)用的升級策略字段、所述第二版本的目標(biāo)應(yīng)用的下載地址字段、以及所述第二版本的目標(biāo)應(yīng)用的校驗碼字段。
進(jìn)一步的,所述升級單元604具體用于:
檢測所述移動終端是否具有超級用戶權(quán)限;
若是,則通過所述超級用戶權(quán)限在所述移動終端進(jìn)行靜默的強制升級;
若否,則通過執(zhí)行預(yù)設(shè)腳本發(fā)送按鍵消息模擬點擊確認(rèn)升級事件,進(jìn)行強制升級。
進(jìn)一步的,如圖7,所述移動終端600還包括檢驗單元605;
所述校驗單元605用于:
在所述移動終端進(jìn)行強制升級的之前,獲取下載的所述第二版本的目標(biāo)應(yīng)用的第一校驗碼;
獲取在本地預(yù)先保存的所述第二版本的目標(biāo)應(yīng)用的第二校驗碼;
判斷第一校驗碼與所述第二校驗碼是否相同,若相同,才執(zhí)行對所述移動終端進(jìn)行強制升級的步驟。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實施例中的對應(yīng)過程,在此不再贅述。
另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
以上所述,以上實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的精神和范圍。