多渠道打包进阶知识

红橙Darren
• 阅读 1079

多渠道打包进阶知识

文章开始前,先看一下下面这种情况:

android {  
  productFlavors {  
      //100 个多渠道配置  
  }
//多渠道签名的配置
  signingConfigs {
     xiaomi {
        storeFile file("../xiaomi.keystore")
        storePassword 'xiaomi'
        keyAlias 'xiaomi'
        keyPassword 'xiaomi'
        v1SigningEnabled true
        v2SigningEnabled true
     }
     huawei {
        storeFile file("../huawei.keystore")
        storePassword 'huawei'
        keyAlias 'huawei'
        keyPassword 'huawei'
        v1SigningEnabled true
        v2SigningEnabled true
     }
  }
  buildTypes {
       debug {
//        debug这里设置不起作用,可能是编译器的问题?
//         productFlavors.xiaomi.signingConfig signingConfigs.test
//         productFlavors.huawei.signingConfig signingConfigs.test
       }
       release {
           productFlavors.xiaomi.signingConfig signingConfigs.xiaomi
           productFlavors.huawei.signingConfig signingConfigs.huawei
           //....100 个签名配置
       }
  }
//不同渠道不同资源文件配置
  sourceSets{
      xiaomi.res.srcDirs 'src/main/res-xiaomi'
      huawei.res.srcDirs 'src/main/res-huawei'
      xxx.res.srcDirs 'src/main/res-xxx'
      xxx.res.srcDirs 'src/main/res-xxx'
      xxx.res.srcDirs 'src/main/res-xxx'
      //....100 个资源文件配置
  }
//不同渠道不同的依赖文件
  dependencies {
      xiaomiApi('xxxxxxx')
      huaweiImplementation('xxxxxxxx')
      xxxApi('xxxxxxx')
      xxxApi('xxxxxxx')
      xxxApi('xxxxxxx')
      //....100 个渠道不同依赖配置
  }    
}

不难发现,当渠道比较多的时候,不同渠道不同的配置就会很繁琐,有没有更方便的方法呢?答案是肯定的。

资源文件配置

sourceSets{
    def sets = getSourceSets()//获取资源设置集合
    productFlavors.all{//遍历多渠道
        if('huawei'.equals(name))//针对特殊的渠道做特殊处理
          sets.getByName(name).res.srcDir 'src/main/res-xxx'
        else
          sets.getByName(name).res.srcDir 'src/main/res-'+name
        //相当于 xiaomi.res.srcDir 'src/main/res-xiaomi'
        //      huawei.res.srcDir 'src/main/res-huawei'
        //      .....
    }
}

依赖配置

def dependenMap =[xiaomi: 'xiaomi依赖',
                  huawei: 'huawei依赖',
                  ...
                  xxx: 'xxx 依赖']
dependencies{
    productFlavors.all{
        if('huawei'.equals(name))//针对特殊的渠道做特殊处理
           dependencies.add(name+"Implementation",project(dependenMap[name]))
        else
           dependencies.add(name+"Api",project(dependenMap[name]))

        //xiaomiApi('xiaomi依赖')
        //huaweiImplementation('xiaomi依赖')
        //xxxxApi('xxx依赖')
    }
}

签名配置

signingConfigs {
    xiaomi{
        storeFile file("../xiaomi.keystore")
        storePassword 'xiaomi'
        keyAlias 'xiaomi'
        keyPassword 'xiaomi'
        v1SigningEnabled true
        v2SigningEnabled true
    }
    huawei{
        storeFile file("../xiaomi.keystore")
        storePassword 'xiaomi'
        keyAlias 'xiaomi'
        keyPassword 'xiaomi'
        v1SigningEnabled true
        v2SigningEnabled true
    }
    ....更多签名配置
}
buildTypes {
    debug {

    }
    release {
         productFlavors.all {
             if('huawei'.equals(name))//针对特殊的渠道做特殊处理
               productFlavors[name].signingConfig signingConfigs.xxx       
             else
               productFlavors[name].signingConfig signingConfigs[name]       
         }
    }
}
点赞
收藏
评论区
推荐文章
橘子橙 橘子橙
3年前
vue-element-admin项目打包后,iconfont图标出现乱码
使用vueelementadmin或者vueelementtemplate开发的项目,打包到线上,就出现了图标乱码,f12后能看到icon元素为.eliconclose:before{content:"□"}的情况(如下)
徐小夕 徐小夕
3年前
前端进阶之从零到一实现单向 & 双向链表
前言前端工程师对于算法和数据结构这块的知识的掌握程度,是进阶高级工程师的非常重要的标志之一,为了总结一下数据结构和算法方面的知识,笔者今天继续把链表这一块的知识补上,也作为自己知识体系的一个梳理,笔者早在去年就写过一篇关于使用javascript实现二叉树和二叉搜索树的文章,如果感兴趣或者想进阶高级的朋友们可以参考学习一下:JavaScript中的二
红橙Darren 红橙Darren
2年前
多渠道打包
Android多渠道打包看这一篇就够了本文三个流程一、多渠道配置1、多渠道配置2、不同渠道不同签名配置3、不同渠道不同资源文件配置4、不同渠道不同依赖配置二、注意事项三、打包1、命令行打包2、IDE打包多渠道配置(2种方式)1、可写在主模块(app)的build.gradle下androidcompileSdkVers
Stella981 Stella981
2年前
Android 多渠道打包原理和使用
每次中午吃饭总会和技术同学聊天。当做iOS开发的做安卓开发的人员在一起的时候,他们中间又多了一个话题:iOS开发难还是安卓开发难。这个时候做安卓开发的同学最激动说安卓开发要自己画界面、机型复杂、操作系统多rom又被各家改的四不像....开发一个安卓APP的时间将近是开发iOS所需时间的2倍。iOS开发的同学可能就会反驳说
如何通过数据分析鉴别假微博大V?
MCN并不是一个新出现的模式,很早就出现的微博、公众号等都具有MCN特征。但当以短视频为主的新型媒体出现后,MCN才爆发出强大的社会影响力。当前,借助于MCN实现企业爆发式的销售增长,是非常火热的一种渠道形态。01什么是MCNMCN(MutiChannelNetwork)即多渠道网络服务,它通过持续的内容输出来实现特定商业目标。在MCN机构出现之前,其实
Wesley13 Wesley13
2年前
unity android V1签名
unity2018版本默认签名会进行V1V2签名。如果只想进行V1签名的话可以进行以下操作。1.调整为gradle打包2.publishingsettings里面选择customgradletemplate,3.在gradle配置里面加入下述代码  !(https://oscimg.oschina.net/oscnet/up
Stella981 Stella981
2年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Stella981 Stella981
2年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Wesley13 Wesley13
2年前
TYPESDK手游聚合SDK服务端设计思路与架构之三:流程优化之订单保存与通知
经过前两篇文字的分析与设计,我们已经可以搭建出一个能够支持多游戏多渠道的聚合SDK服务端,但这只是理想化状态下的一个简化模型。如果接入渠道的逻辑都是按照理想化的简化过程来构建,那么对于支付的请求,我们可以简化成这样几步:1.游戏客户端创建订单。2.游戏客户端(通过TYPESDK客户端)调用渠道lib库中相应接口,发起支付。3.用户在弹出的
想天浏览器 想天浏览器
2个月前
企业文化社区 | 多渠道、多形式传播企业文化
每一个企业都有自身独特的企业文化氛围,一旦企业内部的需求变大,内部员工及文化势必会发现改变,如何解决内部问题,成为了企业的首要任务。而越来越多的企业选择搭建企业文化社区来协助企业,彻底解决企业发展过程之中的一些问题,例如解决企业内部沟通的壁垒,促进企业文化