美文网首页
Android gradle运行时,执行不同的代码

Android gradle运行时,执行不同的代码

作者: binlees | 来源:发表于2020-07-10 14:53 被阅读0次

    Android gradle运行时,执行不同的代码,区分不同的productFlavors,加载不同的插件。

    在我的项目里面因为使用到不同厂商平台的推送。不同的厂商api需要我们插入的代码是不一致的。
    比如google的fcm推送,要求我们加入这个配置

    apply plugin: 'com.google.gms.google-services'
    

    华为推送,要求我们加入这个配置

    apply plugin: 'com.huawei.agconnect'
    

    现在的项目要求编译一个国际版本和国内版本。大家都知道国内版本是不能使用到fcm的推送的。所以我们要求需要在编译国内版本的时候把fcm给屏蔽掉。同时在编译国际版本的时候也不需要把国内的厂商通道。实现在同一套代码上实现,并且在打包的时候,不需要手动去修改任何代码。

    下面是我配置的productFlavors,一个国内版,一个国际版
    productFlavors {
      china {}
      google {}
    
      //先获取到当前编译的flavor,然后根据flavor判断需要执行哪一些
      def flavor = getCurrentFlavor()
      println("getCurrentFlavor = " + flavor)
      if (flavor == "google") {
        apply plugin: 'com.google.gms.google-services'
      } else {
        apply plugin: 'com.huawei.agconnect'
      }
    }
    
    获取当前编译的Flavor
    //需要导入这两个java包
    import java.util.regex.Matcher
    import java.util.regex.Pattern
    /**
     * 获取当前编译的Flavor
     * @return
     */
    def getCurrentFlavor() {
        Gradle gradle = getGradle()
        String tskReqStr = gradle.getStartParameter().getTaskRequests().toString()
    
        Pattern pattern;
    
        if (tskReqStr.contains("assemble"))
            pattern = Pattern.compile("assemble(\\w+)(Release|Debug)")
        else
            pattern = Pattern.compile("generate(\\w+)(Release|Debug)")
    
        Matcher matcher = pattern.matcher(tskReqStr)
    
        if (matcher.find())
            return matcher.group(1).toLowerCase()
        else {
            println "NO MATCH FOUND"
            return ""
        }
    }
    

    在执行getCurrentFlavor方法之后,得到当前编译的flavor,然后根据flavor值进行判断执行不同加载依赖。注意的是在你修改完gradle的代码时,你点击sync now是无法获取到flavor的,你看到的log将会是空的,只有你调用Make Project或者Run或者build的时候,才能获取到flavor的值

    gradle println输出的值,可以在build窗口查看。

    如下图,我选择编译国内版本的时候输出 log和加载的依赖。
    image.png

    相关文章

      网友评论

          本文标题:Android gradle运行时,执行不同的代码

          本文链接:https://www.haomeiwen.com/subject/johmcktx.html