當前位置:首頁 » 編程軟體 » ndk編譯內核

ndk編譯內核

發布時間: 2025-01-02 09:17:02

『壹』 關於android和x86的幾點疑問。 android基因linux內核,系統除了內核還有其他什麼

android 除了基於 Linux 內核,他的上層運行環境和相關函數庫,命令程序都是自己的。
其實 android 就是一個基於 Linux 內核的 JAVA 虛擬機環境。
實際 Android 程序都是基於 JAVA 虛擬機跑的解釋型語言程序。

但解釋型語言程序性能肯定不如本地二進製程序。所以 Android 還有一種 NDK 程序。
也就是 Android 裡面有部分本地二進製程序的內容。這樣本地程序方式運行,效率可以最高而且可以根據 CPU 功能做優化(比如 neon )。

指令集不同,但他的 JAVA 虛擬機是解釋型語言,基於 JAVA 語言的程序是可以無差別運行的。只要能保證 Android 上面的 JAVA 虛擬機可以在 x86 上面成功運行就行了。

但 Android 有個另外的問題,就是 JAVA 虛擬機是針對 ARM 做性能優化的,在 X86 上面,這種性能優化都沒了,需要另外在 x86 上面重新優化。但聽說 Android 的 JAVA 虛擬機的語言裡面,也有針對 ARM 硬體進行的修改設計,所以這種針對 ARM 性能優化的 JAVA 程序,在 X86 的系統上面性能也有損失。

所以 Android 出來很久後,在 x86 上面的運行效率都一直不怎麼樣。

而且現在還有 NDK 程序的出現, ARM 的二進製程序在 x86 上面是不能運行的。這些程序都不能運行。
不過 x86 有個優勢就是自己的性能很強,而且模擬器技術現在也很強了。在 x86 上面,可以藉助虛擬機(qemu 的 user mode 就值得看看)來運行 ARM 的二進製程序。
不過虛擬機其實還是有性能損失的。

所以未來,Android 的跨 CPU 架構依然還是問題。純 JAVA 程序好說,用了 NDK 的程序就是問題了。

不過 llvm 這個編譯器又給了另外一條路,既可以虛擬機方式運行,又可以編譯成本地程序而成為二進製程序來優化性能運行。或許 Android 會考慮使用這種方法或者類似的讓 NDK 程序可以跨 CPU 實現。代價是 Android 要自帶一個編譯器,體積也不小的。

MAC OS X 還有一種方法。在 MAC 放棄 IBM 的 Power CPU 而改用 Intel 的 CPU 後,他的程序都是裡面附帶兩套二進製程序,老的 G4 CPU 的機器,就用程序裡面的 power 指令集的程序代碼。新的 Intel CPU 的機器,就自動用裡面的 x86 指令來運行程序。從而實現完美的雙指令集運行。不過代價是這樣的程序都是兩套指令集的內容,體積翻倍。

目前來說,似乎用了 NDK 的程序還都不能用的。不排除現在某些 x86 的手機,使用了虛擬機技術來實現運行 NDK 程序。現在 Linux 下面的 qemu 的 usermode 配合內核的 binfmt_misc 功能,可以讓系統自動識別某個架構的程序,去調用 qemu 來執行。

『貳』 如何從android源碼中編譯webkit

android本來自帶了webkit瀏覽器,但是要對其進行custom就需要android源代碼才行, 但是在沒有源碼的情況下,那麼就需要用到ndk了,比如,我是在xoom上做custom webkit的。
1、雖然ndk提供的庫很少,而且沒有skia,但是好在有bitmap,這樣顯示慢了點,沒有硬加速,但不是不可能。
2、webkit需要的第三方庫,freetype,png,jpeg,sqlite3等雖然android源碼中有,但是ndk沒有開放,因此所有的第三方庫,freetype,png,jpeg,sqlite3,cairo,curl,fontconfig,pixman,iconv等都需要用ndk cross-compile成靜態庫,然後鏈接到最終的動態庫中。
3、選擇iconv是icu太大,而且沒有多語言的需求,選擇cairo+pixman是skia的移植性不好,而且cairo支持很多種backend。
4、編譯第三方庫需要用到autoconfig,ndk中有如何生成交叉編譯鏈的文檔,然後在configure時使用這個工具鏈就可以了,但是android用到的是bionic庫,因此會有很少的地方需要修改,有些庫也不能生成test程序,但是靜態庫是沒問題的。
5、利用ndk生成的交叉工具鏈,在加上webkit自帶的cmake編譯系統,生成webkit的動態庫是沒有問題的,當然是webkit的內核,而且有些平台相關的部分代碼需要修改。
6、但是只要是以linux平台為基礎,修改還是很容易的,我移植的webkit是先移植到linux平台上,然後移植到android平台上的,所以修改相對少了很多,但是修改大多都在WebCore/platform下,在選擇了的平台相關庫後,做相應的配置和修改。
7、其次是在WebKit目錄,這個主要是支持和使用WebCore,因此在需求不是整個瀏覽器,而只是正常地顯示網頁時,還是可以寫的比較簡單的。

『叄』 android為什麼不直接執行linux的程序而是自己搞一套

安卓系統可以執行Linux程序,其基於Linux內核,底層實現依靠Linux ELF可執行文件。然而,安卓系統並不直接運行傳統的基於glibc的Linux軟體。

谷歌為了實現商業目的,移除了包括glibc在內的遵守(L)GPL許可的組件,自行開發了名為bionic的運行庫。實際上,bionic庫本質上是libc的一種實現,適用於手機等小型設備,且Android NDK亦使用bionic庫進行編譯。

此外,安卓系統本身的文件系統存在限制,同樣限制了Linux軟體的安裝與使用。盡管如此,運行Linux軟體仍有替代方案,例如Linux容器。通過Termux等軟體,可以實現Linux軟體的運行,其自帶常見Linux軟體,通過apt/pkg命令進行安裝。

盡管Termux自帶軟體不夠豐富,但chroot和proot等容器構建方案提供了更多可能性。利用這些方案,可以在安卓系統上運行Linux發行版,實現更豐富的功能,甚至運行Windows軟體。

Linux容器存在一些局限性,如無法使用systemd(因無法確保init的PID為1)以及無法調用某些硬體。然而,可以通過曲線救國的方式解決這些問題,如通過x11轉發實現畫面輸出,聲音輸入輸出藉助pulseaudio,GPU渲染藉助virglrenderer(需掛載/tmp目錄到termux的tmp目錄)等。

理論上,靜態編譯的程序可在安卓平台直接使用,因為靜態編譯不依賴動態庫,可獨立運行。例如,qemu經過靜態編譯後,可在安卓平台藉助終端模擬器直接運行,但功能上會有所缺失。

『肆』 android內核源代碼有多大

每個版本的源代碼不同,幾百兆到幾G不等。
Android是一種基於Linux的自由及開放源橋襪代碼敏弊激的操作系統,主要使用於移動設備,如智能手機和平板電腦,由Google公司和開放手機聯盟領導及開發。尚未有統一中文名稱,中國大陸地區較多人使用「安卓」或「安致」。Android操作系統最初由Andy Rubin開發,主卜頌要支持手機。

熱點內容
壓縮軟體流程 發布:2025-03-10 22:00:43 瀏覽:300
安卓哪個國家的品牌好 發布:2025-03-10 21:53:16 瀏覽:12
ftp字元集錦 發布:2025-03-10 21:37:00 瀏覽:77
如何提取腳本按鍵 發布:2025-03-10 21:29:04 瀏覽:221
遼寧省dns伺服器怎麼填物理機 發布:2025-03-10 21:25:05 瀏覽:787
雲計算機伺服器區別 發布:2025-03-10 21:10:21 瀏覽:235
古代錦衣衛需要哪些配置 發布:2025-03-10 21:06:17 瀏覽:618
ps樣式在的文件夾 發布:2025-03-10 20:50:07 瀏覽:614
圖像壓縮編碼演算法 發布:2025-03-10 20:48:23 瀏覽:386
墮落解壓縮碼 發布:2025-03-10 20:46:55 瀏覽:626