多渠道打包早已不是什么新技术,网上一搜千千万万数不尽数,但是对于没使用过的开发者,看了网上复制又复制的文章却是一头雾水,完全找不到符合自己需求的多渠道配置,以下总结:

需求:

  1. 不同渠道,配置不同包名。
  2. 不同渠道,不同app名称。
  3. 不同渠道,icon需要对应。
  4. 不同渠道,版本号需要单独指定。

代码撸起来:
gradle的多渠道配置,利用productFlavors 需要几个包就配置几个马甲,在android{} 里面添加如下:

 productFlavors {baidu {}xiaomi {}huawei {}}

配置三个渠道,然后 Sync Now,发现报错:

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

defaultConfig下添加`

 flavorDimensions "versionName"

根据需求配置:
AndroidManifest.xml 的application里面需先配置 meta:

 <meta-dataandroid:name="CHANNEL"android:value="${CHANNEL_VALUE}" />
  productFlavors {baidu{applicationId "com.allen.channel.baidu"versionName "1.0.1"resValue "string", "app_name", "百度"manifestPlaceholders = [CHANNEL_VALUE: "baidu",app_icon   : "@mipmap/app_icon"]}xiaomi{applicationId "com.allen.channel.xiaomi"versionName "1.0.2"resValue "string", "app_name", "小米"manifestPlaceholders = [CHANNEL_VALUE: "xiaomi",app_icon : "@mipmap/app_icon"]}huawei{applicationId "com.allen.channel.huawei"versionName "1.0.3"resValue "string", "app_name", "华为"manifestPlaceholders = [CHANNEL_VALUE: "huawei",app_icon : "@mipmap/app_icon"]}}

说明:
applicationId:顾名思义,指定对应马甲的包名。
versionName:这个不用说。
resValue:指定马甲的应用名称,注意:如果马甲中指定了app的名称,项目中的strings.xml文件的app_name必须删除

<resources><string name="app_name">安安</string>
</resources>

manifestPlaceholders:指定马甲的icon,需要在src目录下新建相对应渠道的文件夹:

该目录下可以存放res等资源文件,如华为马甲为例:

 manifestPlaceholders = [CHANNEL_VALUE: "huawei",app_icon : "@mipmap/app_icon"]

在“huawei”渠道目录下的mipmap文件夹中有一张app_icon的图片,实例:

发现我把其他渠道的icon名称都配了“app_icon”,这个不是固定,自定义的。主目录下的app_icon是默认的,AndroidManifest.xml默认配置。

AndroidManifest如下:

打包
签名包需要在gradle配置signingConfigs:

signingConfigs {release {storeFile file('channel.jks')storePassword '123456'keyAlias 'channel'keyPassword '123456'}debug {storeFile file('channel.jks')storePassword '123456'keyAlias 'channel'keyPassword '123456'}}

channel.jks我已放置app目录下。


双击–》
assemble:打出来的包,包含release和debug两种类型。
assembleDebug:只有debug。
assembleRelease:只有release。
也可以渠道单独打包,如assembleXiaomi等等可以自己尝试。

我双击assembleRelease之后:

注意位置查看,打出来的都是release。

最后我在MainActivity中获取渠道测试:

public class MainActivity extends AppCompatActivity {private TextView tv_content;private TextView tv_id;private TextView tv_channel;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv_id = findViewById(R.id.tv_id);tv_channel = findViewById(R.id.tv_channel);tv_content = findViewById(R.id.tv_content);tv_id.setText(BuildConfig.APPLICATION_ID);tv_channel.setText(BuildConfig.FLAVOR);tv_content.setText(BuildConfig.VERSION_NAME);}
}

简单获取对应的渠道信息。

效果:

Android 多渠道配置相关推荐

  1. Android 多渠道配置打包

    设置app的build.gredle productFlavors 在android节点下添加如下代码: //配置多版本的apkproductFlavors {oneplus {application ...

  2. Android多渠道打包配置

    Android多渠道打包配置 之前为了在同一台手机能同时安装测试包和生产包,采用配置buildType的方式来实现,相比于flavor,感觉是挺轻量又恰到好处的配置,具体见通过配置applicatio ...

  3. Android 多渠道打包配置,亲测,全集

    Android 多渠道打包配置 前言 为统计渠道数据和利用渠道进行操作,需进行渠道打包.本文目旨在熟悉原生gradle多渠道打包的方式,了解android基本的gradle构建配置,熟悉代码构建目录, ...

  4. 不一样的Gradle多渠道配置总结

    *本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 好久没有写博客了,突然想把这段时间项目中使用到的技术和多渠道相关的认识总结分享一下~ 一.新增渠道 使用AndroidStudio ...

  5. android 渠道方案,Android多渠道打包时获取当前渠道的方法

    作为Androidapp,发布多个分发平台是常规操作.然后,有时由于个渠道面对的用户不同,或平台审核标准不同,需要在各渠道使用不同的业务逻辑,这就需要根据渠道使用选择差异化代码. 这里把简单的代码记一 ...

  6. Gradle 实现 Android 多渠道定制化打包

    最近在项目中遇到需要实现 Apk 多渠道.定制化打包, 查找了一些资料,成功实现了上述功能,在此记录以备不时之需,温故而知新,可以为师矣~ 需求可以总结如下:  如何实现多个 Apk 安装在同一设备 ...

  7. [置顶]Gradle 实现 Android 多渠道定制化打包

    Gradle 实现 Android 多渠道定制化打包 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近在项目中遇到需要实现 Apk 多渠道.定制化打包, Google .百度查找了一些资料, ...

  8. android app 马甲包,关于Android多渠道打包和马甲包问题

    多渠道打包 最近项目用到多渠道打包,虽然网上又很多资料, 但是我在实际使用的过程中还是遇到了些问题, 在这里记录下,希望能帮助到你! 首先配置你的渠道信息 : 配置渠道信息 这个时候渠道使用的签名配置 ...

  9. android 乐固渠道打包,android多渠道打包:umeng+美团walle+腾讯乐固

    概述 在android开发时,我们需要加固以确保安全,需要多渠道进行精准客户分析,并且需要一个平台进行统计分析. 我现在常用的就是,腾讯乐固进行加固,美团进行多渠道打包,然后用友盟进行渠道分析. 方案 ...

最新文章

  1. 实战 | 多种方法实现以图搜图
  2. python奇数和_请问python如何判断奇偶数?
  3. python父进程调用子进程_Python2.7下,调用subprocess启动子进程,读取子进程标准输出若干问题...
  4. Audiority TS-1 Transient Shaper for Mac(TS-1瞬态整形器)
  5. python提供了什么函数进行格式化输出_python print函数格式化输出
  6. CDSN文章转载方法
  7. java常用设计模式详解及应用
  8. Android集成腾讯X5WebView
  9. 自己用C#写的控制三菱FX5U PLC
  10. SQL注入实战 绕WTS-WAF
  11. 51CTO学院三周年-我的rhce7认证之路
  12. c语言未定义main报错,C语言编译器的错误信息
  13. 小程序打包体积优化策略
  14. 利用Linux的crontab实现定时执行python任务
  15. 【杂七杂八】Dreamweaver在Surface高分辨率下工具栏字体和按钮太小的解决办法
  16. 以前曾看到过一个期货童话故事,很有意思,发上来
  17. 微信支付宝网站二维码收款个人免签收款接口代搭建
  18. PCL-SISR:基于对比学习的单幅图像超分辨率重建方法
  19. javaGUI绘图频闪
  20. ghost系统无法启动

热门文章

  1. 一行代码教你撩妹手到擒来html+css+js烟花告白3D相册(含音乐+可自定义文字)520表白/七夕情人节/求婚...
  2. 最聪明的一款奔驰,试驾奔驰最新入门A-Class
  3. 电子科技大学计算机复试综面,2018年电子科技大学考研复试分数线已公布
  4. 2022 年(23届)计算机保研经验分享(北航、东南、西工大、哈工大、中山等)
  5. mac 使用国内镜像源安装brew
  6. 中科大c语言期末考试试卷,中科大–中科院试卷清单总汇.doc
  7. MEMS加速度计性能测评
  8. 实现免密登录,设置只允许student1, student2用户登录,get和post的区别,HTTP状态码,HTTP请求报文和响应报文,HTTP是如何保持连接状态的
  9. ZUCC_Linux系统管理_实验六 磁盘管理
  10. Calculator Conundrum UVA - 11549(floyd判圈)