-
1 # 苦苦tt
-
2 # Ren
啥叫Android不可以繞開虛擬機器直接執行?Android本質上是Linux的變種,它本身就是應用APP的虛擬機器容器,Android原始碼針對硬體平臺編譯之後,就是直接在CPU上執行的機器碼了,它的執行並不依賴於其他的虛擬機器。
APP是JAVA打包的,倒是需要在Android的JVM裡執行,畢竟要考慮跨平臺嘛。
-
3 # 數智風
安卓是谷歌將它從開源linux上改造而來,依舊保持開源特性。為了應用開發者更多地開發安卓程式,自然也就保留了linux上的虛擬機器機制。同時,安卓的目標是手機等移動終端,這些裝置的處理器五花百門,而且開源安卓也會被各種深入定製,這同樣導致了安卓依然沿用了虛擬機器機制來保持高相容性。當然,這些華為研發了方舟編譯器,讓系統直接執行機器碼,以此來消除虛擬機器帶來的弊端。
1、安卓的誕生過程決定了它會沿用linux的虛擬機器安卓系統最早並不是谷歌研發出來的,而是一家名叫Android的初創公司研發的。這家公司成立22個月後,就把原始Android雛形系統以4千萬美元的價格賣給了谷歌。這個雛形原本就基於linux系統研發而來,自然裡面也還是沿用了linux的虛擬機器機制。
2、移動終端硬體廠商太多,也只能沿用虛擬機器方式谷歌拿到系統後,自己繼續研發Android系統,在2007年還集合了84家當時一流的硬體廠商組成研發聯盟。整個研發依然還是基於linux開源系統,但它解決了商業化的一個大難題。那就是,linux是開源系統,是有GPL開源協議的。很多硬體廠家為了適配該系統,必須將在上面研發的驅動程式公開,一旦公開驅動程式程式碼就相當於公開了自己的硬體設計。而谷歌研發的Android系統解決了這個問題,它將驅動程式放置到了userspace裡面,並讓它可以透過l核心訪問硬體。同時,公開介面就可以讓硬體廠商編寫驅動程式。硬體廠商只需要提供驅動程式即可,不需要公開原始碼了。
這麼多硬體廠商一起研發,自然就會面臨一個問題就是每個廠商的硬體都不同。這對Android生態發展來說是個必須解決的相容性問題。最好的辦法依然是沿用linux的虛擬機器機制,這樣Android的軟體作者就無需針對不同硬體重新開發軟體。只需要一次開發就可以在安卓系統上的虛擬機器中執行。
3、華為的方舟編譯器安卓的虛擬機器機制在很大程度上解決了相容性的問題,但是這種邊解釋邊執行的方式,也降低了軟體的執行效率。這些年,華為在這方面的研發上花了大功夫,成功研製出了“方舟”編譯器。該編譯器就是為了解決這個問題而誕生的。如果軟體作者採用方舟編譯器重新編譯自己的程式。它的軟體就可以以機器碼的形式在安卓系統上高效執行,並且方舟編譯器還會對程式進行最佳化。按照華為方面的資料顯示,使用華為方舟編譯器編譯後的程式,操作流暢度提升24%,系統響應速度提升44%,第三方應用操作流暢度提升60%!
總結Android沒有繞開虛擬機器直接執行,是因為從它研發之初為了保持高相容性,不得不沿用了虛擬機器的機制。但在這些年,華為研發了“方舟”編譯器,就是為了解決這個問題。透過方舟編譯器編譯後的程式可以直接以機器碼的形式在安卓系統上執行,效率大大提高。
-
4 # 枝枝葉葉
因為上層應用是 建立在 java 庫的基礎上,執行 java 庫 需要 java 虛擬機器,除錯模式,可以登入到系統裡,直接執行linux 命令,也可以下載執行 c程式。
-
5 # ABCabc1163607019
ActivityThread.java就是一個應用程式,有main方法,是一個程序,就是靠虛擬機器,沒有這個就沒有app。咋繞開,繞開就得不用這個,得從內部更換成別的,都更換了那就不是簡單的事情了
-
6 # 餅乾要倔強
鴻蒙系統繞開了,所以鴻蒙揚言會比安卓快百分之多少多少。今年鴻蒙系統應該會普遍推送至華為手機。你可以瞭解下!
-
7 # 跳躍的男子
android是開源開放性作業系統,必須適應不同的硬體平臺,使用託管程式碼是最佳選擇,否則應用開發會有極不統一的適配問題。
-
8 # 格林楠
繞開虛擬機器安卓平臺的開發就成了相當浩大的工程了,要對眾多的安卓機型挨個進行適配,安卓現在在用的各種型號估計要上萬種,蘋果手機發展到現在包括手機和平板也不到一百種!用虛擬機器只要對配置相近的機型進行統一適配就可以了
回覆列表
當初設計android的時候,設計人員只是軟體工程師,無法針對某個CPU(目前有的CPU框架intel,arm,mips,rsicv等)去開發。最好的是,我針對所有CPU都支援。
於是,安卓發現了java,java設計理念是啥?
跨平臺,是指java語言編寫的程式,一次編譯後,可以在多個系統平臺上執行。
怎麼實現一次編譯,多平臺(cpu)執行因為機器針對不同機器語言,有不同執行邏輯。
就好比二進位制000100,在arm裡面是呼叫加法器,而riscv是呼叫乘法器一樣。所以,需要給這些不同平臺請個翻譯。而虛擬機器就是起到翻譯作用。
這樣雖然增加了消耗(例如執行同樣程式碼,時間消耗上,c明顯由於java),但是可以某種意義上,把軟體,物理硬體分開了。軟體重點設計自己app,而硬體不斷增加CPU效能。