您的位置:首页 > 移动开发 > Android开发

Android中apk多渠道打包----友盟打包实现步骤

2017-09-18 16:20 375 查看
导入友盟相关jar包的前提下:

1.按照umeng的要求,manifest文件中需要有

<meta-data

 android:name="UMENG_CHANNEL"

 android:value="${UMENG_CHANNEL_VALUE}" />

这段配置,value那里就是wandoujia,360之类的渠道名称,但是我们在这里不会去写渠道名,写的是一个占位符,后面gradle编译的时候会动态的替换掉它。

2,在module(一般也就是app)的build.gradle的android{}中添加如下内容:

productFlavors{

          wandoujia{

             manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]

          }

          xiaomi{

             manifestPlaceholders=[UMENG_CHANNEL_VALUE: "xiaomi"]

          }

      }

productFlavors是android节点的一个自节点。你需要打什么渠道的包,就在这里按umeng的要求用渠道名给UMENG_CHANNEL_VALUE赋值。 

3.优化1:上面只是两个渠道,如果有几十个渠道,都这样写,重复的东西太多,观察到每个渠道就是flavor的名称,所以修改如下:

productFlavors{

  wandoujia{

      //manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]

  }

  xiaomi{

      //manifestPlaceholders=[UMENG_CHANNEL_VALUE: "xiaomi"]

  }

 }

 productFlavors.all { flavor ->

  flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]

 }

3.优化2:上面经过签名打包后生成的apk的名称是有默认命名规则的,如:xxx-xiaomi-release.apk但是我们想包含版本信息如:xxx-xiaomi-release-1.0.apk,所以最终打包脚本如下:

productFlavors{

    wandoujia{

        //manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]

    }

    xiaomi{

        //manifestPlaceholders=[UMENG_CHANNEL_VALUE: "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)

        }

    }

 }

4.获取渠道

在代码中我们可以通过读取mate-data信息来获取渠道,然后添加到请求参数中,获取方法如下:

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 ignored) {

   }

   return "";

}

5.执行签名打包:(参考http://blog.csdn.net/zhaihaohao1/article/details/51167847

这时候你去app/build/outputs/apk中就能看到自动打好的渠道包了。

参考视频 http://ke.atguigu.com/course/128
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: