关于Android多渠道打包的进阶知识

多渠道打包进阶知识

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

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]       
         }
    }
}

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

你可能感兴趣的:(关于Android多渠道打包的进阶知识)