【Flavor-多渠道包】Android Studio打多渠道包
使用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】,查看一下,新增的渠道包的debug和release都已经出现了。需要在哪个渠道修改,就选中哪一个进行,然后在相应的文件目录下进行后续编辑即可
遇到的问题:
①报错: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打多渠道包相关推荐
- android在哪引jar包,Android Studio引入jar包和so库
前言 由于项目要对接华为Anyoffice平台,所以需要引入对应SDKjar包和so库.其实网上有很多资料可以查到:AS下如何导入jar包和so库.但是正因为资料很多,所以说法不一,有些配置已经不再适 ...
- android studio 修改程序包名
Eclipse和Android Studio都提供了自动修改包名的工具,Android Studio在选中包名后,使用快捷键shift+(Fn+)F6或者选中菜单Refactor->Rename ...
- android studio 把libs包打包到apk中,设置应用以32bit去读取.so文件
android studio 把libs包打包到apk中: 只需在当前module里的build.gradle添加下列配置: sourceSets {main {jniLibs.srcDirs = [ ...
- android程序包不存在,Android应用开发Android studio 错误: 程序包 不存在
本文将带你了解Android应用开发Android studio 错误: 程序包 不存在,希望本文对大家学Android有所帮助. " Android studio 错误: 程序包 不存在 ...
- Android Studio中文语言包失效
Android Studio中文语言包失效[2022/5/4] 1-版本 2-解决方案 1-版本 Android Studio Bumblebee | 2021.1.1 Patch 2-解决方案 下载 ...
- Android Studio中架包打包和依赖冲突解决
一.为什么使用aar打包,而不是jar 随着Android Studio的使用越来越广泛,使用aar打包这种方式也越来越可行实际. jar打包只打源代码,像资源文件不会打包,而aar恰恰是jar打包的 ...
- 关于vivo 8.0和miui新系统android studio调试出现“包解析错误”的bug的解决办法
最近在工作中遇到了调试的时候将app安装到vivo 手机上,出现了包解析错误的问题.一般来说这种问题只会出现在手机版本 小于 app所要求的最低版本的手机上.但是此vivo手机的版本是8.0,很显然不 ...
- android studio 如何让包名展开
通常我们新建一个包名的时候,会发现他们连在一起,根本无法在创建一个同级的包 工具/原料 电脑,android studio 方法/步骤 1,我们先在包名下建一个包,变成了这样,根本无法在同级下新建另一 ...
- android studio修改项目包名
公司项目都是用eclipse开发的,但是android studio开发已经是大势所趋了,所以在闲暇之余使用了一下androidstudio,这里对androidstudio更改项目包名做一下总结,因 ...
- Android Studio导出Jar包并混淆
在Android Studio中,自带反编译查看class文件,如果没有混淆的话,class文件跟java文件基本没有区别了,为了保护,还是混淆的好. 网上看了不少资料,都是直接下载proguard额 ...
最新文章
- 【APIO2014】Palindromes
- css实现多行文字溢出隐藏——前端小问题不定时更新
- 人脸识别技术新突破,网友:匪徒带着面罩呢?
- UA MATH523A 实分析1 度量空间 概念与定理总结
- java中super的作用
- linux查看用户拥有的权限
- 使用PaddleFluid和TensorFlow训练序列标注模型
- mysql string types ---- mysql 字符类型详解
- selenium webdriver学习(八)------------如何操作select下拉框(转)
- Java程序停止 mq通道未关闭_java – 如何在MQ上停止丢失消息
- vue html属性绑定,2、Vue元素属性的绑定以及HTML的绑定
- 从readyState状态看AJAX
- 04 ZooKeeperAPI实战
- Apache-tomcat-8.5.82下载安装以及环境变量配置
- WAP1.x协议栈浅析-WTP协议
- 投屏php源码,乐享影视app源码 e4a影视app开源源码 支持下载存缓投屏等功能
- 英伟达显卡虚拟化vGPU实践指南
- p6spy 非常典型 启用SQL日志
- 说说那些好用的图片调色软件
- 智能视频抠图_黑科技 !人工智能抠图神器来了,抠图原来如此简单【918期】...