多渠道打包上线

在gradle中完成我们的多渠道打包

什么是渠道?

应用市场

多渠道打包的原理是什么?

menedata

引入友盟第三方统计sdk

1.到友盟官网注册,创建项目,获取对应的appkey

2.添加gradle依赖,注册友盟appkey

app

compile 'com.umeng.analytics:analytics:latest.integration'

在Manifest中

<application>
    <meta-data android:name="UNENG_APPKEY" android:value="6738jdu93ujdi892idjiu9"/>
        <meta-data android:name="UNENG_CHANNEL" android:value="${UNENG_CHANNEL_VALUE}"/>
</application>

3.完成友盟sdk的初始化

application.java

public void initUMeng(){
    MobclickAgent.setDebugMode(true);
    MobcliceAgent.openActivityDurationTrack(false);
}

多渠道打包脚本编写

apply plugin: 'com.android.application'
android {
    defaultConfig{
        manifestPlaceholders=["UMENG_CHANNEL_VALUE":"imooc"]
    }
    signingConfigs{
        debug{}
        release{
            storeFile file("youdu.jks")
            storePassword "123456"
            keyAlias "qndroid"
            keyPassword "123456"
        }
    }
    buildTypes{
        release{
            ...
            signingConfig signingConfigs.release
        }
    }
    productFlavors{
        imooc{
            manifestPlaceholders=[UMENG_CHANNEL_VALUE:"imooc"]
        }
        googleplyer{
            manifestPlaceholders=[UMENG_CHANNEL_VALUE:"googleplyer"]
        }
        baidu{
            manifestPlaceholders=[UMENG_CHANNEL_VALUE:"baidu"]
        }
        productFlavors.all{
            flavor->flavor.manifestPlaceholders =[UMENG_CHANNEL_VALUE:"baidu"]
        }
    }

}

生成签名文件并放在app目录下

生成所有渠道release包

./gradlew assemblerelease

生成所有渠道debug包

./gradlew assembledebug

生成指定渠道release包

./gradlew assembleBaidudebug

生成apk所在路径

app/build/output/apk/

更改生成apk包的名称

  buildTypes {
        release {
           ...
            //指定我们release包的输出文件名就是我们的渠道名字
            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    def outputFile = output.outputFile
                    if (outputFile != null && outputFile.name.endsWith(".apk")) {

                        def fileName = "${variant.productFlavors[0].name}" + ".apk"
                        output.outputFile = new File(outputFile.parent, fileName);
                    }
                }
            }
        }
    }

资源的改变

productFlavors{
    imooc{
        ...
            resValuse("strings","name","imooc")
    }
     googleplayer{
        ...
            resValuse("strings","name","googleplayer")
    }
     baidu{
        ...
            resValuse("strings","name","baidu")
    }
}

flavors中也可以改变applicationIdsuffix等

Last updated

Was this helpful?