android 多版本打包之productFlavors 用法

前段時間開發過程中需要對一套代碼進行生成多個不同版本的apk的操作,在網上找了很多的資料學習了下,同時也在我的博客中記錄下以免遺忘,希望對大家有所幫助。

productFlavors

同時生成多渠道多版本的操作主要是靠productFlavors 來實現的,以下介紹下productFlavors 的一些屬性。
productFlavors的大體結構如下所示

android{
    productFlavors{
        productA{
            #這里定義產品A的特性
        }

        productB{
            #這里定義產品B的特性
        }

        #更多產品 ...
    }

這張是最終打包的時候出現的版本選擇

Paste_Image.png

可以進行多選或者單選進行選擇編譯版本,再也不用重復進行最原始的操作,一次打包一個,每次都得配置和替換不同版本的不同代碼邏輯和資源文件。
簡單,明了

productFlavors 的詳細屬性

1.不同的applicationId 和版本號

根據需求打包不同類型不同id的版本。

android{
    productFlavors{       
     province{//省級版本
          applicationId "com.crazyman.product.province"
            versionName "version-province-1.0"
        }

        city {//市級版本
            applicationId "com.crazyman.product.city "
            versionName "version-city -1.0"
        }

        county{//縣級版本
          applicationId "com.crazyman.product.county"
            versionName "version-county-1.0"
        }

        town{//村鎮級版本
           applicationId "com.crazyman.product.town"
            versionName "version-town-1.0"
        }
}}

2.多渠道設置

根據需求假設要發布以下幾個渠道的app供不同的運用商店進行上傳。

android{
    productFlavors{       
        province{
            manifestPlaceholders = [SD_CHANNEL_VALUE: "province"
             name:"省級app"]
        }

        city {
            manifestPlaceholders = [SD_CHANNEL_VALUE: "city",name:"城市 app"]
        }

        county{
            manifestPlaceholders = [SD_CHANNEL_VALUE: "county",
              name:"縣城app"]
        }

        town{
            manifestPlaceholders = [SD_CHANNEL_VALUE: "town",name:"鄉鎮app"]
        }
}}

同時在manifest中需要填寫

<meta-data android:name="SD"  android:value="${SD_CHANNEL_VALUE}"/>
<application
        android:allowBackup="true"
        android:label="${name}"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            ·····
        </activity>
    </application>

3.不同的版本使用不同的jar包

根據需求使用不同的jar工具。

dependencies {
    provinceCompile 'com.github.hss01248:DialogUtil:1.0.1'
    cityCompile 'com.github.hss01248:DialogUtil:1.0.2'
    countyCompile 'com.github.hss01248:DialogUtil:1.0.1'
    townCompile 'com.github.hss01248:DialogUtil:1.0.0'
}

4.不同的版本使用不同資源文件或者代碼

在工程中根據自己的需求建立不同的版本的文件夾如下:

Paste_Image.png

其中city版,和province版需要不同的代碼和啟動界面,其他沒有新建的目錄使用公用模塊main中的代碼和資源文件。

Paste_Image.png

記住:不要放入公用的部分,只放入不同的代碼或者文件,代碼,文件的路徑和main文件夾里面的一致。
參考文獻:
http://blog.csdn.net/crazyman2010/article/details/53471162#reply

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容