本發(fā)明涉及android系統,尤其涉及一種基于android容器的庫依賴解決方法。
背景技術:
android系統使用bionicc庫,其他眾多c,c++庫也有許多不同;android底層是linuxkernel,linuxkernel一個應用很廣泛的操作系統內核,它有眾多的發(fā)行版,debian,gentoo等電腦桌面系統,meego等面向移動設備的系統。為了在android中支持這些系統中特有的功能,需要向android移植帶有特定功能的程序。而android系統使用了大量和其他系統不能完全兼容的庫,在移植一些幫助android開發(fā),調試,測試,特殊功能的軟件時,都需要修改大量代碼。
技術實現要素:
為了解決現有技術中的問題,本發(fā)明提供了一種基于android容器的庫依賴解決方法,力圖保證既能解決依賴問題,又能保證原有系統的安全。
本發(fā)明提供了一種基于android容器的庫依賴解決方法,在kernel(即操作系統內核)中開啟namespace(即“命名空間”)機制,通過在調用clone()系統調用時設置flag創(chuàng)建一個和原有環(huán)境隔離的新空間,然后在新空間中放置一套程序所依賴的庫。
作為本發(fā)明的進一步改進,在kernel中添加關于pid、ipc、mnt、user、utsnamespace相關配置屬性,kernel啟動過程中初始化pid、ipc、mnt、user、utsnamespace相關配置屬性。
作為本發(fā)明的進一步改進,開發(fā)一個nativedaemon,并將該程序稱之為space_mng,space_mng需傳入兩個參數,一個參數代表space的目錄路徑space_path,另一個參數是依賴這些庫的程序路徑及名稱bin/program_name.space_mng,先將當前進程的根目錄chroot到space_path下,然后執(zhí)行clone(),flag設置為創(chuàng)建新的pid、ipc、mnt、user、utsnamespace;最后當前進程fork一個新進程,加載傳入的程序bin/program_name。
本發(fā)明的有益效果是:在考慮安全性,隔離性的前提下,為android下各種不同的程序依賴不同的庫提供了一個解決方案。
附圖說明
圖1是本發(fā)明一種基于android容器的庫依賴解決方法的示意圖。
具體實施方式
下面結合附圖說明及具體實施方式對本發(fā)明作進一步說明。
通過在android系統中建立多套庫環(huán)境,將依賴不同庫的程序放入自己所需要的環(huán)境中。通過此技術來使android上支持不同的庫環(huán)境。
同時為了安全性考慮,需要保證這些環(huán)境之間盡可能隔離,不能產生互相干擾。
針對以上問題,本方案提出了以linuxkernel的namespace技術為基礎的隔離方案來建立多個獨立的庫環(huán)境。
如圖1所示,一種基于android容器的庫依賴解決方法,在linuxkernel中開啟namespace機制,通過在調用clone()系統調用時設置flag創(chuàng)建一個和原有環(huán)境隔離的新空間,然后在新空間中放置一套程序所依賴的庫,以此解決庫依賴問題;同時由于進程,進程間通訊、存儲、用戶等方面的隔離,移植的程序運行在一個不會干擾原系統的獨立環(huán)境中,保證原生系統的穩(wěn)定和安全。
目錄放置:
首先要確定用哪個文件目錄來存放庫和依賴這些庫的可執(zhí)行文件。為了方便描述,把該目錄稱之為space_path,然后可以在space_path下定制庫目錄,比如創(chuàng)建一個libs文件夾,里面放入庫文件;把依賴此庫的程序叫做program_name,放到space_path/bin下。
程序實現:
1.在kernel中添加關于pid,ipc,mnt,user,utsnamespace相關配置屬性,這樣kernel啟動過程中就會初始化這些機制。
2.開發(fā)一個nativedaemon,為了方便描述我們把該程序稱之為space_mng。
3.space_mng需傳入兩個參數,一個參數代表space的目錄路徑space_path,另一個參數是依賴這些庫的程序路徑及名稱bin/program_name.space_mng,先將當前進程的根目錄chroot到space_path下,然后執(zhí)行clone,flag設置為創(chuàng)建新的pid、ipc、mnt、user、utsnamespace;最后當前進程fork一個新進程,加載傳入的程序bin/program_name。
本發(fā)明提供的一種基于android容器的庫依賴解決方法,可以在android中可以支持多種不同類型的庫,使uclibc,eglibc,glibc可以與android原生的bionic有各自獨立的空間而不至于相互之間有所影響。在考慮安全性,隔離性的前提下,為android下各種不同的程序依賴不同的庫提供了一個解決方案。
以上內容是結合具體的優(yōu)選實施方式對本發(fā)明所作的進一步詳細說明,不能認定本發(fā)明的具體實施只局限于這些說明。對于本發(fā)明所屬技術領域的普通技術人員來說,在不脫離本發(fā)明構思的前提下,還可以做出若干簡單推演或替換,都應當視為屬于本發(fā)明的保護范圍。