美文网首页
Build Variants

Build Variants

作者: 乐此不痞 | 来源:发表于2016-12-06 15:08 被阅读0次

    productFlavors

    android{
        ......
        productFlavors{
            productA{
                 #这里定义产品A的特性
            }
            productB{
                #这里定义产品B的特性
            }
            #更多产品 ...
        }
        ......
    }
    

    这样在最终编译的时候(终端运行gradle build命令),就会编译出多个产品的APK出来,平时调试的时候,一般通过设置一个产品来调试,设置在AndroidStudio的Build Variants菜单。

    菜单中会有productADebug,productARelease,productBDebug等,它们是productFlavors和buildTypes中的两两组合。

    使用场景

    • 不同产品,不同包名
      根据需要可以设置不同的包名applicationId,版本versionName

    • 不同产品,不同渠道号
      因为国内应用市场太多,很多时候投放推广的时候需要追踪应用市场的数据,所以为每个应用市场打一个不同的包是有需要的,应用市场的包,通常叫做渠道包,区别一般只有一个ID(渠道号)不一样,这个ID是保存在AndroidManifest文件中,所以在编译时需要动态修改AndroidManifest中的数据,这个用manifestPlaceholders就可以搞定了:

    productFlavors{
      productA{
        manifestPlaceholders = [MC:"product-a"]
      }
      productB{
        manifestPlaceholders = [MC:"product-b"]
      }
    }
    

    然后在AndroidManifest中使用:

    <meta-data android:name="CHANNEL" android:value="${MC}"/>
    
    • 不同产品,不同库
      为不同的产品编译不同的库,产品A只编译自己需要库,不需要编译对自己无用的库。
    dependencies {
        # ....
        productACompile 'io.reactivex.rxjava2:rxjava:2.0.1'
    }
    
    • 不同产品,不同代码
      库可以不一样,代码当然也可以不一样了,gradle中有一个source set的概念,对于不同的产品,可以设置不同的source set。AndroidStudio默认帮我们创建了应用于所有产品的代码集main,它的对应的目录是src/main,我们也可以创建每个产品特有的代码集src/productA,src/productB这样,名字和产品名字是对应的。在编译的时候,默认会将这些代码集加入编译,这样就实现了不同产品,不同代码。

    • 不同产品,不同资源
      这个用法其实和上面是一样的,代码集中可以定义资源,这样就做到了不同的产品,使用不同的资源,同样可以定义不同的AndroidManifest文件,比如申请不同的权限之类的。

    相关文章

      网友评论

          本文标题:Build Variants

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