編譯程序的方法和裝置以及系統的制作方法
【專利摘要】編譯程序的方法和裝置以及系統,幫助移動應用程序開發者在僅具有應用程序源代碼和證書的情況下完成程序編譯。本發明的編譯程序的系統包括第一服務器和第二服務器,其中:所述第一服務器用于通過互聯網接收終端設備發送的用于編譯程序的數據然后發送給所述第二服務器,所述數據包括程序源代碼和證書;所述第二服務器用于:在能夠訪問所述證書的情況下驗證該證書,若驗證通過則對所述程序源代碼進行編譯,否則經由所述第一服務器向所述終端設備返回第一提示信息;在無法訪問所述證書的情況下經由所述第一服務器向所述終端設備返回第二提示信息,并且停止對所述證書的驗證。
【專利說明】編譯程序的方法和裝置以及系統
【技術領域】
[0001]本發明涉及計算機【技術領域】,特別地涉及一種編譯程序的方法和裝置以及系統。【背景技術】
[0002]隨著移動互聯網的發展,有越來越多的開發者競相開發移動應用程序。開發者在編寫完成應用程序的源代碼之后,和證書一起提交到編譯系統,該編譯系統對證書進行驗證,驗證通過后對該源代碼進行編譯。例如在蘋果公司開發的ios平臺上,開發者手動導入.pl2證書到鑰匙串,手動導入.mobileprovision到Xcode中,由編譯器Xcode進行編譯。
【發明內容】
[0003]本發明的主要目的是提供一種編譯程序的方法和裝置以及系統,幫助移動應用程序開發者在僅具有應用程序源代碼和證書的情況下完成程序編譯。
[0004]為實現上述目的,根據本發明的一個方面,提供了一種編譯程序的系統。
[0005]本發明的編譯程序的系統包括第一服務器和第二服務器,其中:所述第一服務器用于通過互聯網接收終端設備發送的用于編譯程序的數據然后發送給所述第二服務器,所述數據包括程序源代碼和證書;所述第二服務器用于:在能夠訪問所述證書的情況下驗證該證書,若驗證通過則對所述程序源代碼進行編譯,否則經由所述第一服務器向所述終端設備返回第一提示信息;在無法訪問所述證書的情況下經由所述第一服務器向所述終端設備返回第二提示信息,并且停止對所述證書的驗證。
[0006]可選地,所述第一服務器和第二服務器為服務器集群。
[0007]根據本發明的另一方面,提供了一種編譯程序的方法。
[0008]本發明的編譯程序的方法包括:接收用于編譯程序的數據,所述數據包括程序源代碼和證書;記錄證書驗證狀態為未完成;啟動主線程和驗證線程;所述驗證線程包括:啟動證書驗證進程;在所述證書驗證進程自動結束的情況下,將所述證書驗證狀態修改為已完成,然后結束驗證線程,在所述證書驗證進程被所述主線程終止的情況下直接結束驗證線程;所述主線程包括:判斷所述驗證進程是否存在;在所述驗證進程不存在的情況下檢測證書驗證狀態:若證書驗證狀態為未完成,則啟動設定時長的等待,并在等待過程中再次判斷所述驗證進程是否存在,以及在等待超時的情況下結束驗證線程;若證書驗證狀態為已完成,則對所述程序源代碼進行編譯;在所述驗證進程存在的情況下,啟動設定時長的等待,并在等待過程中再次判斷所述驗證進程是否存在,以及在等待超時的情況下結束驗證線程。
[0009]根據本發明的又一方面,提供了 一種編譯程序的裝置。
[0010]本發明的編譯程序的裝置包括:接收模塊,用于接收用于編譯程序的數據,所述數據包括程序源代碼和證書;記錄模塊,用于記錄證書驗證狀態為未完成;驗證線程模塊,用于執行驗證線程,所述驗證線程包括:啟動證書驗證進程;在所述證書驗證進程自動結束的情況下,將所述證書驗證狀態修改為已完成,然后結束驗證線程,在所述證書驗證進程被所述主線程終止的情況下直接結束驗證線程;主線程模塊,用于執行主線程,所述主線程包括:判斷所述驗證進程是否存在;在所述驗證進程不存在的情況下檢測證書驗證狀態:若證書驗證狀態為未完成,則啟動設定時長的等待,并在等待過程中再次判斷所述驗證進程是否存在,以及在等待超時的情況下結束驗證線程;若證書驗證狀態為已完成,則對所述程序源代碼進行編譯;在所述驗證進程存在的情況下,啟動設定時長的等待,并在等待過程中再次判斷所述驗證進程是否存在,以及在等待超時的情況下結束驗證線程。
[0011]根據本發明的技術方案,由服務器提供編譯環境,對用戶提供的源程序進行編譯,其中在驗證證書時,若無證書訪問權限則停止驗證并且提示用戶,以防內存耗盡而死機,實現了大批量的自動編譯,并且使用戶無需準備編譯環境,在僅具有應用程序源代碼和證書的情況下就能完成程序編譯,降低了程序開發的成本。在服務器的處理方式上,采用驗證證書的線程和主線程并行,能夠準確地控制證書驗證和編譯的進程,在遇到不能訪問的證書時能夠提示用戶并且停止證書驗證,對于能夠訪問的證書則進行正常的驗證。
【專利附圖】
【附圖說明】
[0012]附圖用于更好地理解本發明,不構成對本發明的不當限定。其中:
[0013]圖1是根據本發明實施例的編譯程序的系統的示意圖;
[0014]圖2是根據本發明實施例的編譯程序的方法的示意圖;
[0015]圖3是根據本發明實施例的編譯程序的裝置的主要模塊的示意圖。
【具體實施方式】
[0016]以下結合附圖對本發明的示范性實施例做出說明,其中包括本發明實施例的各種細節以助于理解,應當將它們認為僅僅是示范性的。因此,本領域普通技術人員應當認識到,可以對這里描述的實施例做出各種改變和修改,而不會背離本發明的范圍和精神。同樣,為了清楚和簡明,以下的描述中省略了對公知功能和結構的描述。
[0017]圖1是根據本發明實施例的編譯程序的系統的示意圖。如圖1所示,編譯程序的系統10主要包括第一服務器11和第二服務器12,二者可基于httpclient等協議進行通信;第一服務器11通過互聯網2與多個終端設備31、32、……、3N連接,通過提供web服務,可以接收終端設備發送的源代碼和證書,源代碼和證書由第二服務器12進行處理,其中主要是對證書進行驗證,并在驗證通過的情況下對源代碼進行編譯。第一服務器11和第二服務器12可采用服務器集群,以處理海量終端設備發送的數據。
[0018] 為了安全起見,證書一般具有訪問權限,使編譯系統能夠訪問證書從而對其進行驗證。對于現有的編譯系統,如果沒有權限訪問證書,則會在人機界面上彈出一個提示框以提示操作人員,該提示框需操作人員點擊確認,于是結束對證書的驗證進程。采用編譯程序的系統10進行編譯時,第二服務器12會接收到大量的證書需要驗證,如果第二服務器12因沒有權限訪問其中的多個證書,則驗證進程無法繼續但并未中止,多個這種情況的驗證進程容易導致機器內存耗盡而死機。因此在本實施例中,第二服務器12在無法訪問證書的情況下停止對證書的驗證進程,并且生成提示信息然后發送給第一服務器11,再由第一服務器11轉發給終端設備,以使開發者得知證書權限需要修改。
[0019]第二服務器12在運行中可采用圖2所示的流程。圖2是根據本發明實施例的編譯程序的方法的示意圖。該方法可由執行編譯的計算機例如第二服務器12完成。如圖2所示,在步驟S201中,導入用于編譯程序的數據,例如在iOS中,使用secue命令將.pl2證書導入鑰匙串,使用cp命令將.mobileprovision導入Xcode。可以計算出證書的哈希值,并與本次編譯任務的名稱一起作為本次編譯任務的標識。
[0020]在步驟S202中,設置一個證書驗證完成位,以記錄證書驗證狀態,此時令其值為0,表示證書驗證尚未完成。接下來啟動用兩個線程,分別是步驟S211中的啟動驗證線程和步驟S221中的啟動主線程。在步驟S212中,對證書進行驗證(在iOS中驗證進程為codesign進程),然后在步驟S213中判斷證書驗證進程是否結束,若未結束,則延時之后返回步驟S213繼續判斷,如結束,判斷其結束方式(步驟S214),如果證書驗證進程的結束方式是自動結束,表明能夠訪問證書并且證書驗證通過,此時進入步驟S215,修改證書驗證完成位的值為1,表示證收驗證通過。驗證線程在步驟S215之后結束。如果證書驗證進程的結束方式為被終止(實際上是被主線程終止,見下面的描述),則直接結束驗證線程,在該情況下證書驗證完成位的值仍保持為O。
[0021]在主線程中,步驟S222為檢測驗證進程是否存在。若不存在,則檢測證書驗證完成位的值(步驟S223),若為1,表示證書驗證進程已結束并且結束方式是自動結束,此時進入步驟S224進行編譯,編譯之后即按常規方式,可以刪除鑰匙串和Xcode中的證書,并且把編譯得到的程序包返回給終端設備。在步驟S223中,若證書驗證完成位的值為0,表示驗證進程尚未啟動,此時進入步驟S225,等待預設的時長,該時長應大于證書能夠被訪問的情況下正常驗證所需的時間,例如30S,在該30S內,返回步驟S222,繼續反復檢測驗證進程是否存在。若驗證進程存在,說明其已啟動,則繼續等待驗證結果,如果驗證進程在30S內結束,則又返回步驟S223,并且必然是驗證進程自動結束從而進入步驟S224,這是因為驗證進程被終止的步驟在30S之后才執行。如果驗證進程在30S內未結束,則等待超時,原因可能是證書的訪問權限未修改使其無法被訪問,也可能是證書雖能被訪問但驗證未通過,此時就終止證書驗證進程(步驟S226),然后發出提示信息(步驟S227)以及結束主線程。此時還可以將導入的證書刪除。
[0022]圖3是根據本發明實施例的編譯程序的裝置的主要模塊的示意圖。該裝置作為軟件模塊可以設置在計算機例如第二服務器12或者第二服務器集群的節點中。如圖3所示,編譯程序的裝置30主要包括接收模塊31、記錄模塊32、驗證線程模塊33、以及主線程模塊34。
[0023]接收模塊31用于接收用于編譯程序的數據,該數據包括程序源代碼和證書。記錄模塊32用于記錄證書驗證狀態為未完成。驗證線程模塊33用于執行驗證線程。主線程模塊34用于執行主線程。
[0024]驗證線程包括:啟動證書驗證進程;在證書驗證進程自動結束的情況下,將證書驗證狀態修改為已完成,然后結束驗證線程,在證書驗證進程被主線程終止的情況下直接結束驗證線程。
[0025]主線程包括:判斷驗證進程是否存在;在驗證進程不存在的情況下檢測證書驗證狀態:若證書驗證狀態為未完成,則啟動設定時長的等待,并在等待過程中再次判斷驗證進程是否存在,以及在等待超時的情況下結束驗證線程;若證書驗證狀態為已完成,則對程序源代碼進行編譯;在驗證進程存在的情況下,啟動設定時長的等待,并在等待過程中再次判斷驗證進程是否存在,以及在等待超時的情況下結束驗證線程。
[0026]根據本發明的技術方案,由服務器提供編譯環境,對用戶提供的源程序進行編譯,其中在驗證證書時,若無證書訪問權限則停止驗證并且提示用戶,以防內存耗盡而死機,實現了大批量的自動編譯,并且使用戶無需準備編譯環境,在僅具有應用程序源代碼和證書的情況下就能完成程序編譯,降低了程序開發的成本。在服務器的處理方式上,采用驗證證書的線程和主線程并行,能夠準確地控制證書驗證和編譯的進程,在遇到不能訪問的證書時能夠提示用戶并且停止證書驗證,對于能夠訪問的證書則進行正常的驗證。
[0027]以上結合具體實施例描述了本發明的基本原理,但是,需要指出的是,對本領域的普通技術人員而言,能夠理解本發明的方法和設備的全部或者任何步驟或者部件,可以在任何計算裝置(包括處理器、存儲介質等)或者計算裝置的網絡中,以硬件、固件、軟件或者它們的組合加以實現,這是本領域普通技術人員在閱讀了本發明的說明的情況下運用他們的基本編程技能就能實現的。
[0028]因此,本發明的目的還可以通過在任何計算裝置上運行一個程序或者一組程序來實現。所述計算裝置可以是公知的通用裝置。因此,本發明的目的也可以僅僅通過提供包含實現所述方法或者裝置的程序代碼的程序產品來實現。也就是說,這樣的程序產品也構成本發明,并且存儲有這樣的程序產品的存儲介質也構成本發明。顯然,所述存儲介質可以是任何公知的存儲介質或者將來開發出的任何存儲介質。
[0029]還需要指出的是,在本發明的裝置和方法中,顯然,各部件或各步驟是可以分解和/或重新組合的。這些分解和/或重新組合應視為本發明的等效方案。并且,執行上述系列處理的步驟可以自然地按照說明的順序按時間順序執行,但是并不需要一定按照時間順序執行。某些步驟可以并行或彼此獨立地執行。
[0030]上述【具體實施方式】,并不構成對本發明保護范圍的限制。本領域技術人員應該明白的是,取決于設計要求和其他因素,可以發生各種各樣的修改、組合、子組合和替代。任何在本發明的精神和原則之內所作的修改、等同替換和改進等,均應包含在本發明保護范圍之內。
【權利要求】
1.一種編譯程序的系統,其特征在于,包括第一服務器和第二服務器,其中: 所述第一服務器用于通過互聯網接收終端設備發送的用于編譯程序的數據然后發送給所述第二服務器,所述數據包括程序源代碼和證書; 所述第二服務器用于:在能夠訪問所述證書的情況下驗證該證書,若驗證通過則對所述程序源代碼進行編譯,否則經由所述第一服務器向所述終端設備返回第一提示信息;在無法訪問所述證書的情況下經由所述第一服務器向所述終端設備返回第二提示信息,并且停止對所述證書的驗證。
2.根據權利要求1所述的系統,其特征在于,所述第一服務器和第二服務器為服務器集群。
3.一種編譯程序的方法,其特征在于,包括: 接收用于編譯程序的數據,所述數據包括程序源代碼和證書; 記錄證書驗證狀態為未完成; 啟動主線程和驗證線程; 所述驗證線程包括: 啟動證書驗證進程; 在所述證書驗證進程自動結束的情況下,將所述證書驗證狀態修改為已完成,然后結束驗證線程,在所述證書驗證進程被所述主線程終止的情況下直接結束驗證線程; 所述主線程包括: 判斷所述驗證進程是否存在; 在所述驗證進程不存在的情況下檢測證書驗證狀態:若證書驗證狀態為未完成,則啟動設定時長的等待,并在等待過程中再次判斷所述驗證進程是否存在,以及在等待超時的情況下結束驗證線程;若證書驗證狀態為已完成,則對所述程序源代碼進行編譯; 在所述驗證進程存在的情況下,啟動設定時長的等待,并在等待過程中再次判斷所述驗證進程是否存在,以及在等待超時的情況下結束驗證線程。
4.一種編譯程序的裝置,其特征在于,包括: 接收模塊,用于接收用于編譯程序的數據,所述數據包括程序源代碼和證書; 記錄模塊,用于記錄證書驗證狀態為未完成; 驗證線程模塊,用于執行驗證線程,所述驗證線程包括: 啟動證書驗證進程; 在所述證書驗證進程自動結束的情況下,將所述證書驗證狀態修改為已完成,然后結束驗證線程,在所述證書驗證進程被所述主線程終止的情況下直接結束驗證線程; 主線程模塊,用于執行主線程,所述主線程包括: 判斷所述驗證進程是否存在; 在所述驗證進程不存在的情況下檢測證書驗證狀態:若證書驗證狀態為未完成,則啟動設定時長的等待,并在等待過程中再次判斷所述驗證進程是否存在,以及在等待超時的情況下結束驗證線程;若證書驗證狀態為已完成,則對所述程序源代碼進行編譯; 在所述驗證進程存在的情況下,啟動設定時長的等待,并在等待過程中再次判斷所述驗證進程是否存在,以及在等待超時的情況下結束驗證線程。
【文檔編號】H04L29/06GK103914329SQ201410105556
【公開日】2014年7月9日 申請日期:2014年3月20日 優先權日:2014年3月20日
【發明者】陳偉 申請人:北京京東尚科信息技術有限公司