AndroidStudio 性能優化指南(Windows 篇)

注意:文中提及所有針對 AndroidStudio 的性能優化建議均實踐于 Windows 平臺,Mac 和 Linux 用戶僅供參考(下面 AndroidStudio 簡稱 AS,手打英文很累的>︿<)!

首先,關于 AS 以及 AS 使用的基礎知識就此略過不表。下面略過前戲直接開始正文~

1.AS 內存優化(針對 AS 卡頓)

首先打開 AS 的安裝目錄,如果忘了 AS 安裝在哪個目錄,直接在桌面上右鍵 AS 快捷方式,然后打開文件所在位置,下面是作者的 AS 安裝目錄,供參考:

AS 內存優化1.png

上圖用紅框圈出的兩個就是需要我們手動修改的 AS 配置文件,保持這兩個文件里的內容一致就行。這里以 studio64.exe.vmoptions 為例,打開后內容大致如下(注意后面的注釋是我手動加的):

-server
-Xms256m#JVM初始分配的堆內存,這里分配的值太小了
-Xmx1280m#JVM最大允許分配的堆內存,這里分配的值太小了
-XX:PermSize=64M#JVM初始分配的非堆內存,這里分配的值太小了
-XX:MaxPermSize=350m#JVM最大允許分配的非堆內存,這里分配的值太小了
-XX:ReservedCodeCacheSize=240m#預留代碼緩存大小,這里分配的值太小了
-XX:+UseConcMarkSweepGC#設置年老代為并發收集
-XX:SoftRefLRUPolicyMSPerMB=50
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-Djna.nosys=true
-Djna.boot.library.path=

-da

AS 卡頓的最主要原因就是這個配置文件里某些值分配的太小了,請參照下面修改(注意作者的電腦內存為16G,具體值依照自己電腦內存大小修改(8G的請折半)?。?/p>

-server
-Xms2048m
-Xmx4096m
-XX:PermSize=2048M
-XX:MaxPermSize=4096m
-XX:ReservedCodeCacheSize=2048m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-Djna.nosys=true
-Djna.boot.library.path=

-da

修改好保存,重啟下 AS 試試( ̄▽ ̄)"

分析:-xmx 參數是 Java 虛擬機啟動時的參數,用于限制最大堆內存。AS 啟動時設置了這個參數,并且默認值很小。 一旦你的工程變大,IDE 運行時間稍長,內存就開始吃緊,頻繁觸發 GC,自然會卡。

問題來了,上面修改的五個值,設的越大越好嗎?并不是的!JVM 運行其實用不了太多內存!注意這里設置的值大小一定要根據電腦的實際物理內存量力而行,如果不考慮實際物理內存而把這幾個值隨意設大可能會起到反作用!畢竟除了 JVM,別的需要內存的地方也要照顧到不是!還有,如果把上面五個值改的太大,啟動 AS 時會見到類似下面的錯誤:


AS 內存優化2.png

總結:這里所謂的內存優化并不是直覺上的優化(減少) AS 的內存占用,恰恰相反,我們的目的是想辦法提高 AS 的內存占用,以盡最大可能給 AS 一個能相對流暢運行的硬件環境

2.優化 Gradle 編譯速度

打開C:\Users\用戶名\.gradle,找到文件 gradle.properties(沒有就新建,在單個項目的 gradle.properties 文件中加入以下配置對單個項目能起到同樣的效果,作者本人遇到過把這些腳本添加到單個項目里才起作用) 確保文件里有下面幾行內容:

org.gradle.daemon=true#開啟 daemon
org.gradle.parallel=true #并行執行 Gradle 的 tasks
#為Gradle分配足夠大的內存
org.gradle.jvmargs=-Xmx5120m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
./gradlew assembleChinaFastDebug --configure-on-demand#多modules工程優化

更多 gradle 相關優化請參考 這篇文章 以及 這篇文章

額我再多說一句,有時候我們項目里需要聯網下載的依賴都已經下載好了,在沒有添加新依賴的前提下,你如果想避免下次打開項目時因為 Gradle 要檢查依賴更新而等半天可以這樣操作:


新加圖1

讓 Gradle 離線工作?。ㄉ饔茫∪绻乱蕾図椧欢ㄒ獧z查好別勾選這個選項?。?/p>

3.JCenter下載優化

用 gradle 構建項目下載依賴網速有時會慢得跟那啥似的…

原因你懂的,還是因為墻的存在!

解決方法,修改 maven 倉庫地址為國內鏡像即可,新建文件 init.gradle,將以下內容復制進文件:

allprojects{
    repositories {
        def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public'
        all { ArtifactRepository repo ->
            if(repo instanceof MavenArtifactRepository){
                def url = repo.url.toString()
                if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
                    remove repo
                }
            }
        }
        maven {
            url REPOSITORY_URL
        }
    }
}

注意上面第三行指定的 maven 倉庫鏡像URL
將此文件放在 C:\Users\用戶名\.gradle

如果你不想用鏡像的方式還可以直接改走 https 為 http,在項目根目錄的 build.gradle 文件里做如下修改:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        google()
        jcenter(){ url 'http://jcenter.bintray.com/'}//1
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.4'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter(){ url 'http://jcenter.bintray.com/'}//2
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

注意上面代碼的1、2處

4.Android SDK 下載/更新 優化

還是因為墻的存在,有時候下載或更新 Android SDK 時,emmm…
解決方法,為 AS 設置 HTTP代理即可:

AS優化6.png

一些可用 Android SDK 國內鏡像
這里注意,如果你為 AS 設置好 http代理后發現 Android SDK 相關組件都不能正常下載、更新或依賴了,把這里的設置狀態改回 No proxy 狀態就沒事了。

5.AS 導入項目在 Building gradle project info 一直卡住

這個我就不貼圖了,AS 在這地方卡住的原因大家應該能猜到(墻的原因),gradle官網雖然可以訪問,但是從 AS 里下載的速度emmm…
解決方法也很簡單,就是手動下載gradle離線包~
首先,從項目根目錄里打開這個文件:


AS優化3.png

打開后里面的內容類似這樣:

#Wed Feb 14 10:21:32 CST 2018
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip

注意上面最后一行指定的 gradle 版本,就是本項目使用的 gradle 版本,當本地還沒下載好這里指定版本的 gradle 時,AS 去 gradle 官網下載,因為你懂的的原因,就卡在這兒了…

打開C:\Users\用戶名\.gradle\wrapper\dists\gradle-x.xx-all\xxxxxxxxxxxx,如果里面的gradle-xx-all.zip不完整(如0KB),則說明下載不成功:


AS優化4.png

下載成功后的完整樣子是這樣的:


AS優化5.png

解決方法,去 gradle官網 下載需要的指定版本的 gradle zip包,把下載好的 gradle zip包放到上面的文件目錄(C:\Users\用戶名.gradle\wrapper\dists\gradle-x.xx-all\xxxxxxxxxxxx)中,就 OK 啦,運行 AS 之后會自動解壓( ?? ω ?? )?

這時再打開 AS 導入項目,就不會卡在奇怪的地方了~
你或許想到了,除了這種解決方法,我們還可以手動修改 gradle-wrapper.properties 文件里的 gradle 版本為我們本地已經下載好的 gradle 的版本~

作者本人才疏學淺,文中難免有錯誤或遺漏的地方,還望各位賞光的同行不吝賜教,
留言評論區與作者探討。

完!


略略略.png

本文已于 2019.08.28 更新~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374

推薦閱讀更多精彩內容