使用Flavor配置多渠道包

目录

步骤一:配置productFlavors

步骤二:创建相应渠道目录

步骤三:同步和build

遇到的问题:

进阶配置


步骤一:配置productFlavors

主Module(一般是app)的【build.gradle】文件下,找到【android】标签,在其中使用【productFlavors】标签配置:

    productFlavors {xiaomi {                                                  // 渠道A:xiaomiapplicationId 'com.hello.mi.dandelion'        // 此处配置的内容为“包名”}samsung {                                                 // 渠道B:samsungapplicationId 'com.hello.samsung.dandelion'}oppo {                                                    // 渠道C:oppoapplicationId 'com.hello.oppo.dandelion'}}

步骤二:创建相应渠道目录

主module(一般是app)的【src】目录下,创建出相同数量相同渠道名称与main同级且相同目录结构的文件目录结构:
注意资源文件可重复,类文件不可与main目录下的文件重复。否则报错:错误: 类重复: com.example.xxx.xxxx
不同的子渠道目录下的类可以重复,但均不可与主目录main中的相应目录结构中的类重复

注意:主目录main中有的目录和文件各种渠道包的目录结构不一定全要有,只需要在渠道目录中创建需要替换的资源的目录结构即可,但是渠道目录有的目录结构一定要跟main目录保持一致的目录结构

步骤三:同步和build

① 因为修改了build.gradle中的内容,所以先点击一下【Sync Now

② 之后make一下:

③ 打开【buildVariants】,查看一下,新增的渠道包的debugrelease都已经出现了。需要在哪个渠道修改,就选中哪一个进行,然后在相应的文件目录下进行后续编辑即可

遇到的问题:

①报错:All flavors must now belong to a named flavor dimension.(必须要保证所有的flavor 都属于同一个维度)

ERROR: All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html
Affected Modules: app

参考:https://blog.csdn.net/kongty/article/details/78673933

解决:

在【defaultConfig{}】中添加:【flavorDimensions ""】 就可以了,不过最好在属性里面加入【default

android {...defaultConfig {...// 必须要保证所有的flavor 都属于同一个维度flavorDimensions "default"}...
}

具体位置:

进阶配置

① 版本等默认配置随Flavor不同渠道进行改变

在【defaultConfig】标签中的配置,可以在【productFlavors】标签的相应渠道标签内根据不同的渠道的开发需求特异化配置

    productFlavors {xiaomi {versionCode 1                              // 单独配置渠道“版本号”,下同versionName "1.1.0"                        // 单独配置渠道“版本名称”,下同applicationId 'com.hello.mi.dandelion'}samsung {versionCode 2versionName "1.2.0"applicationId 'com.hello.samsung.dandelion'}oppo {versionCode 3versionName "1.3.0"applicationId 'com.hello.oppo.dandelion'}}

② 代码中的某些配置随Flavor不同渠道进行改变

比如:之前我们做网络请求的接口基地址BaseUrl我们会在代码中写死:

public static final String BASE_URL = "https://api.baidu.com";        // 使用前

现在我们可以在【productFlavors】标签的相应渠道标签内根据不同的渠道的开发需求特异化配置

语法: buildConfigField "String", "baseUrl", "\"https://api.mi.com\""
           
------------[参数①:类型]---[参数②:识别符]---[参数③:具体的值,注意字符串用引号“”引用时需要转义符\]

    productFlavors {xiaomi {applicationId 'com.hello.mi.dandelion'buildConfigField "String", "baseUrl", "\"https://api.mi.com\""        // 特异化配置代码中的参数,下同}samsung {versionCode 2versionName "1.2.0"applicationId 'com.hello.samsung.dandelion'buildConfigField "String", "baseUrl", "\"https://api.samsung.com\""}oppo {versionCode 3versionName "1.3.0"applicationId 'com.hello.oppo.dandelion'buildConfigField "String", "baseUrl", "\"https://api.oppo.com\""}}

配置好之后,再引用就可以这样:

public static final String BASE_URL = BuildConfig.baseUrl;          // 使用后

引用:类BuildConfig + "." + Flavor中定义的识别符的名称

这个类BuildConfig是配置好Flavor之后自动生成的,位于:
app\build\generated\source\buildConfig\渠道名\debug\包名\BuildConfig

我们看一下这个文件里面都有什么:

/*** Automatically generated file. DO NOT MODIFY* 自动生成的文件,不要修改*/
package com.example.helloworld;public final class BuildConfig {public static final boolean DEBUG = Boolean.parseBoolean("true");public static final String APPLICATION_ID = "com.hello.oppo.dandelion";   // 特异化配置的“包名”public static final String BUILD_TYPE = "debug";public static final String FLAVOR = "oppo";                        // 特异化配置的“渠道名”public static final int VERSION_CODE = 3;                          // 特异化配置的“版本号”public static final String VERSION_NAME = "1.3.0";                 // 特异化配置的“版本名”// Fields from product flavor: oppopublic static final String baseUrl = "https://api.oppo.com";       // 特异化配置的“自定义参数”
}

【Flavor-多渠道包】Android Studio打多渠道包相关推荐

  1. android在哪引jar包,Android Studio引入jar包和so库

    前言 由于项目要对接华为Anyoffice平台,所以需要引入对应SDKjar包和so库.其实网上有很多资料可以查到:AS下如何导入jar包和so库.但是正因为资料很多,所以说法不一,有些配置已经不再适 ...

  2. android studio 修改程序包名

    Eclipse和Android Studio都提供了自动修改包名的工具,Android Studio在选中包名后,使用快捷键shift+(Fn+)F6或者选中菜单Refactor->Rename ...

  3. android studio 把libs包打包到apk中,设置应用以32bit去读取.so文件

    android studio 把libs包打包到apk中: 只需在当前module里的build.gradle添加下列配置: sourceSets {main {jniLibs.srcDirs = [ ...

  4. android程序包不存在,Android应用开发Android studio 错误: 程序包 不存在

    本文将带你了解Android应用开发Android studio 错误: 程序包 不存在,希望本文对大家学Android有所帮助. " Android studio 错误: 程序包 不存在 ...

  5. Android Studio中文语言包失效

    Android Studio中文语言包失效[2022/5/4] 1-版本 2-解决方案 1-版本 Android Studio Bumblebee | 2021.1.1 Patch 2-解决方案 下载 ...

  6. Android Studio中架包打包和依赖冲突解决

    一.为什么使用aar打包,而不是jar 随着Android Studio的使用越来越广泛,使用aar打包这种方式也越来越可行实际. jar打包只打源代码,像资源文件不会打包,而aar恰恰是jar打包的 ...

  7. 关于vivo 8.0和miui新系统android studio调试出现“包解析错误”的bug的解决办法

    最近在工作中遇到了调试的时候将app安装到vivo 手机上,出现了包解析错误的问题.一般来说这种问题只会出现在手机版本 小于 app所要求的最低版本的手机上.但是此vivo手机的版本是8.0,很显然不 ...

  8. android studio 如何让包名展开

    通常我们新建一个包名的时候,会发现他们连在一起,根本无法在创建一个同级的包 工具/原料 电脑,android studio 方法/步骤 1,我们先在包名下建一个包,变成了这样,根本无法在同级下新建另一 ...

  9. android studio修改项目包名

    公司项目都是用eclipse开发的,但是android studio开发已经是大势所趋了,所以在闲暇之余使用了一下androidstudio,这里对androidstudio更改项目包名做一下总结,因 ...

  10. Android Studio导出Jar包并混淆

    在Android Studio中,自带反编译查看class文件,如果没有混淆的话,class文件跟java文件基本没有区别了,为了保护,还是混淆的好. 网上看了不少资料,都是直接下载proguard额 ...

最新文章

  1. 【APIO2014】Palindromes
  2. css实现多行文字溢出隐藏——前端小问题不定时更新
  3. 人脸识别技术新突破,网友:匪徒带着面罩呢?
  4. UA MATH523A 实分析1 度量空间 概念与定理总结
  5. java中super的作用
  6. linux查看用户拥有的权限
  7. 使用PaddleFluid和TensorFlow训练序列标注模型
  8. mysql string types ---- mysql 字符类型详解
  9. selenium webdriver学习(八)------------如何操作select下拉框(转)
  10. Java程序停止 mq通道未关闭_java – 如何在MQ上停止丢失消息
  11. vue html属性绑定,2、Vue元素属性的绑定以及HTML的绑定
  12. 从readyState状态看AJAX
  13. 04 ZooKeeperAPI实战
  14. Apache-tomcat-8.5.82下载安装以及环境变量配置
  15. WAP1.x协议栈浅析-WTP协议
  16. 投屏php源码,乐享影视app源码 e4a影视app开源源码 支持下载存缓投屏等功能
  17. 英伟达显卡虚拟化vGPU实践指南
  18. p6spy 非常典型 启用SQL日志
  19. 说说那些好用的图片调色软件
  20. 智能视频抠图_黑科技 !人工智能抠图神器来了,抠图原来如此简单【918期】...

热门文章

  1. Correct Bracket Sequence Editor
  2. 浅析选择广告联盟的四大标准
  3. 小浩算法网站上线啦!
  4. html textarea文本域高度自适应
  5. 定时器setTimeout和setInterval的简单应用
  6. 吉林大学计算机工程学院陈虹,刘奇芳
  7. 菜鸟总结之——数据完整性
  8. python爬取音乐排行_Python爬取酷狗Top500的歌曲!够你吹个小牛皮了吧
  9. 《惢客创业日记》2021.01.26(周二)凉粉儿、咸鱼动起来
  10. 《腾讯传》对于个人的一点启发