Android Gradle 多渠道打包

简介: Android Gradle 多渠道打包

 前言

什么是多渠道打包以及多渠道打包可以做什么,这里就不做介绍了,相信看到这篇文章的你已经了解了,多渠道打包的方式比较多,这里我们用Gradle多渠道打包方式。

和其他文章有什么不同

网上看到的大多数文章都只讲解了

1.如何修改包名

2.如何修改变量的值

3.如何替换string中的资源

4.如何替换AndroidManifest中的资源

本篇文章会在上述知识点上增加

5.不同渠道如何使用不同的java文件

6.Base模块化中如何使用多渠道

新建项目,在app下build.gradle中android下添加如下代码:

productFlavors{
    baidu{
        applicationId "com.baidu"
        buildConfigField "String","BaseApi",'"http://baidu.com"'
        resValue "string","tip",'"hello  this is form baidu"'
        manifestPlaceholders = [
                app_name:"百度APP"
        ]
    }
    sougou{
        applicationId "com.sougou"
        buildConfigField "String","BaseApi",'"http://sougou.com"'
        resValue "string","tip",'"hello  this is form sugou"'
        manifestPlaceholders = [
                app_name: "搜狗APP"
        ]
    }
}

image.gif

这里我们定义两个渠道,一个渠道名称是baidu,一个渠道名称是sougou,通过applicationId直接指定应用包名

不同渠道我们使用的请求地址不同,字段是BaseApi,我们可以通过buildConfigField指定BaseApi中的值,通过buildConfigField

指定的值,我们可以在系统生成的BuildConfig中获取,比如我们获取多渠道中定义的BaseApi:

String baseApi = BuildConfig.BaseApi;

image.gif

我们来看下BuildConfig中的内容

image.gif

BaseApi是我们自己定义的,其他的都是默认生成的,这里我们可以看到,应用包名也是我们指定的。

resValue我们可以修改变量的值,这个值会生成在string.xml中,比如上面我们定义了一个tip变量,需要注意的是,这个变量不能出现在string.xml中,否则会提示资源重复。

如果要定义在配置文件中使用的值,则需要使用

manifestPlaceholders

image.gif

我们分别修改app_name的值,在配置文件中使用占位符${} 使用,如下:

android:label="${app_name}"

image.gif

接下来,我们将tip的值和BaseApi显示在TextView上,分别运行app的baidu渠道版本和sougou渠道版本

image.gif

baidu渠道运行如下:

image.gif

sougou渠道运行如下:

image.gif

从运行结果我们可以看出来,已经达到我们想要的结果了。

如何使用不同的app图标

那么如何修改不同渠道的app图标呢,当然我们可以在manifestPlaceholders中添加图标资源的占位符,但是我们这里使用另一种方法,

有时候我们不仅要替换图标,可能要替换raw下的资源或者assets下的资源,这种情况下我们就需要

使用下面的方式:

在src目录下新建与main同级且与渠道名称一样的文件包名,并且新建res资源目录,放入图标使用的图片资源,必须要与main中的名称相同才可以覆盖,如图所示:

image.gif

并且在gradle中设置sourceSet

sourceSets{
    baidu{
        res.srcDirs = ['src/baidu/res','src/baidu/res']
    }
    sougou{
        res.srcDirs = ['src/sougou/res','src/sougou/res']
    }
}

image.gif

我们通过res.srcDirs就指定了不同渠道使用的资源文件,这里从网上随便找了两张截图作为图标(如有侵权,联系删除)

image.gif

image.gif

运行两个app,结果显示如下:

image.gif

moudle中如何配置多渠道

在实际的开发中,我们可能会有一个base模块,不同渠道base模块中引用的资源也不同,我们该如何配置呢?

我们新建basemoudle模块,app依赖basemodule模块

同样,我们在模块的gradl下 配置如下:

productFlavors {
    baidu {
        buildConfigField "String", "BaseMoudeDesc", '"这是base模块百度的描述"'
        resValue "string", "basetip", '"i come form base_baidu"'
    }
    sougou {
        buildConfigField "String", "BaseMoudeDesc", '"这是base模块搜狗的描述"'
        resValue "string", "basetip", '"i come form base_baidu"'
    }
}

image.gif

因为我们的base模块也有两个渠道,所以app在依赖的时候,必须分渠道去依赖

baiduCompile project(path:':basemodule',configuration:'baiduRelease')
sougouCompile project(path:  ':basemodule',configuration:'sougouRelease')

image.gif

image.gif

我们直接编译会出现上面的问题,因为module模块可能没有生成对应的编译资源,因为android的默认编译是debug类型的,所以为了和app主模块同步,我们设置去掉默认的发布类型,需要在module中的gradle中添加:

publishNonDefault true

image.gif

变量的使用和上面app的使用方式一样,在这里就不展示了。

不同渠道如何使用不同java文件

同不同渠道使用资源文件一样,不过需要注意的是,main文件中就不能存放要替换的java文件了,否则会报资源重复的错误,同样的我们在base模块分别新建baidu和sougou渠道包,并且分别新建MainActivity,如图所示。

image.gif

设置java资源目录

sourceSets {
    baidu {
        res.srcDirs = ['src/baidu/res', 'src/baidu/res']
        java.srcDirs = ['src/baidu/java','src/baidu/java']
    }
    sougou {
        res.srcDirs = ['src/sougou/res', 'src/sougou/res']
        java.srcDirs = ['src/sougou/java','src/sougou/java']
    }
}

image.gif

为了展示两个页面的不同,我们将百度渠道的页面背景设为粉红色,搜狗渠道的页面背景设置蓝色,在app添加按钮并添加监听事件,打开module中的主页面。

运行效果如下所示:

image.gif

image.gif

到这里,常用的多渠道打包需要的配置就结束了,如有错误欢迎指正。

目录
相关文章
|
缓存 Unix Android开发
Android安卓项目调试之Gradle 与 Gradle Wrapper的概念以及常用gradle命令深度详解-优雅草卓伊凡
Android安卓项目调试之Gradle 与 Gradle Wrapper的概念以及常用gradle命令深度详解-优雅草卓伊凡
1376 8
|
存储 API Android开发
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
1082 4
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
1522 6
|
Android开发
Android基于gradle task检查各个module之间资源文件冲突情况
Android基于gradle task检查各个module之间资源文件冲突情况
Android基于gradle task检查各个module之间资源文件冲突情况
|
Java Android开发
Android studio中build.gradle文件简单介绍
本文解析了Android项目中build.gradle文件的作用,包括jcenter仓库配置、模块类型定义、包名设置及依赖管理,涵盖本地、库和远程依赖的区别。
1231 19
|
前端开发 Java 编译器
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
729 36
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
1167 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
2349 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
771 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
2050 11

热门文章

最新文章

推荐镜像

更多