Android Studio中的多渠道包開發

今天來看一下Android Studio中的多渠道打包功能。主要應用到了Gradle中的Product Flavors配置。

首先建立一個普通的APP工程。創建好後默認的結構如下:
這裏寫圖片描述

可以看到默認包含main這一主幹版本。
接下來加入我們向發佈一個Foo的渠道版本,需要對工程進行配置。
結合網上查到的資料和我的實踐,簡要來說有以下幾個注意點

1.最新的Android Studio已經可以通過圖形界面來配置多個Flavor。
2.若不使用圖形界面配置Flavor,那麼需要手工編寫app的build.gradle文件
3.如果不預先配置Flavor信息,那麼在配置工程目錄及源碼文件時,不會有相應的輔助功能。

因此我們按照順序:
先配置Flavor信息,然後再配置Flavor的源碼及相關文件目錄。
圖形界面配置:
1.首先右鍵點擊工程目錄,選擇“open module settings”
2.打開app的flavor選項卡,按照需要填寫相關配置。如圖:
這裏寫圖片描述

打開app工程的build.gradle腳本,發現Android Studio已經幫我們自動填充了Product Flavors的配置。
因此,若想手動編寫gradle代碼,直接寫入這些配置即可:

productFlavors {
    foo {
        minSdkVersion 15
        applicationId 'com.example.multiflavorfoo'
        targetSdkVersion 23
        versionCode 1
        versionName '1.0'
    }
}

接下來創建Flavor相應的目錄。
1.右鍵單擊app文件夾,新建目錄並命名爲foo。
2.在foo中繼續新建一個文件夾java。
這裏寫圖片描述

可以看到Android Studio默認將java文件夾標示成藍色圖標(與main的java相同,表示這是一個源碼文件夾),此時右鍵點擊java文件夾,可以新建package。若是普通的黃色標識文件夾,右鍵菜單是沒有新建package選項的。

我們也可以在gradle中指定某個flavor的路徑:

sourceSets {
    foo {
        java.srcDirs = ['src/foo/java']
        res.srcDirs = ['src/foo/res']
    }
}

繼而在此新建package並創建MainActivity.java。
這時可以看到Android Studio報錯,說此處有類衝突(Duplicate class)——MainActivity和main主幹中的MainActivity衝突了。
這裏寫圖片描述

這是由於gradle編譯flavor時,總會檢查分支代碼路徑和主幹代碼路徑,所以不可避免的產生了類衝突。
假如確實有這種需求:兩個分支中存在某個相同名稱的類。那麼可以再新建一個分支bar,使用foo和bar開發,並將main中的重名類刪除掉。

仿照剛纔的步驟,新建一個bar分支:

productFlavors {
        foo {
            minSdkVersion 15
            applicationId 'com.example.multiflavorfoo'
            targetSdkVersion 23
            versionCode 1
            versionName '1.0'
        }

        bar {
            minSdkVersion 15
            applicationId 'com.example.multiflavorbar'
            targetSdkVersion 23
            versionCode 1
            versionName '1.0'
        }
    }


然後再新建相應文件夾,會發現java文件夾不會默認標藍,也不能在下面創建package了。
這裏寫圖片描述

實際在windows資源管理器中手動創建這些文件夾是完全沒有問題的,而且運行gradle命令也可以正確編譯工程。
這裏實際是Android Studio上層給開發人員的限制——同一時間僅可在一個flavor上開發。

如果想切換到bar flavor開發,需要在Build Variants面板中選擇bar爲當前的Build Variant。
然後就會發現foo這一分支不可操作了,bar下的文件夾按照我們的配置可以正常使用了。
這裏寫圖片描述

由於foo分支不是當前編譯選定的分支,因此java中的package文件夾都按普通的文件夾處理顯示。

這時將main中的MainActivity剪切到bar下,會發現即使切換回foo分支,類衝突的錯誤也不存在了。

開發完不同flavor,可使用gradle task命令查看各個分支可編譯的選項,運行相應命令;
或者通過Build Variant面板選擇當前要編譯的版本,在Android Studio中運行即可。

發佈了61 篇原創文章 · 獲贊 77 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章