码迷,mamicode.com
首页 > 移动开发 > 详细

android 多渠道打包

时间:2018-08-22 22:54:28      阅读:386      评论:0      收藏:0      [点我收藏+]

标签:version   作用   each   文件   java   技术   ctf   文件中   groov   

android 多渠道打包

原理

在manifest文件中,application标签内部设置不同的metadata标签即可,可以通过java api获取这个matedata内的值

友盟提供的多渠道打包技术

  1. 按照umeng的要求,在manifest文件中添加如下代码

    <meta-data
               android:name="UMENG_CHANNEL"
               android:value="你自己申请的key" />
  2. 如果在value的地方写死了一个值,会使得每次打包只能固定一个渠道,所以更改为如下方式

    <meta-data
               android:name="UMENG_CHANNEL"
               android:value="${UMENG_CHANNEL_VALUE}" />

    使用占位符,在build.gradle的android标签内添加如下代码,区分渠道信息。这个占位符和spring框架中的ognl表达式作用有点像

    productFlavors{
            huawei{
                manifestPlaceholders = [UMENG_CHANNEL_VALUE: "huawei"]
            }
            xiaomi{
                manifestPlaceholders=[UMENG_CHANNEL_VALUE: "xiaomi"]
            }
        }

    可以简写为以下内容

    productFlavors{
      huawei{
    
      }
      xiaomi{
    
      }
     }
     productFlavors.all { flavor ->
      flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
     }

    如果要包含版本信息,可以修改为如下配置

    productFlavors{
        huawei{
    
        }
        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 ignored) {
       }
       return "";
    }

附加小知识

当电脑连接了多个android设备的时候,使用adb shell时进入不同的设备,可以添加参数

adb -s 序列号 install/shell 等命令

查看序列好

adb devices

显示结果的第一列就是序列号

android 多渠道打包

标签:version   作用   each   文件   java   技术   ctf   文件中   groov   

原文地址:https://www.cnblogs.com/android-lol/p/9520748.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!