亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android?通過productFlavors實現多渠道打包方法示例

 更新時間:2023年02月12日 10:47:05   作者:ChenYhong  
這篇文章主要為大家介紹了Android?通過productFlavors實現多渠道打包方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

正文

在日常開發(fā)中,可能會遇到同一份代碼,需要根據運營需求打出不同包名、不同圖標、不同名稱的Apk,發(fā)布到不同的渠道中。Android Studio提供了便捷的多渠道打包實現方法productFlavors。

本文介紹一下使用productFlavors來實現多渠道打包。

創(chuàng)建productFlavors

  • 添加Dimension

在app包下的build.gradle中的android閉包下,添加flavorDimension,代碼如下:

android {
    ...
    // 方式1
    getFlavorDimensionList().add('example_value')
    // 方式2
    flavorDimensions "example_value"
}

兩種方式選擇一種即可,方式1有代碼補全提示,方式2沒有。

  • 創(chuàng)建productFlavor

在app包下的build.gradle中的android閉包下,創(chuàng)建productFlavors,代碼如下:

android {
    ...
    productFlavors {
        // 原始渠道
        origin{
            // 這里的值與前面flavorDimensions設置的值保持一致
            dimension 'example_value'
        }
        // 示例渠道
        exampleFlavor {
            // 這里的值與前面flavorDimensions設置的值保持一致
            dimension 'example_value'
        }
    }
}

網上找到的相關文章都說productFlavor中需要配置dimension,但是在嘗試的過程中發(fā)現,如果只添加了一個flavorDimensions,那么productFlavor中的dimension可以不用特別聲明(我的gradle版本為7.6,AGP為7.4.1)。

構建完后可以在Build Variants中看到已配置的變體,如圖:

渠道包參數配置

打渠道包時,根據需求可能會需要配置不同參數,例如App的名稱、圖標、版本信息,服務器地址等。

  • 配置不同的簽名信息

如果需要使用不同的簽名文件,可以在app包下的build.gradle中的android閉包下配置signingConfigs,代碼如下:

android {
    signingConfigs {
        origin {
            keyAlias 'expampledemo'
            keyPassword '123456'
            storeFile file('ExampleDemo')
            storePassword '123456'
        }
        exampleFlavor {
            keyAlias 'exampledemoflavor'
            keyPassword '123456'
            storeFile file('ExampleDemoFlavor.jks')
            storePassword '123456'
        }
    }
    flavorDimensions "example_value"
    productFlavors {
        origin{
            signingConfig signingConfigs.origin
        }
        exampleFlavor {
            signingConfig signingConfigs.exampleFlavor
        }
    }
}

需要注意的是signingConfigs必須在productFlavors前面聲明,否則構建會失敗。

  • 配置包名、版本號

productFlavors中可以配置渠道包的包名、版本信息,代碼如下:

android {
    ...
    defaultConfig {
        applicationId "com.chenyihong.exampledemo"
        versionCode 1
        versionName "1.0"
        ...
    }
    productFlavors {
        origin{
            ...
        }
        exampleFlavor {
            applicationId "com.chenyihong.exampledflavordemo"
            versionCode 2
            versionName "1.0.2-flavor"
        }
    }
}

origin渠道表示的是原始包,不進行額外配置,使用的就是defaultConfig中聲明的包名以及版本號。

效果如圖:

origin

exampleFlavor

  • 配置BuildConfig,字符串資源

productFlavors中配置BuildConfig或者resValue,可以讓同名字段,在打不同的渠道包時有不同的值,代碼如下:

android {
    ...
    productFlavors {
        origin{
            buildConfigField("String", "example_value", "\"origin server address\"")
            resValue("string", "example_value", "origin tips")
        }
        exampleFlavor {
            buildConfigField("String", "example_value", "\"flavor server address\"")
            resValue("string", "example_value", "flavor tips")
        }
    }
}

配置完后重新構建一下項目,就可以通過BuildConfig.example_value以及getString(R.string.example_value)來使用配置的字段。

效果如圖:

origin

exampleFlavor

  • 配置manifestPlaceholders

有些三方SDK,會在Manifest中配置meta-data,并且這些值跟包名大概率是綁定的,因此不同渠道包需要替換不同的值,代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <application
        ...
        >
        <meta-data
            android:name="channel_value"
            android:value="${channel_value}"/>
        ....
    </application>
</manifest>
android {
    ...
    productFlavors {
        origin{
            manifestPlaceholders = [channel_value: "origin channel"]
        }
        exampleFlavor {
            manifestPlaceholders = [channel_value: "flavor channel"]
        }
    }
}

效果如圖:

origin

exampleFlavor

  • 配置不同的依賴

不同渠道包可能會引用不同的三方SDK,配置了productFlavors后,可以在dependencies中區(qū)分依賴包,代碼如下:

dependencies {
    // origin 包依賴
    originImplementation("com.google.code.gson:gson:2.10.1")
    // exampleFlavor包依賴
    exampleFlavorImplementation("com.google.android.gms:play-services-auth:20.4.1")
}

示例:

FlavorExampleActivity中同時導入Gson包和Google登錄包,效果如下:

origin

exampleFlavor

  • 配置不同的資源

在app/src目錄下,創(chuàng)建exampleFlavor文件夾,創(chuàng)建與main包下一樣的資源文件夾,打渠道包時,相同目錄下同名的文件會自動替換,可以通過這種方式來實現替換應用名稱和應用圖標。

效果如圖:

示例Demo

按照慣例,在示例Demo中添加了相關的演示代碼。

ExampleDemo github

以上就是Android 通過productFlavors實現多渠道打包方法示例的詳細內容,更多關于Android productFlavors多渠道打包的資料請關注腳本之家其它相關文章!

相關文章

  • android自定義環(huán)形統(tǒng)計圖動畫

    android自定義環(huán)形統(tǒng)計圖動畫

    這篇文章主要為大家詳細介紹了android自定義環(huán)形統(tǒng)計圖動畫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Android實現將一個Activity設置成窗口樣式的方法

    Android實現將一個Activity設置成窗口樣式的方法

    這篇文章主要介紹了Android實現將一個Activity設置成窗口樣式的方法,涉及Android的窗口樣式設置與布局技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-02-02
  • 詳解Android 折疊屏適配攻略

    詳解Android 折疊屏適配攻略

    這篇文章主要介紹了Android 折疊屏適配攻略,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • 簡單實現Android鬧鐘功能

    簡單實現Android鬧鐘功能

    這篇文章主要教大家如何簡單實現Android鬧鐘功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Android中Property模塊的鍵值設置

    Android中Property模塊的鍵值設置

    這篇文章主要介紹了Android中Property模塊的鍵值設置的相關資料,需要的朋友可以參考下
    2017-03-03
  • Android內存溢出及內存泄漏原因進解析

    Android內存溢出及內存泄漏原因進解析

    這篇文章主要介紹了Android內存溢出及內存泄漏原因解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • Android 仿京東商城底部布局的選擇效果(Selector 選擇器的實現)

    Android 仿京東商城底部布局的選擇效果(Selector 選擇器的實現)

    這篇文章主要介紹了Android 仿京東商城底部布局的選擇效果(Selector 選擇器的實現),需要的朋友可以參考下
    2017-04-04
  • Android源碼中final關鍵字的用法及final,finally,finalize的區(qū)別

    Android源碼中final關鍵字的用法及final,finally,finalize的區(qū)別

    Android的源碼中很多地方對final關鍵字的用法很是“別出心裁”,之所以這么說是因為我從沒看過是這么使用final關鍵字的,通過本文給大家分享Android源碼中final關鍵字的用法及final,finally,finalize的區(qū)別,感興趣的朋友一起學習吧
    2015-12-12
  • Android Service詳解及示例代碼

    Android Service詳解及示例代碼

    本文主要介紹Android Service,在Android應用開發(fā)過程中,Service 會經常用到,這里對Service 的概念,生命周期等做了詳細介紹,并附示例代碼,有需要的朋友可以參考下
    2016-08-08
  • Android基于訊飛語音SDK實現語音識別

    Android基于訊飛語音SDK實現語音識別

    本例子是一個調用訊飛語音識別SDK的例子源碼是一個最純凈的Demo比較容易看懂。實現的是點擊按鈕開始語音監(jiān)聽,手機需要聯網,2/3G的均可,希望本文對大家學習Android有所幫助
    2016-06-06

最新評論