一、前言

什么是多渠道打包以及多渠道打包可以做什么,这里就不做介绍了,相信看到这篇文章的你已经了解了,多渠道打包的方式比较多,这里我们用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"

  ]

 }
}

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

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

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

String baseApi = BuildConfig.BaseApi;

我们来看下BuildConfig中的内容

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

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

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

manifestPlaceholders

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

android:label="${app_name}"

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

baidu渠道运行如下:

sougou渠道运行如下:

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

如何使用不同的app图标

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

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

使用下面的方式:

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

并且在gradle中设置sourceSet

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

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

 }

}

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

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

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"'

 }
}

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

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

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

publishNonDefault true

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

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

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

设置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']

  }

}

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

运行效果如下所示:

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

总结

到此这篇关于Android Gradle多渠道打包的文章就介绍到这了,更多相关Android Gradle多渠道打包内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

Android Gradle多渠道打包的实现方法的更多相关文章

  1. android – 使用Gradle构建本机代码时会删除符号

    )或者我错过了什么?解决方法符号位于:src/main/obj/local所以添加到build.grade:然后转到DebugConfiguration->调试器并添加到Symbol目录:应用程序/建立/中间体/jniLibs之后我能够调试我的本机代码.

  2. Android studio – Faild to resolve:com.android.support:design:26.0.1错误

    我有一个错误叫:我的androidstudio版本是3.0beta1.我的gradle文件如下:我想把“设计”放到我的项目中,但我不能这样做.我该怎么做?解决方法尝试改变和或者不要更改为bulidToolsversion更改依赖项

  3. android-studio – IDEA中Gradle自动完成的位置在哪里?

    解决方法对于Groovy插件,它可能是Cucumber.我知道Gradle使用Groovy的一些技术和语法,所以我尝试在第一次尝试时安装一些Groovy插件并取得成功.安装此插件的步骤:>在MacOS上:首选项…

  4. Android L上片段的Lint错误:“此方法不会覆盖任何内容”

    klwQWQ6Z!

  5. 在Android中启用MultiDex支持以在Eclipse中实现65K方法

    我正在尝试在eclipse中构建Multidexapk,但无法成功.我尝试了以下步骤,在Android应用程序中配置Multidex支持:>我已将位于/extras/android/support/multidex/的Multidex库添加到我的项目中.>由于我的应用程序具有自定义应用程序类,我已将android.support.multidex.MultiDexApplication类扩展到我的

  6. Android Studio导入模块Gradle构建错误

    我试图在AndroidStudio(GameBaseUtils)中添加一个目录作为依赖项.我已经看到其他SO答案只是为他们的特定问题发布正确的gradle配置,但是我不明白我如何能够根据我的情况调整他们的答案.这是我做的:第一步:文件–>导入模块–>导航到目录并选择它.第二步–文件–>项目结构–>模块–>选择我的应用程序–>依赖关系–>将模块添加为我的项目的依赖项.现在我的代码没有任何红线表示导入

  7. Android Studio 3.0 – 对于externalNativeBuild,Gradle Sync失败

    当我迁移到Androidstudio3.0时,我得到以下回溯我的build.gradle就在这里.任何帮助深表感谢!

  8. android-gradle – Android espresso-contrib gradle build失败

    我正在尝试学习androidespresso..我遵循了一些基本的教程,它工作正常.但现在我想在android导航抽屉上做一些测试.为此,我需要使用gradle依赖androidTestCompile’com.android.support.test.espresso:espresso-contrib:2.2.2′,但它导致与其他依赖项冲突.我的gradle文件:错误是这样的:紧随其后:linkf

  9. android – 依赖项 – >无法创建’AppPlugin’类型的插件

    我正在尝试继续研究我的一个旧项目,它已经有一年的历史了,当时工作正常,但是现在我已经更新了AndroidStudio,它甚至无法构建.我收到一个错误,说我有两次相同的dex文件:为了解决这个问题,我可以简单地做’gradledependencies’来查找罪魁祸首,并排除故障文件,但这是我遇到实际问题的地方.当我’gradledependencies’时,我收到以下错误:这是我的完整build.g

  10. Android Studio:Gradle Build运行3分钟

    请提供有关如何解决此问题的任何建议.谢谢:)解决方法我发现了为什么会这样.这是因为我在onCreate函数()中解析XML,并且因为XML有70,000行,所以编译器需要很长时间.但是将文件移动到“assets”文件夹后,问题就解决了.这是我的错误,与gradle设置无关,但如果有人遇到类似的问题,我建议你尝试我上面列出的所有内容,你的gradle构建应该运行得更快.

随机推荐

  1. Flutter 网络请求框架封装详解

    这篇文章主要介绍了Flutter 网络请求框架封装详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. Android单选按钮RadioButton的使用详解

    今天小编就为大家分享一篇关于Android单选按钮RadioButton的使用详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

  3. 解决android studio 打包发现generate signed apk 消失不见问题

    这篇文章主要介绍了解决android studio 打包发现generate signed apk 消失不见问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  4. Android 实现自定义圆形listview功能的实例代码

    这篇文章主要介绍了Android 实现自定义圆形listview功能的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  5. 详解Android studio 动态fragment的用法

    这篇文章主要介绍了Android studio 动态fragment的用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. Android用RecyclerView实现图标拖拽排序以及增删管理

    这篇文章主要介绍了Android用RecyclerView实现图标拖拽排序以及增删管理的方法,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下

  7. Android notifyDataSetChanged() 动态更新ListView案例详解

    这篇文章主要介绍了Android notifyDataSetChanged() 动态更新ListView案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

  8. Android自定义View实现弹幕效果

    这篇文章主要为大家详细介绍了Android自定义View实现弹幕效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. Android自定义View实现跟随手指移动

    这篇文章主要为大家详细介绍了Android自定义View实现跟随手指移动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. Android实现多点触摸操作

    这篇文章主要介绍了Android实现多点触摸操作,实现图片的放大、缩小和旋转等处理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部