本公開涉及渠道包處理領域,尤其涉及渠道包生成方法及裝置、終端和服務器。
背景技術:
相關技術中,可以通過在安卓安裝包(Android Package,APK)程序包中未被簽名保護的區域寫入渠道數據的方式,生成渠道包;或者還可以通過重新簽名或重新打包的方式生成包括渠道數據的渠道包。
但是,新發布的安卓系統為平臺增加了大量保護方案,其中的簽名方案是對整個APK程序包對應的APK文件進行了保護,因此無法使用上述第一種方式生成渠道包。而采用上述第二種方式生成渠道包的過程比較緩慢,消耗時間較長。
技術實現要素:
有鑒于此,本申請提供一種提供了渠道包生成方法及裝置、終端和服務器,以解決相關技術中的不足。
根據本公開實施例的第一方面,提供一種渠道包生成方法,所述方法用于終端或服務器,包括:
生成渠道數據;
在安卓安裝包APK程序包中的目標位置,寫入所述渠道數據,獲得渠道包;
其中,所述目標位置是所述APK程序包的APK簽名區中對應于渠道數據標識的渠道數據所在位置。
根據本公開實施例的第二方面,提供一種渠道包生成裝置,所述裝置用于終端或服務器,包括:
渠道數據生成模塊,用于生成渠道數據;
渠道包生成模塊,用于在安卓安裝包APK程序包中的目標位置,寫入所述渠道數據,獲得渠道包;
其中,所述目標位置是所述APK程序包的APK簽名區中對應于渠道數據標識的渠道數據所在位置。
根據本公開實施例的第三方面,提供一種計算機可讀存儲介質,所述存儲介質存儲有計算機程序,所述計算機程序用于執行上述第一方面所述的渠道包生成方法。
根據本公開實施例的第四方面,提供一種終端,包括:
處理器;
用于存儲處理器可執行指令的存儲器;
其中,所述處理器,用于執行上述第一方面所述的渠道包生成方法。
根據本公開實施例的第五方面,提供一種服務器,包括:
處理器;
用于存儲處理器可執行指令的存儲器;
其中,所述處理器,用于執行上述第一方面所述的渠道包生成方法。
由以上技術方案可見,可以將生成的渠道數據寫入APK程序包的APK簽名區中對應于渠道數據標識的渠道數據所在位置,即目標位置,從而獲得渠道包。這樣即使安卓系統的簽名方案是對整個APK文件進行了保護,仍然可以生成渠道包。同時無需重新簽名或重新打包,縮短了生成渠道包的時間,可以更加快捷、簡單地得到渠道包。
應當理解的是,以上的一般描述和后文的細節描述僅是示例性和解釋性的,并不能限制本公開。
附圖說明
此處的附圖被并入說明書中并構成本說明書的一部分,示出了符合本公開的實施例,并與說明書一起用于解釋本公開的原理。
圖1是本公開根據一示例性實施例示出的一種渠道包生成方法流程圖;
圖2是本公開根據一示例性實施例示出的另一種渠道包生成方法流程圖;
圖3是本公開根據一示例性實施例示出的另一種渠道包生成方法流程圖;
圖4是本公開根據一示例性實施例示出的另一種渠道包生成方法流程圖;
圖5是本公開根據一示例性實施例示出的另一種渠道包生成方法流程圖;
圖6是本公開根據一示例性實施例示出的另一種渠道包生成方法流程圖;
圖7是本公開根據一示例性實施例示出的另一種渠道包生成方法流程圖;
圖8是本公開根據一示例性實施例示出的另一種渠道包生成方法流程圖;
圖9是本公開根據一示例性實施例示出的一種渠道包生成裝置框圖;
圖10是本公開根據一示例性實施例示出的另一種渠道包生成裝置框圖;
圖11是本公開根據一示例性實施例示出的另一種渠道包生成裝置框圖;
圖12是本公開根據一示例性實施例示出的另一種渠道包生成裝置框圖;
圖13是本公開根據一示例性實施例示出的終端的結構示意圖;
圖14是本公開根據一示例性實施例示出的服務器的結構示意圖。
具體實施方式
這里將詳細地對示例性實施例進行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本公開相一致的所有實施方式。相反,它們僅是與如所附權利要求書中所詳述的、本公開的一些方面相一致的裝置和方法的例子。
在本公開運行的術語是僅僅出于描述特定實施例的目的,而非旨在限制本公開。在本公開和所附權利要求書中所運行的單數形式的“一種”、“所述”和“該”也旨在包括多數形式,除非上下文清楚地表示其他含義。還應當理解,本文中運行的術語“和/或”是指并包含一個或多個相關聯的列出項目的任何或所有可能組合。
應當理解,盡管在本公開可能采用術語第一、第二、第三等來描述各種信息,但這些信息不應限于這些術語。這些術語僅用來將同一類型的信息彼此區分開。例如,在不脫離本公開范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語境,如在此所運行的詞語“如果”可以被解釋成為“在……時”或“當……時”或“響應于確定”。
本公開實施例提供的渠道包生成方法可以用于終端或服務器。其中,所述服務器可以是應用超文本傳輸協議(HyperText Transfer Protocol,http)的服務器。圖1是本申請一示例性實施例示出的一種渠道包生成方法,包括以下步驟:
在步驟101中,生成渠道數據;
在步驟102中,在安卓安裝包APK程序包中的目標位置,寫入所述渠道數據,獲得渠道包;
其中,所述目標位置是所述APK程序包的APK簽名區中對應于渠道數據標識的渠道數據所在位置。
本公開實施例通過在APK程序包的APK簽名區中對應于渠道數據標識的渠道數據所在位置,即目標位置寫入生成的渠道數據,從而可以獲得渠道包。即使簽名方案是對整個APK文件進行了保護,仍然可以采用本公開實施例提供的方法確保生成渠道包。另外,上述過程并不涉及重新簽名或重新打包的過程,因此,可以解決通過重新簽名或重新打包的方式生成渠道包時,過程緩慢且消耗時間長的問題。
相關技術中,渠道包指的是在各大應用市場發布的APK程序包,APK程序包中會帶有標識該應用市場的信息。例如360發布的渠道包中攜帶標識360的信息;豌豆莢發布的渠道包中攜帶標識豌豆莢的信息。通過統計該值,可以統計出用戶從哪個平臺下載了相應的應用程序,從而更好的掌握用戶的操作習慣。
在上述步驟101中,如圖2所示,圖2是在前述圖1所示實施例的基礎上示出的另一種渠道包生成方法,步驟101包括以下步驟:
在步驟101-1中,獲取渠道編號;
終端或服務器可以按照相關技術獲取預設的與每個應用市場對應的所述渠道編號。例如,360對應的預設的渠道編號為001,豌豆莢對應的預設的渠道編號為002等。
在步驟101-2中,根據所述渠道編號生成渠道數據。
可選地,如圖3所示,圖3是在前述圖2所示實施例的基礎上示出的另一種渠道包生成方法,步驟101-2包括以下步驟:
在步驟101-21中,在所述APK程序包中查找所述APK簽名區;
本公開實施例中,APK簽名區是APK程序包中進行APK簽名的部分。如果需要生成渠道數據,則需要先在整個的APK程序包中定位到APK簽名區所在位置,即需要先在所述APK程序包中查找所述APK簽名區。
本步驟中,已經按照相關技術打開了所述APK程序包。進一步地,可以根據所述APK程序包的預設文件格式和所述APK簽名區的預設數據格式,來查找所述APK簽名區。
其中,所述APK程序包的預設文件格式為zip格式,目前公布的APK簽名方案(APK Signature Scheme)V2中已經對所述APK簽名區的數據格式進行了定義。因此,可以根據上述的APK程序包的預設文件格式和APK簽名區的預設數據格式,在所述APK程序包中準確查找到所述APK簽名區。
在步驟101-22中,在所述APK簽名區中獲取所述渠道數據標識所對應的預設數據格式;
本公開實施例中,數據格式是數據保存在文件或記錄中的編排格式。可為數值、字符或二進制數等形式。由數據類型及數據長度來描述。每個數據都有相應的數據格式。
本步驟中,可以在所述APK簽名區中獲取渠道數據標識所對應的預設數據格式。在所述目標文件內容中,存在預先定義的用于表示渠道數據的標簽,可選地,可以將該標簽的名稱作為渠道數據標識。
例如,預先定義的用于表示渠道數據的標簽,名稱是channel,則channel即為渠道數據標識。
由于每個數據都有相應的數據格式,則終端或服務器可以按照相關技術獲取該渠道數據標識所對應的預設數據格式。
在步驟101-23中,根據所述渠道編號,生成符合所述預設數據格式的渠道數據。
本步驟中,終端或服務器可以按照相關技術,根據之前獲取到的所述渠道編號來生成符合上述預設數據格式的渠道數據。
例如,所述預設數據格式是字符格式的,該渠道編號為2,即對應的渠道來源是豌豆莢,那么生成的渠道數據即為wandoujia。
在上述步驟102中,可以將生成的上述渠道數據寫入所述APK簽名區中對應于渠道數據標識的渠道數據所在位置,即目標位置。
本步驟中,在將上述渠道數據寫入目標位置后,就得到了符合簽名區的所述渠道數據標識所對應的格式的渠道數據。從而得到攜帶渠道數據的APK程序包,即渠道包。
上述實施例中,可以將生成的渠道數據寫入APK程序包的APK簽名區中對應于渠道數據標識的渠道數據所在位置,即目標位置,從而獲得渠道包。這樣即使安卓系統的簽名方案是對整個APK文件進行了保護,仍然可以生成渠道包。同時無需重新簽名或重新打包,縮短了生成渠道包的時間,可以更加快捷、簡單地得到渠道包。
在一實施例中,考慮到之前可能已經對渠道數據值進行過編輯,則渠道數據值可能不為空值。當所述渠道數據值不為空值時,無法將所述渠道數據寫入所述目標位置,因此,上述渠道包生成方法如圖4所示,圖4是在前述圖1所示實施例的基礎上示出的另一種渠道包生成方法,在完成步驟101之后,還包括以下步驟:
在步驟201中,在所述APK簽名區中確認渠道數據值是否為空值;
本步驟中,可以直接按照相關技術在所述APK簽名區中確認所述渠道數據值是否為空值。
例如,所述渠道數據標識為channel,則需要查找channel對應的數據值,即渠道數據值是否為空值。則可以確定所述渠道數據值為空值,否則可以確定所述渠道數據值不為空值。
當所述渠道數據值不為空值時,繼續執行步驟202;如果所述渠道數據值為空值,則直接執行步驟102,將生成的渠道數據寫入上述目標位置即可。
在步驟202中,將所述渠道數據值置為空值。
本步驟中,可以在所述渠道數據值不為空值時,將其置為空值。
在完成步驟202之后,可以繼續執行步驟102,將生成的渠道數據寫入上述目標位置。
上述實施例中,可以避免之前對渠道數據進行過編輯導致無法將新生成的渠道數據寫入目標位置的問題,同樣縮短了生成渠道包的時間。
在另一實施例中,APK文件是zip格式的,由于寫入了渠道數據,zip文件的內容發生改變,產生了數據偏移,就會導致整個的APK文件格式錯誤,無法正常安裝的問題。為了避免上述問題,可選地,上述渠道包生成方法如圖5所示,圖5是在前述圖1所示實施例的基礎上示出的另一種渠道包生成方法,在完成步驟102之后,還包括以下步驟:
在步驟301中,比較所述渠道數據的數據長度值和寫入所述渠道數據之前所述渠道數據值的長度值,獲得所述APK簽名區的數據長度變化值;
本步驟中,可以比較生成的所述渠道數據的數據長度值和在寫入所述渠道數據之前所述渠道數據標識對應的渠道數據值的長度值,從而獲得所述數據長度變化值。
例如,生成的所述渠道數據為wandoujia,每個字符占2個字節,則所述渠道數據的數據長度值為18個字節,而在寫入所述渠道數據之前所述渠道數據標識對應的渠道數據值為360,則所述渠道數據值的長度值為6個字節。即所述數據長度變化值為增加了12個字節。當然,所述數據長度變化值也可能是減少了若干字節。
應當注意地是,如果所述渠道數據值不為空值,則需要統計的是將所述渠道數據值置為空值前的渠道數據值的長度值。
在步驟302中,將所述數據長度變化值作為所述APK程序包中目標數值的變化值,更新所述目標數值。
其中,所述目標數值是所述APK程序包中記錄的中心目錄起始位置偏移量的數值。
本公開實施例中,APK程序包是zip格式,每個zip文件中必須有且只有一個ZIP EOCD(End of central directory record),用于表示核心目錄結束標識。EOCD中記錄了中心目錄起始位置偏移量(Offset of start of central directory)的具體數值。
本步驟中,可以根據所述數據長度變化值,來更新所述中心目錄起始位置偏移量的數值。即將所述中心目錄起始位置的數值增加或減少所述數據長度變化值。確保寫入了所述渠道數據后的APK程序包的文件格式仍然是正確的zip格式。
例如,所述數據長度變化值為增加了12個字節,則所述中心目標起始位置偏移量的數值也相應增加12個字節。如果所述數據長度變化值減少了6個字符,則所述中心目標起始位置偏移量的數值也相應減少6個字節。
上述實施例中,在將所述渠道數據寫入安卓安裝包APK程序包中的目標位置后,確保APK程序包的文件格式仍然是正確的zip格式,從而可以正常安裝,同時縮短了生成渠道包的時間。
在另一實施例中,當上述渠道包生成方法用于服務器時,上述方法如圖6所示,圖6是在前述圖1所示實施例的基礎上示出的另一種渠道包生成方法,在執行步驟101之前,還包括以下步驟:
在步驟100中,接收客戶端發送的請求獲取渠道包的獲取請求;
本步驟中,客戶端如果需要獲取程序包,則客戶端會按照相關技術向服務器發起所述獲取請求。當所述服務器接收到所述獲取請求后,可以開始執行步驟101。
當然,在獲得渠道包之后,即完成步驟102之后,還包括以下步驟:
在步驟103中,在關閉所述渠道包之后,將所述渠道包發送給所述客戶端。
本步驟中,所述服務器按照上述實施例提供的方式獲得渠道包之后,關閉所述渠道包,進而按照相關技術將所述渠道包返回發起所述獲取請求的客戶端即可。此時,客戶端就獲取到了攜帶完整的渠道信息的APK程序包,即渠道包。
上述實施例中,服務器可以基于客戶端的獲取請求生成渠道包,進而將所述渠道包返回所述客戶端,即使安卓系統的簽名方案是對整個APK文件進行了保護,仍然可以生成渠道包。同時無需重新簽名,縮短了服務器生成渠道包的時間,使得客戶端可以更加快捷、簡單地得到渠道包。
下面分別介紹一下在終端和服務器上生成渠道包的具體過程。
如圖7所示,圖7是根據一示例性實施例示出的另一種渠道包生成方法,所述方法用于終端,包括以下步驟:
在步驟401中,打開APK程序包。
在步驟402中,獲取渠道編號。
本步驟中,所述終端可以按照相關技術獲取預設的與每個應用市場對應的所述渠道編號。
在步驟403中,根據所述APK程序包的預設文件格式和所述APK簽名區的預設數據格式,查找所述APK簽名區。
本公開實施例中,可以根據上述的APK程序包的預設文件格式和APK簽名區的預設數據格式,在所述APK文件中準確查找到所述APK簽名區。
在步驟404中,在所述APK簽名區中獲取所述渠道數據標識所對應的預設數據格式。
在步驟405中,在所述APK簽名區中確認渠道數據值是否為空值。
如果所述渠道數據值不為空值,則執行步驟406,否則執行步驟407。
在步驟406中,將所述渠道數據值置為空值。
在步驟407中,根據所述渠道編號,生成符合所述預設數據格式的渠道數據。
本步驟中,終端按照相關技術,根據之前獲取到的所述渠道編號來生成符合上述預設數據格式的渠道數據。
在步驟408中,在APK程序包中的目標位置,寫入所述渠道數據,獲得渠道包。
其中,所述目標位置是APK程序包的APK簽名區中對應于渠道數據標識的渠道數據所在位置。
上述實施例中,即使安卓系統的簽名方案是對整個APK文件進行了保護,終端仍然可以自動生成渠道包。同時無需重新簽名,縮短了生成渠道包的時間,可以更加快捷、簡單地得到渠道包。
如圖8所示,圖8是根據一示例性實施例示出的另一種渠道包生成方法,所述方法用于服務器,包括以下步驟:
在步驟501中,獲取客戶端發送的請求獲取渠道包的獲取請求。
在步驟502中,打開APK程序包。
在步驟503中,獲取渠道編號。
本步驟中,所述服務器可以按照相關技術獲取預設的與每個應用市場對應的所述渠道編號。
在步驟504中,根據所述APK程序包的預設文件格式和所述APK簽名區的預設數據格式,查找所述APK簽名區。
本公開實施例中,可以根據上述的APK程序包的預設文件格式和APK簽名區的預設數據格式,在所述APK文件中準確查找到所述APK簽名區。
在步驟505中,在所述APK簽名區中獲取所述渠道數據標識所對應的預設數據格式。
在步驟506中,在所述APK簽名區中確認渠道數據值是否為空值。
如果所述渠道數據值不為空值,則執行步驟507,否則執行步驟508。
在步驟507中,將所述渠道數據值置為空值。
在步驟508中,根據所述渠道編號,生成符合所述預設數據格式的渠道數據。
本步驟中,所述服務器按照相關技術,根據之前獲取到的所述渠道編號來生成符合上述預設數據格式的渠道數據。
在步驟509中,在APK程序包中的目標位置,寫入所述渠道數據,獲得渠道包。
其中,所述目標位置是APK程序包的APK簽名區中對應于渠道數據標識的渠道數據所在位置。
在步驟510中,在關閉所述渠道包之后,將所述渠道包發送給所述客戶端。
上述實施例中,即使安卓系統的簽名方案是對整個APK文件進行了保護,服務器仍然可以基于客戶端的獲取請求自動生成渠道包,并將所述渠道包返回所述客戶端。同時無需重新簽名,縮短了生成渠道包的時間,使得客戶端可以更加快捷、簡單地得到渠道包。
與前述方法的實施例相對應,本申請還提供了相應裝置的實施例。
圖9為根據本發明的一示例性實施例示出的一種渠道包生成裝置的結構示意圖;如圖9所示,該渠道包生成裝置可以包括:
渠道數據生成模塊610,用于生成渠道數據;
渠道包生成模塊620,用于在安卓安裝包APK程序包中的目標位置,寫入所述渠道數據,獲得渠道包;
其中,所述目標位置是所述APK程序包的APK簽名區中對應于渠道數據標識的渠道數據所在位置。
在一實施例中,所述渠道數據生成模塊610具體用于:
獲取渠道編號;
根據所述渠道編號生成渠道數據。
在一實施例中,所述渠道數據生成模塊610具體還用于:
在所述APK程序包中查找到所述APK簽名區;
在所述APK簽名區中獲取所述渠道數據標識所對應的預設數據格式;
根據所述渠道編號,生成符合所述預設數據格式的渠道數據。
在一實施例中,所述渠道數據生成模塊610具體還用于:
根據所述APK程序包的預設文件格式和所述APK簽名區的預設數據格式,查找所述APK簽名區。
圖10為根據本發明的圖9示例性實施例示出的另一種渠道包生成裝置的結構示意圖;如圖10所示,該渠道包生成裝置還可以包括:
確認模塊630,用于在所述APK簽名區中確認渠道數據值是否為空值;
執行模塊640,用于當所述APK程序包中所述渠道數據值不為空值時,將所述渠道數據值置為空值;
第一控制模塊650,用于當所述執行模塊6450將所述渠道數據值置為空值,或所述確認模塊630查找到所述渠道數據值為空值時,控制所述渠道包生成模塊在安卓安裝包APK程序包中的目標位置,寫入所述渠道數據,獲得渠道包。
圖11為根據本發明的圖9示例性實施例示出的另一種渠道包生成裝置的結構示意圖;如圖11所示,該渠道包生成裝置還可以包括:
比較模塊660,用于比較所述渠道數據的數據長度值和寫入所述渠道數據之前所述渠道數據值的長度值,獲得所述APK簽名區的數據長度變化值;
更新模塊670,用于將所述數據長度變化值作為所述APK程序包中目標數值的變化值,更新所述目標數值;
其中,所述目標數值是所述APK程序包中記錄的中心目錄起始位置偏移量的數值。
圖12為根據本發明的圖9示例性實施例示出的另一種渠道包生成裝置的結構示意圖;如圖12所示,該渠道包生成裝置用于服務器時,還可以包括:
接收模塊680,用于接收客戶端發送的請求獲取渠道包的獲取請求;
第二控制模塊690,用于根據所述獲取請求,控制所述渠道編號獲取模塊獲取渠道編號;
發送模塊710,用于在所述渠道包生成模塊620獲得渠道包之后,關閉所述渠道包,將所述渠道包發送給所述客戶端。
本公開實施例還提供了另一種計算機可讀存儲介質,該存儲介質存儲有計算機程序,計算機程序可用于執行上述圖8實施例提供的渠道包生成方法。
圖13示出了根據本發明的一示例性實施例的終端的結構示意圖;對應于上述的渠道包生成方法,本公開實施例還提出了圖13所示的根據本發明的一示例性實施例的終端的示意結構圖。請參考圖13,在硬件層面,該計算設備包括處理器、內部總線、網絡接口、內存以及非易失性存儲器,當然還可能包括其他業務所需要的硬件。處理器從非易失性存儲器中讀取對應的計算機程序到內存中然后運行,在邏輯層面上形成渠道包生成裝置。當然,除了軟件實現方式之外,本申請并不排除其他實現方式,比如邏輯器件抑或軟硬件結合的方式等等,也就是說以下處理流程的執行主體并不限定于各個邏輯單元,也可以是硬件或邏輯器件。
圖14示出了根據本發明的一示例性實施例的服務器的結構示意圖;對應于上述的渠道包生成方法,本公開實施例還提出了圖14所示的根據本發明的一示例性實施例的服務器的示意結構圖。請參考圖14,在硬件層面,該計算設備包括處理器、內部總線、網絡接口、內存以及非易失性存儲器,當然還可能包括其他業務所需要的硬件。處理器從非易失性存儲器中讀取對應的計算機程序到內存中然后運行,在邏輯層面上形成渠道包生成裝置。當然,除了軟件實現方式之外,本申請并不排除其他實現方式,比如邏輯器件抑或軟硬件結合的方式等等,也就是說以下處理流程的執行主體并不限定于各個邏輯單元,也可以是硬件或邏輯器件。
本領域技術人員在考慮說明書及實踐這里公開的發明后,將容易想到本申請的其它實施方案。本申請旨在涵蓋本申請的任何變型、用途或者適應性變化,這些變型、用途或者適應性變化遵循本申請的一般性原理并包括本申請未公開的本技術領域中的公知常識或慣用技術手段。說明書和實施例僅被視為示例性的,本申請的真正范圍和精神由下面的權利要求指出。
還需要說明的是,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設備中還存在另外的相同要素。
以上所述僅為本公開的較佳實施例而已,并不用以限制本公開,凡在本公開的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本公開保護的范圍之內。