本文來自http://blog.csdn.net/liuxian13183/ ,引用必須註明出處!
本篇包含:Freeline、JFrog、Jenkins的介紹。
Freeline:
Instant Run爲我們提供了增量更新的方式,支持 gradle2.0和Android4.0以上版本,讓構建項目變的快速,同時由於multiDex出現,增量更新也變的簡單,但現實狀況是Studio編譯依然卡卡。
Facebook的Buck是不錯的,但它只支持Linux開發機;而Alibaba 開源的Freeline卻可以在Windows機器上使用,根據依賴關係充分利用緩 存最少編譯,並開啓SocketServer保證crash同時也可以進行編譯,最終實現全量編譯和增量編譯同時進程,提高2-3倍的編譯速度。
注意事項
1、只能使用2.2以上的gradle版本和python2.7及以下版本,配置好環境變量
2、使用jcenter編譯而非mavenCenter,因爲某些gradle後者沒有
3、此文件裏的gradle版本需要更換,csdn限制只能傳80M以內的文件,大家只好到官網下載,地址:gradle3.3
4、
主項目的build.gradle加入如下內容:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.antfortune.freeline:gradle:0.8.5'
}
}
apply plugin: 'com.antfortune.freeline'
dependencies {
compile 'com.antfortune.freeline:gradle:0.8.5'
}
目前最高版本是0.8.5
5、配置完,在Android Studio的Terminal裏執行如下命令,代表從國內鏡像下載,要快的多。
gradlew initFreeline -Pmirror
其他特色Features
- 支持標準的多模塊 Gradle 工程的增量構建
- 併發執行增量編譯任務
- 進程級別異常隔離機制
- 支持 so 動態更新
- 支持 resource.arsc 緩存
- 支持 retrolambda
- 支持 DataBinding
- 支持各類主流注解庫
- 支持 Windows,Linux,Mac 平臺
以下列表爲 Freeline 支持的熱更新情況:
Java | drawable, layout, etc. | res/values | native so | |
---|---|---|---|---|
add | √ | √ | √ | √ |
change | √ | √ | √ | √ |
remove | √ | √ | x | - |
Freeline 已經分別在 API 17,19,22,23 的 Android 模擬器、Android 6.0 Nexus 6P 以及 Android 4.4 錘子手機上經過測試。如果想要充分體驗 Freeline 增量編譯的速度的話,最好使用 Android 5.0+ 的設備。
限制Limitations
- 第一次增量資源編譯的時候可能會有點慢
- 不支持刪除帶 id 的資源,否則可能導致 aapt 編譯出錯
- 暫不支持抽象類的增量編譯
- 不支持開啓 Jack 編譯
- 不支持 Kotlin/Groovy/Scala
官方地址:https://github.com/alibaba/freeline/
JFrog構建:
用法,把獨立的模塊分享成一個子項目,編譯成aar使用。
作用是
1、依賴子項目,可以加速主項目的編譯速度
2、獨立子項目,方便專人維護和升級
3、做基礎配置的構建,讓主項目只做精力。
網上教程比較多,我就不再寫了,推薦方案
遠程構建:https://www.jianshu.com/p/37ac9e7e03f3
本地構建:http://blog.aha-nstd.com/2017/03/08/set-up-a-local-jfrog-artifactory/
構建常見問題:
1、409錯誤,conflict,已經存在此版本號,需要升級一下版本號;
2、刪除老版本號,繼續上傳,結果依賴還是老版本號的,刪除本地緩存無效,那麼也要升級一下版本號;
3、透傳依賴,官方不推薦使用,因爲子項目也可能依賴同樣的第三方項目,如果Api不同,則容易引發系統崩潰,方案是自己編寫pom腳本,爲gralde的project選項,增加dependencies-denpendency依賴。
Jenkins構建:
用法,通過git拉取相應分支的代碼,根據腳本打出相應渠道、類型等手機應用包。
作用是
1、解放了開發,防止一邊寫代碼,一邊打包的場景出現,影響開發速度和質量;
2、分離了業務,新功能和解決Bug歸"RD",打包測試歸"QA",界面驗收歸"UE",功能驗收和發佈歸“PM”;
可本地構建(自己電腦 ),也可遠程構建(放公司服務器)。
推薦教程:http://blog.csdn.net/mabeijianxi/article/details/52680283
Apk打包前後的差別:
打包前
打包後:
表明:代碼編譯後,進行了自動優化。
指令重排指多線程,共同執行一個局部代碼時,產生不確定的執行結果。