編譯鏈接耗時優化
A. 如何優化 Android Studio 啟動,編譯和運行速度
優化 Android Studio 啟動、編譯和運行速度?
【阿里雲】攜手碼雲為社區用戶送福利,全網專享,詳情請點擊>>> »
作為一名 Android 程序員,選擇一個好的 IDE 工具可以使開發變得非常高效,很多程序員喜歡使用 Google 的 Android Studio來進行開發,但使用起來有時會出現卡頓等問題。本文介紹了幾種優化 Android Studio 啟動、編譯、運行速度的方法。
首先解決一個 Android Studio 啟動報錯的問題
1、進入剛安裝的 Android Studio 目錄下的bin目錄。找到 idea.properties 文件,用文本編輯器打開。
2、在 idea.properties 文件末尾添加一行:disable.android.first.run=true,然後保存文件。
3、關閉 Android Studio 後重新啟動,便可進入界面。
優化 Android Studio 啟動速度
1、開啟 gradle 單獨的守護進程
當 Android Studio 遇到錯誤的時候,往往會導致 Android Studio 掛掉,為了防止推出程序,則另外開啟一個線程來守護 Android Studio 的進程,具體操作。 在 C:\Users\.gradle 這個目錄下,創建 gradle.properties 配置文件,復制以下配置進行優化。
# Project-wide Gradle settings.
org.gradle.daemon=true
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m
-XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.configureondemand=true
這些配置文件主要就是增大 gradle 運行的 java 虛擬機的大小,讓 gradle 在編譯的時候使用獨立進程,讓 gradle 可以很好的運行。
2、擴大內存
64位:\studio64.exe.vmoptions or studio.exe.vmoptions
32位:\studio.exe.vmoptions or studio.exe.vmoptions
編輯這個文件,在最開始的兩行設置內存大小,類似於eclipse.ini中的配置。配置如下:
-Xms256m
-Xmx1024m
B. 如何加快xcode編譯速度
1. 增加XCode執行的線程數
可以根據自己Mac的性能,更改線程數設置5:defaults write com.apple.Xcode 5
另外也有一個設置可以開啟:defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES
XCode默認使用與CPU核數相同的線程來進行編譯,但由於編譯過程中的IO操作往往比CPU運算要多,因此適當的提升線程數可以在一定程度上加快編譯速度。
2.將Debug Information Format改為DWARF
在工程對應Target的Build Settings中,找到Debug Information Format這一項,將Debug時的DWARF with dSYM file改為DWARF。
這一項設置的是是否將調試信息加入到可執行文件中,改為DWARF後,如果程序崩潰,將無法輸出崩潰位置對應的函數堆棧,但由於Debug模式下可以在XCode中查看調試信息,所以改為DWARF影響並不大。這一項更改完之後,可以大幅提升編譯速度。
比如在目前本人負責的項目中,由於依賴了多個Target,所以需要在每個Target的Debug Information Format設置為DWARF。順便提一下,如果通過Cocoapod引入第三方則Debug Information Format默認就是設置為DWARF的。
SDWebImage通過Cocoapod``Debug Information Format的默認設置
注意:將Debug Information Format改為DWARF之後,會導致在Debug窗口無法查看相關類類型的成員變數的值。當需要查看這些值時,可以將Debug Information Format改回DWARF with dSYM file,clean(必須)之後重新編譯即可。
3.將Build Active Architecture Only改為Yes
在工程對應Target的Build Settings中,找到Build Active Architecture Only這一項,將Debug時的NO改為Yes。
664334-fa1eb995c140ce0f.png
這一項設置的是是否僅編譯當前架構的版本,如果為NO,會編譯所有架構的版本。需要注意的是,此選項在Release模式下必須為NO`,否則發布的ipa在部分設備上將不能運行。這一項更改完之後,可以顯著提高編譯速度。
4.設計編譯優化等級
不要再項目中或者靜態庫中使用-O4,因為這會讓Clang鏈接Link Time Optimizations (LTO)使得編譯更慢,通常使用-O3。
注意:在設置編譯優化之後,XCode斷點和調試信息會不正常,所以一般靜態庫或者其他Target這樣設置。
4.資源整合
4.1 將常用的代碼及文件打包成靜態庫
4.2 添加預編譯文件,把常用的頭文件放到預編譯文件裡面
4.3 能用@class就用@class
C. 應用編譯優化三種模式
應用編譯優化三種模式分別是:編譯時間優化模式、執行時間優化模式和代碼大小優化模式。
1、編譯時間優化模式:關注編譯速度的提升,以縮短應用程序高脊的編譯時間為目標。在這種模式下,編譯器會減少編譯時間,會降低應用程序的執行效率。
2、執行時間優化模式:關注應用程序的執行效率,以提高應用程序的性能為目標。在這種模式下,編譯器會優化應用程序的代碼,以提高執行效率,會增加編譯時間。
3、代碼大小優化模式:關注應用程序的大小,以減小應兆培用程序的體積為目標。族念唯在這種模式下,編譯器會減小應用程序的代碼大小,以減小應用程序的體積,會降低應用程序的執行效率。
D. 如何優化 Android Studio 啟動,編譯和運行速度
首先你要找到原因,其原因分為兩大塊:
一、硬體方面:電腦硬體配置不高,這個是決定性的,決定了Android Studio的啟動,編譯和運行速度只能在一定區間內提升;
二、軟體方面:下載的Android Studio版本與你的電腦不能完美兼容運行。
解決辦法:
一、首先看電腦配置如何:可參考Android Studio官網中文版的介紹,鏈接(網路不予許發,你看圖吧):
四、加入以學習Android Studio為目的組建的的論壇、貼吧等進行查閱相關辦法,推薦首先去官網查詢;
五、最後提一個小建議,最好安裝到系統盤外的剩餘空間最大的盤,而且桌面不要放太多文件,尤其是大文件,這些很占內存,開機啟動項也清理一下,這樣會快很多,因為你問題描述系統了,我無法提供某個具體方法,所以具體的軟體方面的提速需你自己查閱。
E. Android Studio編譯慢、卡死和狂佔內存怎麼破
在2020年,仍然使用2g內存的電腦,你可以改變職業。沒有合適的設備,什麼都沒用。Android Studio是內存,設備爛卡死不可避免,要解決卡的問題,一定要升級硬體設備。另一些人則說,對修辭學的回答相當有力,在一定程度上,加快編譯的速度,卻不能解決卡死的問題,沒有人能解釋為什麼會加快編譯的速度。
至於加快編譯,有一種方法,我認為一些主要適用性的答案並不強,實際上應該從gradle開始,什麼不是正確的地方,也請輕噴,有什麼問題可以留個信息。
我談到了下面的所有步驟,建議在最後進行。在終端編譯中有很多好處:
能觀察整個編譯過程,幫助理解層次構建過程;
可以看出哪些任務在編譯過程中耗費時間,可以較慢地編寫出適合的補救方案;
可以終止編譯,如果在某個階段被卡住,CTRL + c終止編譯,Android也會終止在Studio中編譯,但基本上九次會失敗;
因為它最終會對Android Studio產生影響,基本不會導致Android Studio caton;不滿足Android工作室的各種bug ?
最後,為什麼要減少設置中模塊的數量。Gradle實際上可以加速編譯,但是有很多限制?
首先,我們認為編譯過程,首先解析gradle配置,設置任務依賴於有向圖,然後執行每個任務的模塊,如果我們通過maven的依賴關系,使用模塊的aar(單android庫),如果我們想要改變文件在這個模塊,不要再次修改上傳下載,每次都是很好,但是有一個致命的問題:不修改版本號,快照通常不是做的想法。這可能導致一些不會生效的變化,並且需要時間來解決這個問題。但是,有一種方法可以在一定程度上解決這個問題,並添加以下腳本:
項目。配置。所有(新操作<配置> ({@ Overridevoidexecute(配置文件){文件)。ResolutionStrategy。TimeUnit CacheDynamicVersionsFor(5。分鍾)
文件。ResolutionStrategy。TimeUnit CacheChangingMolesFor(0。秒)} })
有人會問,插件,每個人都要開發一個模塊,對於每個模塊的維護都要打包到maven,每次我修改,甚至很小的改動,也要做一個上傳,就會遇到快照不做同樣的問題。嘿,嘿,這個問題,我們公司有一個等級插件,已經解決了,至於解決方案,是公司機密,我不會說。
一件事,我相信大多數開發人員共同發展是單一模塊,該模塊的情況並不多,所以最基本的也是依賴aar或罐子里,並不存在所謂的圖書館aar上傳,所以一些答案的耶和華說並不意味著什麼,這就是為什麼我說影響編譯速度的情況主要集中在它的生命周期的第三階段,第三階段的優化,看到我的答案。
F. dll編譯鏈接特別慢
dll編譯鏈接特別慢原因處理方法:
1、編譯速度vue項目過大,引用的組件過多。可以放在StandardAssets經過上面的嘗試之後,把用到的2個插件放在StandardAssets目錄下,對sharpzip進行asm化,編譯時間基本保持在24秒左核歷右。
2、網路異常,可以通過更換不同的網路來提高編譯速度。
3、把框架代碼asm化框架吵氏掘代碼抽出到獨立目錄中,進行asm化,去升核掉package.json中不需要用到的庫,提高編譯速度。
G. Xcode 構建速度優化(一)衡量編譯時間
隨著項目不斷迭代,工程文件越來越多,引用的三方庫也越來越多,這些直接導致編譯時間的不斷增加,完整編譯一次項目動輒需要五分鍾以上時間,實在有些影響開發效率,是時候來一波提速了。
為編譯和構建提速,首先我們需要對速度有一個衡量標准:准確獲得構建用時
首先,我們需要定義要衡量和優化的內容。 有兩種選擇:
xcode默認情況下會跟蹤所有構建,我們可以通過更改xcode相關設置,來在活動查看器中顯示出構建時間,通過命令行:
每次編譯成功後,會在Successed之後顯示出所用時間:
Xcode Build Timing Summary是Xcode10中加入的用於查看獲取構建時間和發現用時瓶頸方面的最有利工具。 可以通過Proct->Perform Action->Build With Timing Summary來開啟:這樣在 Build Log 的末尾就會添加 Timing Summary Log。我們可以通過這個 log 看到哪個階段是耗時的,便於我們進行優化。
如上圖中: xib階段的編譯耗時明顯是比普通c文件要多的,意味著我們可以通過減少xib方式來優化提升速度
而c文件的編譯用時比總時間還要長,是因為c文件是並行編譯的
在命令行中同樣可以開啟這個功能:
常用的第三方工具有 BuildTimeAnalyzer 、 xcode-build-times-rendering 、 XCLogParser 。
BuildTimeAnalyzer可以統計可以得出某個文件的類型檢查時長,每個表達式的類型檢查時長。
xcode-build-times-rendering是一個Ruby編寫的第三方工具,可以方便地分別測量目標的構建時間並在圖表上顯示它們,使用gem安裝
接下來使用這個工具自帶命令配置項目
然後構建項目並生成報告:
這個工具使用上比較簡單,缺點是只能從宏觀上生成各個target編譯的整體圖標,無法詳細列出各個內部編譯明細
XCLogParser可以詳細列出各個Target和內部每個文件的編譯耗時,對我們分析編譯時間瓶頸非常有幫助,它的工作原理主要是做為解析器,通過解析xcode編譯生成的xcactivitylog日誌來記錄
安裝:
編譯項目後,進行安裝
安裝成功後通過命令:
會自動在當前目錄的 build/xclogparser/reports/ 路徑下生成報告,其中--project參數需要設置為待分析項目的名字,並注意當前在終端切換到希望寫入日誌的目錄。
報告截圖:
這個工具將作為我們後面分析提升編譯構建速度的主要使用工具。
經過我多次在不同時間段,不同電腦上不斷嘗試編譯,
我發現編譯耗時是一個比較玄的東西,及時在同一台電腦,同一個項目, 同一套環境配置下,編譯用時也會隨著電腦當前狀態(包括同時打開進程、散熱等等)上下大幅跳動,就像演算法時間復雜度一樣,有時候我們明明做了一些細微的優化,但是結果反而是編譯耗時增加了,這是很正常的事情
所以,衡量這個標准需要我們取多次試驗中的平均值作為參考。