Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Androidstudio中gradle配置和使用

Androidstudio中gradle配置和使用

編輯:關於Android編程

加速篇

GRADLE的構建過程通常會比較漫長,一個中等項目,10M左右大小的app,一次完整構建大概在5分鐘左右,是不是很嚇人,當然,如果是在調試階段,采用Android Studuo 2.0,默認提供的Instant Run方式,每次修改都不會重新構建項目,從而加快了構建過程。恩,這是另一個故事,這裡,我們先談談GRADLE腳本的加速姿勢。

一般來說,GRADLE一次完整的構建過程通常分成三個部分,初始化,配置和執行任務,那麼我們可以考慮從這三個部分分別嘗試優化。

使用daemon

構建初始化的很多工作是關於java虛擬機的啟動,加載虛擬機環境,加載class文件等,如果這些動作交給一個單獨的後台進程去做,那麼,第一次初始化之後的修改代碼再構建是不是可以節省很多時間呢?答案是肯定的,通過在gradle.properties加入這樣一句來開啟,如果想讓修改全局所有項目都生效,那麼修改這個文件~/.gradle/gradle.properties

\

按需配置

配置有一種方式是按需配置,目前還在試驗孵化階段,所以默認是關閉的,可以通過在gradle.properties加入這樣一句來開啟

\

依賴庫使用固定版本

項目開發過程中,難免需要用到三方庫,這就形成了項目之間的依賴關系,GRADLE提供了多種集成三方庫的方式,提供了很方便的項目依賴管理,本地庫,庫工程,maven庫全支持。既然用到庫,就會遇到庫版本的問題和升級問題,其中maven庫的依賴管理支持一種動態版本的方式,也就是說,GRADLE可以做到不依賴具體某個版本的庫,而是每次從repo拉取最新的庫到本地做編譯。具體使用是這樣的:

拿gson庫舉例,如果依賴2.2.1這個版本,可以在build.gradle文件裡這樣寫

\

如果不想依賴具體的庫,想每次從maven repo中拉取最新的庫,那麼,可以寫成這樣:

\

也可以寫成這樣

\

甚至可以這樣

\

其中含義相信不用我解釋,大家也看得明白吧。

用”+”來通配一個版本族,這樣有個好處是maven上有新庫了,不用你操心升級,GRADLE編譯的時候自動升級了,但是帶來了兩個壞處,一是,有可能新版庫的接口改了,導致編譯失敗,這個時候需要修改代碼做升級適配;更大的壞處是,每次GRADLE編譯完整的項目,都會去maven上試圖拉取最新的庫,這樣,拖慢了編譯速度,尤其在網絡非常差的時候,所以,為了構建速度,建議寫死依賴庫的版本號。

升級到最新的GRADLE和JDK

有一個很通俗的道理是,發展的東西會越來越好,最新版的GRADLE和JDK往往是性能最好,運行最流暢最快的,所以,升級吧,JDK的升級這裡不說了,具體看Oracle的官方文檔。這裡說說GRADLE的版本升級,GRALDE采用了一種叫做wrapper的方式,可以做到每個項目獨立使用其自己的GRADLE版本,這樣做的好處不言而喻,每個項目的構建環境獨立,互不影響。但為什麼會出現這個東西,我的猜想是因為GRADLE發展太快,新舊版本之間很難兼容。如果你有多個項目都采用GRADLE構建,假設都用同一個全局的GRADLE,那麼當這個GRADLE升級後,所有的項目可能都會編譯失敗,你得一個一個改配置,那麼,下次再升級,同樣的流程的再走一遍,是不是很煩。采用wrapper的方式很好的解決了這個問題,每個項目采用獨立的GRADLE版本,互不影響,如果你只想升級其中一個,你改這一個項目的GRADLE wrapper就好了。在你的項目目錄下找到這個文件gradle/wrapper/gradle-wrapper.properties並修改distributionUrl=https\://services.gradle.org/distributions/gradle-2.11-all.zip到你想升級的版本就可以了。

減少編譯腳本中的I/O操作

有時候,編譯腳本中會有一些代碼做動態信息的獲取,比如想從git中獲取一個數字作為版本號

\

其實這個操作主要是為了在構建的機器上為了發布版本而做的,日常環境研發調試無需這樣,所以可以優化成如下方式:

\

並行構建模塊化項目

將你的項目拆分成多個子項目並開啟並行構建也是一個不錯的主意,比如將相對獨立的模塊拆分成獨立的庫工程(Library projects),主工程(Application project)依賴這些庫工程,這樣的話,開啟並行構建才會發揮作用。並行構建開啟方式是修改文件gradle.properties,加入如下行:

org.gradle.parallel=true

基礎配置篇

全局基礎配置管理

設置全局編碼

如果導入一個windows下編寫的項目,而代碼中有中文注釋,采用GBK, GB18030等編碼方式時,編譯會報錯,可以采用如下方式統一項目的編碼

\

設置全局編譯器的版本

如果編程過程中采用了新版JDK(比如1.7)才支持的特性(比如new HashMap<>這樣的寫法),而編譯的時候默認是舊版的JDK(比如1.6),這個時候編譯會報錯,采用如下方式可以指定用哪個版本的編譯器編譯,前提是JAVA_HOME指定的JDK是大於等於新版JDK的哦^o^,其他和java編譯器相關的也可以在這裡配置

\

如果不想全局生效,可以將tasks.withType(JavaCompile)放入某個子項目中。

配置簽名信息

簽名信息屬於敏感信息,建議不要寫死放到gradle腳本中,而是寫到一個單獨的配置文件裡,而且這個配置文件不要同步到版本管理系統上,而是由本地維護,防止在版本管理平台上洩漏敏感信息。建議簽名信息內容寫到gradle.properties或者local.properties文件裡,這樣,gradle腳本可以直接引用,如果是放在一個自定義的文件中,gradle腳本需要提供相應的代碼來讀取文件的內容。

文件內容參考如下:

\

gradle腳本引用代碼參考:

\

如果簽名信息沒有放到gradle.properties或者local.properties文件裡,那就需要自己寫代碼讀取咯,假設簽名信息放在signing.properties文件中, 文件內容可以參考上面,讀取文件的代碼放入gradle腳本中就可以了,參考代碼如下

\

設置第三方maven地址

其中name和credentials是可選項,視具體情況而定

\

GRADLE腳本拆分以及引用

如果一個gradle腳本太大,可以按照具體任務的類型拆分成幾個子腳本,然後引入到主腳本中

\

全局變量定義及引用

可以在頂層build.gradle腳本中定義一些全局變量,提供給子腳本引用

\

子腳本引用

\

構建參數篇

構建參數設置

AndroidManifest占位符,BuildConfig以及資源配置

根據版本類型和構建變種定義不同的變量值供程序引用

\

buildConfigField支持Java中基本數據類型,如果是字符串,記得加轉義後的雙引號
resValue支持res/values下的資源定義,字符串無需叫轉義後的雙引號

設置支持的語言

利用這個配置可以去掉三方庫中無用的語言

\

重命名產出的文件

需要將產出的aar/apk移到另外一個地方的時候

\

刪除unaligned apk

刪除無用的apk中間產物

\

將自定義的任務加入構建流程

有時候編寫了一些自定義的任務,希望加入到構建流程中對輸入做預處理或者對輸出做後處理

\

比如這裡app工程依賴library的構建,可以這樣手工指定依賴關系

打包選項

有時候引用的三方庫會帶有一些配置文件xxxx.properties,或者license信息,打包的時候想去掉這些信息,就可以這樣做

\

lint選項開關

lint會按默認選項會做嚴格檢查,遇到包錯誤會終止構建過程,可以用如下開關關掉這個選項,不過最好是重視下lint的輸出,有問題及時修復,避免潛在問題

\

依賴庫篇

三方庫(本地,maven)的依賴和工程庫依賴關系

依賴庫按構建目標定制

不同的依賴庫可以按構建目標做定制,比如freemium的變種集成了廣告,就可以這樣寫

\

aar本地庫依賴

jar本地庫的依賴很容易寫,arr本地庫的依賴稍微麻煩些

\

NDK篇

NDK配置

只保留某一個abi,比如arm-eabi

為了包大小的考慮,去掉多余的本地庫

\

總結篇

只有更好,木有最好;
只有總結,木有完結;

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved