AndroidStudio 性能優化指南(Windows 篇)

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

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

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的請折半)!):性能優化

-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 試試( ̄▽ ̄)"bash

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

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

AS 內存優化2.png

總結:這裏所謂的內存優化並非直覺上的優化(減小) AS 的內存佔用,偏偏相反,咱們的目的是想辦法提升 AS 的內存佔用,以盡最大可能給 AS 一個能相對流暢運行的硬件環境jvm

2.優化 Gradle 編譯速度

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

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 相關優化請參考 這篇文章 以及 這篇文章post

額我再多說一句,有時候咱們項目裏須要聯網下載的依賴都已經下載好了,在沒有添加新依賴的前提下,你若是想避免下次打開項目時由於 Gradle 要檢查依賴更新而等半天能夠這樣操做:

新加圖1
讓 Gradle 離線工做!(慎用!若是要更新依賴項必定要檢查好別勾選這個選項!)

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
}
複製代碼

注意上面代碼的一、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.09.01 更新~
相關文章
相關標籤/搜索