Gradle對多版本項目的管理

jopen 9年前發布 | 42K 次閱讀 Gradle 項目構建

      在實際工作中,我們可能會給很動客戶提供apk,而不同的客戶又有不同的需求,如果需求不是差別很大的話,通過Gradle來管理是非常方便的。 Gradle的Android plugin提供了productFlavors方法來實現對多個項目的管理,具體實現方法為在項目Gradle腳本的android配置下加入以下代 碼,就加入了兩個項目的版本管理,其強大的地方在于可以通過對不同flavor的sourceSets進行配置來實現差異化,比如在src/escape /values的值會在編譯時覆蓋main sourceSets里的res/values的值,達到overlay的效果,后面會詳細的對這項屬性進行介紹:

android{

             . . . . . .

productFlavors{

            escape{

                versionName "1.0-escape"

            }

            tcl{

                versionName "1.0-tcl"

            }

     }

. . . . . .

}

然后點擊Build Variant右邊的箭頭就可以選擇相應的版本進行編譯



   詳細介紹Build variants(構建變種版本)

    該項功能主要是用來從一個單獨工程創建一個應用的不同版本,這是非常有用的,如果你的app有一個demo版本和一個需要收費的版本或者你想在不同配置的設備上都不同的apk。  
    Gradle使用product flavors(產品的多樣化)來創建app的不同版本,每一個app版本可能有不同的特點或者設備需求。Gradle為每一個版本的app產生不同的apk。
    構建變種
    app的每一個版本在Gradle編譯系統中用一個build variant(構建變種)表示。構建變種信息包含了編譯類型和產品獨特配置(build types和product flavor)。Android studio默認定義了兩種編譯類型(debug和release),沒有定義產品配置。這些默認的項目由兩個構建變種組成,debug和 release,gradle會為每一個變種生成一個apk。
     上面的例子中定義了兩個項目配置,escape和tcl,這會產生四個構建變種:

  •      escape-debug
  •      escape-release
  •      tcl-debug
  •      tcl-release
     在編譯的時候有四種選擇,可以為每一個變種生成相應的apk。
     在編譯每一個版本的app的時候,Gradle會從下面的目錄整合源代碼和資源:
  •      src/main/ 主要的代碼目錄(對所有的變種都通用)
  •      src/<buildType>/ 編譯類型代碼目錄
  •      src/<flavorName> falvor代碼目錄
     flavor代碼目錄的使用數量是根據工程的flavor配置來決定的:
  •      對于沒有定義任何flavors的工程,構建系統不會使用任何的flavor代碼目錄,比如為了產生沒有定義flavors的release版本變種,構建系統使用下列目錄:

          src/main/

          src/release/(build type)

  •       對于定義了一些flavors的工程,構建系統會使用一個flavor代碼目錄,例如,產生上面的escape-debug構建變種,構建系統會使用下列目錄:

        src/main/

        src/debug/(build type)

        src/escape/(flavor)

        這些目錄的代碼會被共同使用來產生構建變種的輸出,可以在不同的目錄中存在相同名稱的類,只要它們不在同一個變種的構建中使用。構建系統會把所有的 manifests整合成一個manifest,所以每一個構建變種都可以定義在manifest中定義不同的組件或者權限。
     構建系統會把所有的資源目錄組合到一起,如果在一個構建中,不同的目錄包含相同名稱的資源,優先級順序為:build type的資源覆蓋product flavor的資源,product flavor的資源覆蓋main source目錄的資源。

     創建app不同版本的步驟:

    1.在build文件中定義product flavors

    2.為每一個flavor創建source目錄,例如為escape flavor創建以下目錄

       app/src/escape/java

       app/src/escape/res

       app/src/escape/res/layout

       app/src/escape/res/values

    3.為project添加屬于flavor的代碼和資源

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!