靈感來源
首先祝大家聖誕快樂! :smile: :+1:
該篇部落格靈感來自之前的一片部落格:
和一個神庫的issue:
首先簡單介紹下這個神庫——android-hidden-api
: 可以讓你使用安卓系統中 internal/hidden
的方法。
比如, Activity
裡有一個@hide的方法:
/**
* @hide
*/
public final boolean isResumed() {
return mResumed;
}複製程式碼
沒用該庫之前引用這個方法會報找不到該方法:
但是使用該庫後, 編譯正常:
編譯通過了, 實際執行怎麼樣呢, 該方法可執行正常, 但是不保證所有系統, 同時也不能保證所有內部方法可執行。褲子不錯, 不要貪用哦, 要多測試, 並加入異常處理。
詳細使用可參考鴻神之前的文章:
Android 輕鬆的檢視與使用hide與internal API
加速gradle編譯
1 常用的加速方法, 大家可能都配置好了, 主要下面幾個:
- 開啟gradle單獨的守護程式
在gradle.properties檔案中輸入如下程式碼:
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.properties檔案裡,那樣就不是針對一個專案生效,而是針對所有專案生效。
gradle.properties配置檔案主要就是增大gradle執行的java虛擬機器的大小,讓gradle在編譯的時候使用獨立程式,讓gradle可以平行的執行。
- 申請大記憶體
as安裝目錄/bin/studio64.vmoptions or studio.vmoptions(linux下,其他系統找類似檔案)
使用文字編輯器開啟,找到起始兩行,如下
-Xms128m
-Xmx750m
修改最小值和最大值,建議為
-Xms256m
-Xmx2048m
- incremental dex
改變incremental dexing的值,這是一個實驗的功能並且預設是關閉的。開啟這個開關有可能會導致構建失敗,錯誤資訊類似jdk finished with non-zero exit value 2
(尤其是在連續執行的時候),但我還是推薦你嘗試一下,看看它是否對你有用。
在主APP模組的build.gradle檔案中,新增下面的程式碼:
dexOptions {
incremental true
}複製程式碼
2 遮蔽部分Task
我們知道, 編譯的時候, 是有很多Task執行的, 可在右側 gradle
標籤下看到:
當我們正常編譯的時候, 這些Task都是會執行的, 我們看下編譯log:
很多Task後面都有 UP-TO-DATE
也就是Task已是最新, 這些基本不耗時, 其他都耗時, 專案大, 同時依賴多個庫, 那麼慢是正常的了...
下面, 哦,,, 沒錯, 就是下面,
遮蔽不需要的Task, 比如一些測試Task, 中間含有Test
的一些Task, 把這些遮蔽掉:
在專案的根build.gradle指令碼里新增遮蔽Task的程式碼:
allprojects {
repositories {
jcenter()
}
//skip Test tasks
gradle.taskGraph.whenReady {
tasks.each { task ->
if (task.name.contains("Test"))
{
task.enabled = false
}
}
}
}複製程式碼
這樣sync, 編譯, 見證奇蹟的時刻:
Oh, 聖誕快樂 :smile: 沒錯, 好多Task後面被標記了SKIPPED
, 那這些Task都被無情的忽視了, 酸爽。
當然還可以遮蔽掉其他Task, 歡迎討論。編譯時間的提升效果還是很明顯的, 專案越大越明顯。
到這裡就差不多了, 當然, 網上還有很多加速編譯的方法, 最好用的還是阿里的
這個還沒使用的, 趕緊用起來, 趕緊用起來, 趕緊用起來, 不解釋。
到這裡該說再見了, 有任何問題歡迎評論, 感謝您的閱讀, 聖誕快樂!
掘金技術徵文:
gold.xitu.io/post/58522d…