Android开发之多渠道打包

一、友盟多渠道打包:

  在AndroidManifest.xaml文件中application节点下:

<!--友盟多渠道打包-->
        <meta-data
            android:name="UMENG_CHANNEL"
            android:value="${UMENG_CHANNEL_VALUE}" />

  然后在app下的build.gradle文件下的android节点下:

//    方式一:
    productFlavors{
        wandoujia{
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
        }
        xiaomi{
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
        }
    }

然后重新编译一下app,选择Build->Generate Signed Apk,然后会出现多渠道:

 

 

下面有两种优化方式:

  优化1:

//优化1:
    productFlavors{
        wandoujia{}
        xiaomi{}
    }
    productFlavors.all { flavor ->
        flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]}

 

  优化2:

 //优化2:
    productFlavors{
        wandoujia{}
        xiaomi{}
    }
    productFlavors.all {flavor ->
        flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def outputFile = output.outputFile
            if(outputFile != null && outputFile.name.endsWith(".apk")){
                def fileName = outputFile.name.replace(".apk","-${defaultConfig.versionName}.apk")
                output.outputFile = new File(outputFile.parent, fileName);
            }
        }
    }

 

 

在代码中获取渠道信息:

 

private String getChannel(){
        try {
            PackageManager pm = getPackageManager();
            ApplicationInfo appInfo = pm.getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA);
            return appInfo.metaData.getString("UMENG_CHANNEL");
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return "";
    }

 

posted @ 2017-02-16 11:19  Godfunc  阅读(219)  评论(0编辑  收藏  举报