當前位置:首頁 » 安卓系統 » 虛擬機編譯android

虛擬機編譯android

發布時間: 2023-08-21 12:23:39

㈠ 請問用虛擬機下載編譯Android源碼主要是為了干什麼啊

估計是要你做好編譯環境
下好sdk(軟體開發包)裝好里悄頌面有模擬器的
如果是的話
你直接網路android sdk加上你們研究的版本號比如2.1 2.2
android是不用燒錄的啟鏈鄭
編譯喚磨好就是個apk文件直接拉到手機裝的

㈡ Android現在支持純C/C++語言開發應用嗎還需要ART/java虛擬機嗎

目前截止到2.3系統來看,最終安裝的文件仍然是apk格式,界面和系統大多數功能均使用Java開發,但是稍微高端的應用考慮到性能和安全性使用C/C++是必要的,C/C++最終編譯的so文件就相當於Windows下的dll動態庫,需要一個宿主去載入調用,我們通過Java的JNI去調用這些本地方法,目前從NDK的版本來看Google不斷增強和開放C++在Android開發的用處,以保證和iPhone這種使用本地語言開發出來的軟體體驗度不能差距太大。


安卓底層是用C/C++開發的,如果需要編和升寫很牛逼的android應用的話,毫無疑問的說,一定會用到C或者C++,但是Android的應用框架是用Java寫的,而開發者一般而言只會用到應用框架這一層面,所以可以這么說,Android開發基本上就是使用Java語言進行開發。如果你有對Java比較了解的話,那麼你一定就會知道JNI,是java調用C/C++代碼的一種機制,這樣就可以使得可以在Android終端設備上跑C++代碼了~我和你說,我就是大三才開始學Java和android開發的,喚渣老大二升大三的那個假期自學Java,開學後開始學Android開發的,想要學習,永遠都不晚!哇撒撒~碼了不少梁州字,望採納


㈢ Android各版本虛擬機的Dexopt區別

從Android 2.1版本到現在的Android 11 , 中間虛擬機變化過三次 :

對於5.0以下的版本 , 載入Multidex的時候 , 會優先判斷 odex 是否存在 , 如果不存在 , 則會通過dexopt生成odex , 然後再載入odex , 同時 , 如果存在 多個Dex文件 的話 , Dexopt 也會執行多次.

使用Dalvik虛擬機 , 生成odex文件 . Dalvik採用的是JIT編譯+解釋器,也就是即時編譯,每次應用運行時會實時將Dex翻譯成機器碼.

使用ART虛擬機 , 生成oat文件. 在ROM OTA或者恢復出場設置後 , 會要進行dex2oat根據當前ROM進行重新編譯生成.oat文件.

使用ART虛擬機 , 但是在7.0之上 , 增加了 .vdex 與 .art 機制 , 在ART虛擬機再次啟動/升級 , 載入Dex/Oat文件時 , 會減少Dex的校驗時間 , 提升載入與運行效率

在ART虛擬機的基礎上 , 增加了 Cdex ( Compat Dex ) 機制 ,

compat_dex_file.h

在dex2oat的時候 , 會有一個目標編譯類型 , 會有以下幾類 , 根據時機不同dex2oat的編譯方式也會不同

配置

㈣ 為什麼Android不可以繞開虛擬機直接運行

安卓是谷歌將它從開源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沒有繞開虛擬機直接運行,是因為從它研發之初為了保持高兼容性,不得不沿用了虛擬機的機制。但在這些年,華為研發了「方舟」編譯器,就是為了解決這個問題。通過方舟編譯器編譯後的程序可以直接以機器碼的形式在安卓系統上運行,效率大大提高。

為了多點兒面試題[機智]

當初設計android的時候,設計人員只是軟體工程師,無法針對某個CPU(目前有的CPU框架intel,arm,mips,rsicv等)去開發。最好的是,我針對所有CPU都支持。

跨平台,是指java語言編寫的程序,一次編譯後,可以在多個系統平台上運行。

因為機器針對不同機器語言,有不同執行邏輯。

就好比二進制000100,在arm裡面是調用加法器,而riscv是調用乘法器一樣。所以,需要給這些不同平台請個翻譯。而虛擬機就是起到翻譯作用。

這樣雖然增加了消耗(例如執行同樣代碼,時間消耗上,c明顯由於java),但是可以某種意義上,把軟體,物理硬體分開了。軟體重點設計自己app,而硬體不斷增加CPU性能。

因為上層應用是 建立在 java 庫的基礎上,運行 java 庫 需要 java 虛擬機,調試模式,可以登錄到系統里,直接運行linux 命令,也可以下載運行 c程序。

啥叫Android不可以繞開虛擬機直接運行?Android本質上是Linux的變種,它本身就是應用APP的虛擬機容器,Android源碼針對硬體平台編譯之後,就是直接在CPU上運行的機器碼了,它的運行並不依賴於其他的虛擬機。

APP是JAVA打包的,倒是需要在Android的JVM里運行,畢竟要考慮跨平台嘛。

ActivityThread.java就是一個應用程序,有main方法,是一個進程,就是靠虛擬機,沒有這個就沒有app。咋繞開,繞開就得不用這個,得從內部更換成別的,都更換了那就不是簡單的事情了

因為java代碼必須編譯成機器語言才行,這時候就要接助虛擬機

在問為什麼前,先問下是什麼?Android是可以不依賴虛擬機運行的,只需要改一下重新編譯就好了。

系統就是這么設計的

熱點內容
滑板鞋腳本視頻 發布:2025-02-02 09:48:54 瀏覽:432
群暉怎麼玩安卓模擬器 發布:2025-02-02 09:45:23 瀏覽:557
三星安卓12彩蛋怎麼玩 發布:2025-02-02 09:44:39 瀏覽:743
電腦顯示連接伺服器錯誤 發布:2025-02-02 09:24:10 瀏覽:537
瑞芯微開發板編譯 發布:2025-02-02 09:22:54 瀏覽:146
linux虛擬機用gcc編譯時顯示錯誤 發布:2025-02-02 09:14:01 瀏覽:235
java駝峰 發布:2025-02-02 09:13:26 瀏覽:651
魔獸腳本怎麼用 發布:2025-02-02 09:10:28 瀏覽:538
linuxadobe 發布:2025-02-02 09:09:43 瀏覽:212
sql2000資料庫連接 發布:2025-02-02 09:09:43 瀏覽:726